diff --git a/.env.dev b/.env.dev index ca0953da7..d041167ba 100644 --- a/.env.dev +++ b/.env.dev @@ -12,6 +12,7 @@ FORWARDED_PROTO=http LDAP_ENABLED=False FUNKWHALE_SPA_HTML_ROOT=http://nginx/ PYTHONTRACEMALLOC=0 +MEDIA_ROOT=/data/media # Uncomment this if you're using traefik/https # FORCE_HTTPS_URLS=True @@ -19,3 +20,4 @@ PYTHONTRACEMALLOC=0 # Customize to your needs POSTGRES_VERSION=11 DEBUG=true +TYPESENSE_API_KEY="apikey" diff --git a/.gitignore b/.gitignore index 91e92374f..b37e36601 100644 --- a/.gitignore +++ b/.gitignore @@ -92,7 +92,15 @@ docs/_build po/*.po docs/swagger _build -front/src/translations.json -front/src/translations/*.json -front/locales/en_US/LC_MESSAGES/app.po *.prof + +# Docker +docker-bake.*.json +metadata.json + +# Linting +.eslintcache +tsconfig.tsbuildinfo + +# Vscode +.vscode/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a227848b..b97e36e95 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,11 +4,15 @@ include: file: /templates/pre-commit.yml - project: funkwhale/ci file: /templates/lychee.yml + - project: funkwhale/ci + file: /templates/ssh-agent.yml variables: PYTHONDONTWRITEBYTECODE: "true" PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip + YARN_CACHE_FOLDER: $CI_PROJECT_DIR/.cache/yarn + POETRY_VIRTUALENVS_IN_PROJECT: "true" .shared_variables: # Keep the git files permissions during job setup @@ -17,7 +21,42 @@ variables: GIT_DEPTH: "5" FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: "true" +.shared_caches: + # Cache for front related jobs + front_cache: &front_cache + - key: front-yarn + paths: [$YARN_CACHE_FOLDER] + - key: + prefix: front-node_modules + files: [front/yarn.lock] + paths: [front/node_modules] + - key: + prefix: front-lint + files: + - front/.eslintcache + - front/tsconfig.tsbuildinfo + + # Cache for api related jobs + # Include the python version to prevent loosing caches in the test matrix + api_cache: &api_cache + - key: api-pip-$PYTHON_VERSION + paths: [$PIP_CACHE_DIR] + - key: + prefix: api-venv-$PYTHON_VERSION + files: [api/poetry.lock] + paths: [api/.venv] + + # Cache for docs related jobs + docs_cache: &docs_cache + - key: docs-pip + paths: [$PIP_CACHE_DIR] + - key: + prefix: docs-venv + files: [docs/poetry.lock] + paths: [docs/.venv] + default: + interruptible: true tags: - docker @@ -31,7 +70,7 @@ workflow: $CI_COMMIT_TAG ) # Run for merge requests from any repo or branches - - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_MERGE_REQUEST_ID stages: - review @@ -41,84 +80,64 @@ stages: - publish review_front: - interruptible: true - stage: review - image: node:18-alpine - when: manual allow_failure: true + stage: review + needs: [] + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + when: manual + + image: $CI_REGISTRY/funkwhale/ci/node-python:18 variables: BASE_URL: /-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/ VUE_APP_ROUTER_BASE_URL: /-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/ VUE_APP_INSTANCE_URL: https://demo.funkwhale.audio NODE_ENV: review NODE_OPTIONS: --max-old-space-size=4096 + environment: + name: review/front/$CI_COMMIT_REF_NAME + url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/index.html + cache: *front_cache before_script: - - apk add --no-cache jq bash coreutils python3 - - rm -rf front-review - mkdir front-review - cd front + - yarn install --frozen-lockfile script: - - yarn install - # this is to ensure we don't have any errors in the output, - # cf https://dev.funkwhale.audio/funkwhale/funkwhale/issues/169 - - yarn run build --base ./ | tee /dev/stderr | (! grep -i 'ERROR in') + - yarn run build --base ./ - cp -r dist/* ../front-review artifacts: expire_in: 2 weeks paths: - front-review - cache: - key: "funkwhale__front_dependencies" - paths: - - front/node_modules - - front/yarn.lock - environment: - name: review/front/$CI_COMMIT_REF_NAME - url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/index.html review_docs: - interruptible: true - stage: review allow_failure: true - image: python:3.11 - variables: - BUILD_PATH: "../docs-review" + stage: review + needs: [] + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + changes: [docs/**/*] + + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11 + environment: + name: review/docs/$CI_COMMIT_REF_NAME + url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/docs-review/index.html + cache: *docs_cache before_script: - - rm -rf docs-review - - mkdir docs-review - cd docs - - apt-get update - - apt-get install -y graphviz git - - pip install poetry - - poetry install - - git switch develop && git pull - - git switch stable && git pull - - git switch $CI_COMMIT_BRANCH && git pull + - make install script: - - poetry run python3 -m sphinx . $BUILD_PATH - cache: - key: "$CI_PROJECT_ID__sphinx" - paths: - - "$PIP_CACHE_DIR" + - make build BUILD_DIR=../docs-review artifacts: expire_in: 2 weeks paths: - docs-review - environment: - name: review/docs/$CI_COMMIT_REF_NAME - url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/docs-review/index.html - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - changes: - - docs/**/* - - if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH - when: manual find_broken_links: + extends: [.lychee] allow_failure: exit_codes: 2 - extends: [.lychee] script: - > lychee @@ -131,56 +150,96 @@ find_broken_links: --exclude-path 'docs/_templates/' -- . || exit $? -changelog_snippet: - interruptible: true - image: alpine:3.17 +require_changelog: stage: lint - before_script: - - apk add git - - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME - script: - - git diff --name-only FETCH_HEAD | grep "changes/changelog.d/*" rules: - - if: $CI_COMMIT_AUTHOR == 'Renovate Bot ' + # Don't run on merge request that mention NOCHANGELOG or renovate bot commits + - if: > + $CI_MERGE_REQUEST_TITLE =~ /NOCHANGELOG/ || + $CI_COMMIT_AUTHOR == "Renovate Bot " when: never - - if: $CI_MERGE_REQUEST_TITLE =~ /NOCHANGELOG/ - when: never - - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + + image: python:3.11 + script: + - git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA..$CI_COMMIT_SHA | grep "changes/changelog.d/*" pre-commit: extends: [.pre-commit] -eslint: - interruptible: true - image: node:18-alpine +lint_api: + allow_failure: true stage: lint + needs: [] + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [api/**/*] + + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 + before_script: + - cd api + - make install + script: + - make lint + +lint_front: + stage: lint + needs: [] + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [front/**/*] + + image: $CI_REGISTRY/funkwhale/ci/node-python:18 + cache: *front_cache before_script: - cd front - - apk add --no-cache jq bash coreutils python3 - - yarn install + - yarn install --frozen-lockfile script: - yarn lint --max-warnings 0 - yarn lint:tsc - cache: - key: "$CI_PROJECT_ID__eslint_npm_cache" - paths: - - front/node_modules + +test_scripts: + stage: test + needs: [] rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - changes: - - front/**/* + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [scripts/**/*] + + image: $CI_REGISTRY/funkwhale/ci/python:3.11 + cache: + - key: scripts-pip + paths: [$PIP_CACHE_DIR] + - key: + prefix: scripts-venv + files: [scripts/poetry.lock] + paths: [scripts/.venv] + before_script: + - cd scripts + - make install + script: + - make test test_api: - interruptible: true - services: - - postgres:15-alpine - - redis:7-alpine - stage: test retry: 1 - cache: - key: "$CI_PROJECT_ID__pip_cache" - paths: - - "$PIP_CACHE_DIR" + stage: test + needs: + - job: lint_api + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [api/**/*] + + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION + parallel: + matrix: + - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11"] + services: + - name: postgres:15-alpine + command: + - --fsync=off + - --full_page_writes=off + - --synchronous_commit=off + - name: redis:7-alpine + cache: *api_cache variables: DATABASE_URL: "postgresql://postgres@postgres/postgres" FUNKWHALE_URL: "https://funkwhale.ci" @@ -189,9 +248,16 @@ test_api: CACHE_URL: "redis://redis:6379/0" before_script: - cd api - - poetry install --no-root + - poetry install --all-extras script: - - poetry run pytest --cov-report xml --cov-report term-missing:skip-covered --cov=funkwhale_api --junitxml=report.xml tests/ + - > + poetry run pytest + --junitxml=report.xml + --cov + --cov-config=pyproject.toml + --cov-report=term-missing:skip-covered + --cov-report=xml + tests artifacts: expire_in: 2 weeks reports: @@ -199,60 +265,83 @@ test_api: coverage_report: coverage_format: cobertura path: api/coverage.xml - parallel: - matrix: - - PY_VER: ["3.7", "3.8", "3.9", "3.10", "3.11"] - image: $CI_REGISTRY/funkwhale/backend-test-docker:$PY_VER coverage: '/TOTAL\s*\d*\s*\d*\s*(\d*%)/' + +test_front: + stage: test + needs: + - job: lint_front rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push" - changes: - - api/**/* - - if: $CI_COMMIT_REF_PROTECTED == "true" - when: always + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [front/**/*] -# Those tests are disabled for now since no vitest dom emulation is providing -# AudioContext, which is required for our HTML audio player -#test_front: -# interruptible: true -# stage: test -# image: node:18-alpine -# before_script: -# - cd front -# - apk add --no-cache jq bash coreutils python3 -# script: -# - yarn install --check-files -# - yarn test:unit -# cache: -# key: "funkwhale__front_dependencies" -# paths: -# - front/node_modules -# - front/yarn.lock -# artifacts: -# name: "front_${CI_COMMIT_REF_NAME}" -# paths: -# - front/dist/ -# reports: -# junit: front/coverage/cobertura-coverage.xml -# tags: -# - docker -# rules: -# - if: $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_PIPELINE_SOURCE == "push" -# changes: -# - front/**/* -# - if: $CI_COMMIT_REF_PROTECTED == "true" -# when: always + image: $CI_REGISTRY/funkwhale/ci/node-python:18 + cache: *front_cache + before_script: + - cd front + - yarn install --frozen-lockfile + script: + - yarn test:unit + artifacts: + reports: + junit: front/test_results.xml + coverage_report: + coverage_format: cobertura + path: front/coverage/cobertura-coverage.xml -build_openapi_schema: +build_metadata: stage: build - image: $CI_REGISTRY/funkwhale/backend-test-docker:3.11 + + image: $CI_REGISTRY/funkwhale/ci/python:3.11 + variables: + GIT_FETCH_EXTRA_FLAGS: --prune + script: + - make build-metadata + - make docker-metadata + artifacts: + reports: + dotenv: build_metadata.env + paths: + - docker-bake.json + - docker-bake.api.json + - docker-bake.front.json + +test_integration: + stage: test + rules: + - if: $RUN_CYPRESS + interruptible: true + + image: + name: cypress/included:12.14.0 + entrypoint: [""] + cache: + - *front_cache + - key: + paths: + - /root/.cache/Cypress + before_script: + - cd front + - yarn install + script: + - yarn run cypress run + +build_api_schema: + stage: build + needs: + - job: test_api + optional: true + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [api/**/*] + # Add build_docs rules because it depends on the build_api_schema artifact + - changes: [docs/**/*] + + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 services: - postgres:15-alpine - redis:7-alpine - cache: - key: "$CI_PROJECT_ID__pip_cache" - paths: - - "$PIP_CACHE_DIR" + cache: *api_cache variables: DATABASE_URL: "postgresql://postgres@postgres/postgres" FUNKWHALE_URL: "https://funkwhale.ci" @@ -262,8 +351,7 @@ build_openapi_schema: API_TYPE: "v1" before_script: - cd api - - pip3 install poetry - - poetry install + - poetry install --all-extras - poetry run funkwhale-manage migrate script: - poetry run funkwhale-manage spectacular --file ../docs/schema.yml @@ -272,162 +360,151 @@ build_openapi_schema: paths: - docs/schema.yml -build_documentation: +build_docs: stage: build - image: python:3.11 needs: - - job: build_openapi_schema + - job: build_api_schema artifacts: true - variables: - BUILD_PATH: "../public" - GIT_STRATEGY: clone - GIT_DEPTH: 0 + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [docs/**/*] + + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11 + cache: *docs_cache before_script: - cd docs - - apt-get update - - apt-get install -y graphviz - - pip install poetry - - poetry install - - git branch stable --track origin/stable || true - - git branch develop --track origin/develop || true + - make install script: - - ./build_docs.sh - cache: - key: "$CI_PROJECT_ID__sphinx" - paths: - - "$PIP_CACHE_DIR" + - make build-all BUILD_DIR=../public artifacts: expire_in: 2 weeks paths: - public - rules: - - if: $CI_COMMIT_BRANCH == "stable" || $CI_COMMIT_BRANCH == "develop" - when: always - - changes: - - docs/**/* - when: always build_front: stage: build - image: node:18-alpine + needs: + # The test_front job is currently disabled + # - job: test_front + - job: lint_front + optional: true + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [front/**/*] + + image: $CI_REGISTRY/funkwhale/ci/node-python:18 variables: <<: *keep_git_files_permissions NODE_OPTIONS: --max-old-space-size=4096 + cache: *front_cache before_script: - - apk add --no-cache jq bash coreutils python3 - cd front + - yarn install --frozen-lockfile script: - - yarn install - # this is to ensure we don't have any errors in the output, - # cf https://dev.funkwhale.audio/funkwhale/funkwhale/issues/169 - - yarn run build:deployment | tee /dev/stderr | (! grep -i 'ERROR in') + - yarn run build:deployment artifacts: name: front_${CI_COMMIT_REF_NAME} paths: - - front/dist/ - only: - - tags@funkwhale/funkwhale - - stable@funkwhale/funkwhale - - develop@funkwhale/funkwhale + - front/dist build_api: stage: build - image: bash + needs: + - job: test_api + optional: true + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [api/**/*] + + image: $CI_REGISTRY/funkwhale/ci/python:3.11 variables: <<: *keep_git_files_permissions script: - rm -rf api/tests - > - if [ "$CI_COMMIT_REF_NAME" == "develop" ] || [ "$CI_COMMIT_REF_NAME" == "stable" ]; then + if [[ -z "$CI_COMMIT_TAG" ]]; then ./scripts/set-api-build-metadata.sh $CI_COMMIT_SHORT_SHA; fi artifacts: name: api_${CI_COMMIT_REF_NAME} paths: - api - only: - - tags@funkwhale/funkwhale - - stable@funkwhale/funkwhale - - develop@funkwhale/funkwhale -deploy_documentation: +deploy_docs: + interruptible: false + extends: .ssh-agent stage: publish - image: alpine needs: - - job: build_documentation + - job: build_docs artifacts: true - before_script: - - apk add openssh-client rsync - - mkdir -p ~/.ssh - - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts - - chmod 644 ~/.ssh/known_hosts - - eval `ssh-agent -s` - - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - script: - - rsync -r --delete -e "ssh -p 2282" $CI_PROJECT_DIR/public/ docs@docs.funkwhale.audio:/htdocs/$CI_COMMIT_REF_NAME rules: - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ -.docker_publish: - stage: publish - image: egon0/docker-with-buildx-and-git:bash - parallel: - matrix: - - COMPONENT: ["api", "front"] + image: $CI_REGISTRY/funkwhale/ci/python:3.11 + variables: + GIT_STRATEGY: none + script: + - rsync -r --delete -e "ssh -p 2282" $CI_PROJECT_DIR/public/ docs@docs.funkwhale.audio:/htdocs/$CI_COMMIT_REF_NAME + +docker: + interruptible: false + tags: [docker, privileged, multiarch] + stage: build + needs: + - job: build_metadata + artifacts: true + - job: test_api + optional: true + - job: test_front + optional: true + rules: + - if: $CI_COMMIT_TAG + variables: + BUILD_ARGS: > + --set *.platform=linux/amd64,linux/arm64,linux/arm/v7 + --no-cache + --push + + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + variables: + BUILD_ARGS: > + --set *.platform=linux/amd64,linux/arm64,linux/arm/v7 + --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,oci-mediatypes=false + --set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max,oci-mediatypes=false + --push + + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + variables: + BUILD_ARGS: > + --set *.platform=linux/amd64 + --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME,oci-mediatypes=false + + image: $CI_REGISTRY/funkwhale/ci/docker:20 + services: + - docker:20-dind variables: <<: *keep_git_files_permissions - - IMAGE_NAME: funkwhale/$COMPONENT - IMAGE: $IMAGE_NAME:$CI_COMMIT_REF_NAME - IMAGE_LATEST: $IMAGE_NAME:latest - DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" - BUILD_PLATFORMS: linux/amd64,linux/arm64,linux/arm/v7 - tags: - - multiarch - services: - - docker:20-dind + BUILDKIT_PROGRESS: plain + + DOCKER_CACHE_IMAGE: $CI_REGISTRY/funkwhale/funkwhale/cache before_script: - - docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD - cache: - key: docker_public_${CI_COMMIT_REF_NAME} + - > + echo "$CI_REGISTRY_PASSWORD" | docker login --username "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"; + if [[ "$BUILD_ARGS" =~ "--push" ]]; then + echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_LOGIN" --password-stdin docker.io; + fi + script: + - > + if [[ -z "$CI_COMMIT_TAG" ]]; then + ./scripts/set-api-build-metadata.sh $CI_COMMIT_SHORT_SHA; + fi + - docker buildx create --use + - make docker-build BUILD_ARGS="--metadata-file metadata.json $BUILD_ARGS" + - cat metadata.json + artifacts: + name: docker_metadata_${CI_COMMIT_REF_NAME} paths: - - ~/.cargo - -docker_publish_stable_release: - # Publish a docker image for releases - extends: .docker_publish - rules: - - if: $CI_COMMIT_TAG && $CI_COMMIT_REF_NAME =~ /^[0-9]+(.[0-9]+){1,2}$/ - script: - # Check if this is the latest release - - ./docs/get-releases-json.py | scripts/is-docker-latest.py $CI_COMMIT_TAG - && export DOCKER_LATEST_TAG="-t $IMAGE_LATEST" || export DOCKER_LATEST_TAG=; - - export major="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1)" - - export minor="$(echo $CI_COMMIT_REF_NAME | cut -d '.' -f 1,2)" - - cd $COMPONENT - - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA - - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE $DOCKER_LATEST_TAG -t $IMAGE_NAME:$major -t $IMAGE_NAME:$minor . - -docker_publish_unstable_release: - # Publish a docker image for releases - extends: .docker_publish - rules: - - if: $CI_COMMIT_TAG && $CI_COMMIT_REF_NAME !~ /^[0-9]+(.[0-9]+){1,2}$/ - script: - # Check if this is the latest release - - cd $COMPONENT - - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA - - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE . - -docker_publish_non-release: - # Publish a docker image for each commit on develop - extends: .docker_publish - only: - - develop@funkwhale/funkwhale - - stable@funkwhale/funkwhale - script: - - cd $COMPONENT - - docker buildx create --use --name A$CI_COMMIT_SHORT_SHA - - docker buildx build --platform $BUILD_PLATFORMS --push -t $IMAGE . + - metadata.json diff --git a/.gitlab/renovate.json b/.gitlab/renovate.json index 0b8e75237..9b453909a 100644 --- a/.gitlab/renovate.json +++ b/.gitlab/renovate.json @@ -35,12 +35,6 @@ "matchBaseBranches": ["stable"], "enabled": false }, - { - "matchUpdateTypes": ["patch", "pin", "digest"], - "matchBaseBranches": ["develop"], - "automerge": true, - "automergeType": "branch" - }, { "matchManagers": ["npm"], "addLabels": ["Area::Frontend"] @@ -70,6 +64,10 @@ ], "fileFilters": ["changes/changelog.d/postgres.update"] } + }, + { + "matchPackageNames": ["python"], + "rangeStrategy": "widen" } ] } diff --git a/.gitpod.yml b/.gitpod.yml index b634d541c..29f893054 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -19,6 +19,7 @@ tasks: gp ports await 5432 poetry run funkwhale-manage migrate + poetry run funkwhale-manage fw users create --superuser --username gitpod --password funkwhale --email test@example.org poetry run funkwhale-manage gitpod init command: | echo "MEDIA_URL=`gp url 8000`/media/" >> ../.gitpod/.env @@ -47,49 +48,66 @@ tasks: yarn install command: yarn dev --host 0.0.0.0 --base ./ + - name: Documentation + before: cd docs + init: make install + command: make dev + - name: Welcome to Funkwhale development! env: COMPOSE_FILE: /workspace/funkwhale/.gitpod/docker-compose.yml ENV_FILE: /workspace/funkwhale/.gitpod/.env VUE_EDITOR: code DJANGO_SETTINGS_MODULE: config.settings.local - init: pre-commit install + init: | + pre-commit install + pre-commit run --all command: | - pre-commit run --all && clear echo "" echo -e " ⠀⠀⠸⣿⣷⣦⣄⣠⣶⣾⣿⠇⠀⠀ You can now start developing Funkwhale with gitpod!" echo -e " ⠀⠀⠀⠈⠉⠻⣿⣿⠟⠉⠁⠀⠀⠀" echo -e " \u1b[34m⣀⠀⢀⡀⢀⣀\u1b[0m⠹⠇\u1b[34m⣀⡀⢀⡀⠀⣀ \u1b[0mTo sign in to the superuser account," echo -e " \u1b[34m⢻⣇⠘⣧⡈⠻⠶⠶⠟⢁⣾⠃⣸⡟ \u1b[0mplease use these credentials:" echo -e " \u1b[34m⠀⠻⣦⡈⠻⠶⣶⣶⠶⠟⢁⣴⠟⠀" - echo -e " \u1b[34m⠀⠀⠈⠻⠷⣦⣤⣤⣴⠾⠟⠁⠀⠀ gitpod\u1b[0m:\u1b[34mgitpod" + echo -e " \u1b[34m⠀⠀⠈⠻⠷⣦⣤⣤⣴⠾⠟⠁⠀⠀ gitpod\u1b[0m:\u1b[34mfunkwhale" echo "" ports: - - port: 8000 + - name: Funkwhale + port: 8000 visibility: public onOpen: notify - - port: 5000 + - name: Funkwhale API + port: 5000 visibility: private onOpen: ignore - - port: 5432 + - name: PostgreSQL + port: 5432 visibility: private onOpen: ignore - - port: 5678 + - name: Debugpy + port: 5678 visibility: private onOpen: ignore - - port: 6379 + - name: Redis + port: 6379 visibility: private onOpen: ignore - - port: 8080 + - name: Frontend + port: 8080 visibility: private onOpen: ignore + - name: Documentation + port: 8001 + visibility: public + onOpen: notify + vscode: extensions: - Vue.volar diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index 7236a7e3e..d996a8a13 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -1,9 +1,11 @@ -FROM gitpod/workspace-full:2022-11-15-17-00-18 +FROM gitpod/workspace-full:2023-10-25-20-43-33 USER gitpod RUN sudo apt update -y \ && sudo apt install libsasl2-dev libldap2-dev libssl-dev ffmpeg gettext -y -RUN pip install poetry pre-commit \ +RUN pyenv install 3.11 && pyenv global 3.11 + +RUN pip install poetry pre-commit jinja2 towncrier \ && poetry config virtualenvs.create true \ && poetry config virtualenvs.in-project true diff --git a/.gitpod/docker-compose.yml b/.gitpod/docker-compose.yml index 9b764307d..62b5f5930 100644 --- a/.gitpod/docker-compose.yml +++ b/.gitpod/docker-compose.yml @@ -18,7 +18,6 @@ services: - 6379:6379 nginx: - command: /entrypoint.sh env_file: - ./.env image: nginx @@ -29,15 +28,16 @@ services: environment: - "NGINX_MAX_BODY_SIZE=100M" - "FUNKWHALE_API_IP=host.docker.internal" + - "FUNKWHALE_API_HOST=host.docker.internal" - "FUNKWHALE_API_PORT=5000" - "FUNKWHALE_FRONT_IP=host.docker.internal" - "FUNKWHALE_FRONT_PORT=8080" - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-host.docker.internal}" + - "FUNKWHALE_PROTOCOL=https" volumes: - - ../data/media:/protected/media:ro + - ../data/media:/workspace/funkwhale/data/media:ro - ../data/music:/music:ro - - ../data/staticfiles:/staticfiles:ro + - ../data/staticfiles:/usr/share/nginx/html/staticfiles/:ro - ../deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - - ../docker/nginx/conf.dev:/etc/nginx/nginx.conf.template:ro - - ../docker/nginx/entrypoint.sh:/entrypoint.sh:ro + - ../docker/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro - ../front:/frontend:ro diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b59e1df12..4b2994f75 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,11 +24,22 @@ repos: - id: mixed-line-ending - id: trailing-whitespace + - repo: https://github.com/python-poetry/poetry + rev: 1.5.1 + hooks: + - id: poetry-check + files: ^api/pyproject.toml$ + args: [--directory=api] + + - id: poetry-lock + files: ^api/pyproject.toml$ + args: [--directory=api, --check] + - repo: https://github.com/asottile/pyupgrade rev: v3.9.0 hooks: - id: pyupgrade - args: [--py37-plus] + args: [--py38-plus] exclude: ^(api/.*/migrations/.*) - repo: https://github.com/psf/black diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 28802f09c..000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Attach python debugger", - "type": "python", - "request": "attach", - "connect": { - "host": "localhost", - "port": 5678 - }, - "django": true - }, - { - "name": "Debug python", - "type": "python", - "request": "launch", - "module": "uvicorn", - "cwd": "${workspaceFolder}/api", - "envFile": "${workspaceFolder}/.gitpod/.env", - "args": [ - "--reload", - "config.asgi:application", - "--host", - "0.0.0.0", - "--port", - "5000", - "--reload-dir", - "config/", - "--reload-dir", - "funkwhale_api/" - ], - "django": true - } - ] -} diff --git a/.vscode/markdown.code-snippets b/.vscode/markdown.code-snippets deleted file mode 100644 index 3fe4b1dd2..000000000 --- a/.vscode/markdown.code-snippets +++ /dev/null @@ -1,108 +0,0 @@ -{ - "Callout": { - "prefix": "callout", - "description": "Add a callout to highlight information", - "body": [ - ":::{${1|attention,caution,danger,error,hint,important,note,seealso,tip,warning|}} ${2:Optional title}", - "${0:${TM_SELECTED_TEXT}}", - ":::" - ], - }, - "Code tabs": { - "prefix": "code-tabs", - "description": "Insert a set of code tabs", - "body": [ - ":::{tab-set-code}", - "", - "$0", - "", - ":::" - ] - }, - "Tab set": { - "prefix": "tab-set", - "description": "Insert a group of generic tabs", - "body": [ - "::::{tab-set}", - ":::{tab-item} ${1:Tab title}", - "$2", - ":::", - "", - ":::{tab-item} ${3:Tab title}", - "$0", - ":::", - "", - "::::" - ] - }, - "Insert fragment": { - "prefix": "insert fragment", - "description": "Insert reusable text from another file", - "body": [ - ":::{include} ${1:full path to file}", - ":start-after: ${2:the text to start after}", - ":end-before: ${0:the text to end before}", - ":::" - ] - }, - "Dropdown": { - "prefix": "insert dropdown", - "description": "Insert a dropdown (accordion)", - "body": [ - ":::{dropdown} ${1:title}", - "${0:${TM_SELECTED_TEXT}}", - ":::" - ] - }, - "Versioning": { - "prefix": "version change", - "description": "Specify when a feature was added, changed, or deprecated", - "body": [ - ":::{${1|versionadded,versionchanged,deprecated|}} ${2:v4.32.0}", - "${0:${TM_SELECTED_TEXT}}", - ":::" - ] - }, - "List table": { - "prefix": "list table", - "description": "Insert a table defined as a set of lists", - "body": [ - ":::{list-table} ${1:Optional title}", - ":header-rows: ${2:Number of header rows}", - "", - "* - ${3: First row column 1}", - " - ${4: First row column 2}", - "* - ${5: Second row column 1}", - " - ${0: Second row column 2}", - ":::" - ] - }, - "Guilabel": { - "prefix": "guilabel", - "description": "Format text as a GUI label (e.g. a button label or interface label", - "body": [ - "{guilabel}`${0:${TM_SELECTED_TEXT}}`" - ] - }, - "File": { - "prefix": "file", - "description": "Format text as a file name or path", - "body": [ - "{file}`${0:${TM_SELECTED_TEXT}}`" - ] - }, - "Increase indent": { - "prefix": "increase indent", - "description": "Increase the indentation of all selected colon or backtick fences", - "body": [ - "${TM_SELECTED_TEXT/((?[`:])\\k{2,})/$1$2/gm}" - ] - }, - "Deprecation warning": { - "prefix": "insert deprecation warning", - "description": "Inserts an inline deprecation badge. Useful in tables of parameters", - "body": [ - "{bdg-warning}`Deprecated`" - ] - } -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 5e3690630..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "python.defaultInterpreterPath": "/workspace/funkwhale/api/.venv/bin/python", - "python.testing.cwd": "/workspace/funkwhale/api", - "python.envFile": "/workspace/funkwhale/.gitpod/.env", - "python.testing.pytestArgs": ["--cov=funkwhale_api", "tests/"], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true, - "vitest.enable": true, - "vitest.commandLine": "yarn vitest", - "i18n-ally.localesPaths": ["front/src/locales"], - "i18n-ally.pathMatcher": "*.json", - "i18n-ally.enabledFrameworks": ["vue"], - "i18n-ally.keystyle": "nested" -} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..530210158 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,1748 @@ +# Changelog + +You can subscribe to release announcements by: + +- Following [@funkwhale@fosstodon.org](https://fosstodon.org/@funkwhale) on Mastodon +- Subscribing to the following Atom feed: https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag + +This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.html. + + + +## 1.4.0 (2023-12-12) + +Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html + +Features: + +- Add a management command to generate dummy notifications for testing +- Add atom1.0 to node info services (#2085) +- Add basic cypress testing +- Add NodeInfo 2.1 (#2085) +- Add support for Funkwhale UI library. +- Add support for Python 3.12 +- Allow moderators to set moderation languages (#2085) +- Allow to set the instances server location (#2085) +- Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135) +- Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861) +- Generate all nginx configurations from one template +- New management command to update Uploads which have been imported using --in-place and are now + stored in s3 (#2156) +- Only allow MusicBrainz tagged file on a pod (#2083) +- Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI + entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288) + +Enhancements: + +- Add custom logging functionality (#2155) +- Adding typesense container and api client (2104) +- Cache pip package in api docker builds (#2193) +- Connect loglevel and debug mode (#1538) +- Get api version from python package +- Log service worker registration error and add a warning about Firefox SW incompatibility in development mode +- Maintain api version using poetry +- Maloja: Submit album artists and duration and allow to disable server side metadata fixing +- Replace pytz with zoneinfo in the API +- Speed up linting and type-checking by using cache +- Split front large bundles into smaller chunks +- Support boolean config fields in plugins + +Bugfixes: + +- `postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command. +- Avoid troi radio to give duplicates (#2231) +- Do not cache all requests to avoid missing updates #2258 +- Fix broken nginx templates for docker setup (#2252) +- Fix help messages for running scripts using funkwhale-manage +- Fix missing og meta tags (#2208) +- Fix multiarch docker builds #2211 +- Fix regression that prevent static files from being served in non-docker-deployments (#2256) +- Fixed an issue where the copy button didn't copy the Embed code in the embed modal. +- Fixed an issue with the nginx templates that caused issues when connecting to websockets. +- Fixed development docker setup (2102) +- Fixed development docker setup (2196) +- Fixed embedded player crash when API returns relative listen URL. (#2163) +- Fixed issue with regular expression in embed. +- Make Artist ordering by name case insensitive +- Make sure build requirements for ujson are met +- Make sure embed codes generated before 1.3.0 are still working +- Make sure funkwhale_api package and metadata are available for docs +- Make sure meta tags link to embedded player correctly +- Merge nginx configs for docker production and development setups (#1939) +- Updated links to the Funkwhale website in the UI. (#2235) +- Use correct data field for rate limiting identity field (#2248) + +Documentation: + +- Add missing `has_mbid` requirement to quality filter spec. +- Add spec for user following. +- Added CoC link to nodeinfo endpoint spec. +- Added multi-artist support spec. +- Added new collections spec. +- Added NodeInfo 2.1 specification +- Archived the pre-1.0 changelog +- Updated nodeinfo spec to include usage statistics. +- Updated the Nodeinfo 2 spec to address feedback from implementation. + +Other: + +- Add build metadata script +- Don't run CI on branch containing stable or develop +- Fix CI deploy docs job after stable branch merge +- Format api container file +- Lint api code using pylint +- Make renovate not pinning the python version to the latest one +- Rename CHANGELOG to CHANGELOG.md +- Replace docs scripts with make +- Rework the CI pipeline +- Use buildx bake in docker job + +Removal: + +- Drop support for python3.7 +- This release doesn't support Debian 10 anymore. If you are still on Debian 10, we recommend + updating to a later version. Alternatively, install a supported Python version (>= Python 3.8). Python 3.11 is recommended. + +Contributors to our Issues: + +- AMoonRabbit +- Alexandra Parker +- ChengChung +- Ciarán Ainsworth +- Georg Krause +- Ghost User +- Johann Queuniet +- JuniorJPDJ +- Kasper Seweryn +- Kay Borowski +- Marcos Peña +- Mathieu Jourdan +- Nicolas Derive +- Virgile Robles +- jooola +- petitminion +- theit8514 + +Contributors to our Merge Requests: + +- AMoonRabbit +- Alexander Dunkel +- Alexander Torre +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Kay Borowski +- Marcos Peña +- Mathieu Jourdan +- Philipp Wolfer +- Virgile Robles +- interfect +- jooola +- petitminion + +Committers: + +- Aitor +- Alexander Dunkel +- alextprog +- Aznörth Niryn +- Ciarán Ainsworth +- dignny +- drakonicguy +- Fun.k.whale Trad +- Georg krause +- Georg Krause +- Jérémie Lorente +- jo +- jooola +- josé m +- Julian-Samuel Gebühr +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- Mathieu Jourdan +- Matteo Piovanelli +- Matyáš Caras +- MhP +- omarmaciasmolina +- petitminion +- Philipp Wolfer +- ppom +- Quentin PAGÈS +- rinenweb +- Thomas +- Transcriber allium + +## 1.3.4 (2023-11-16) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Remove dangling dependency howler + +Documentation: + +- Fix a redirect loop on documentation for moderators + +Contributors to our Merge Requests: + +- Georg Krause +- Thomas + +Committers: + +- Georg Krause + +## 1.3.3 (2023-09-07) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Revert changed logging to fix crashes + +Contributors to our Issues: + +- Alexandra Parker +- Aurelien Vaillant +- ChengChung +- Ciarán Ainsworth +- Georg Krause +- Johann Queuniet +- Kasper Seweryn +- Mathieu Jourdan +- Nicolas Derive +- Puniko Nyan +- Thomas +- petitminion +- philip ballinger + +Contributors to our Merge Requests: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- jooola +- petitminion + +## 1.3.2 (2023-09-01) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Enable sourcemaps for production builds +- Use logger composable instead of window.console + +Bugfixes: + +- Clear shuffled id list on queue clear (#2192) +- Fetch the nodeinfo endpoint from .well-known/nodeinfo when checking instance availability +- Fix instance checking its own availability (#2199) +- Fix multiarch docker builds #2211 +- Fix ordering when querystring contains `+` prefix + Resolve multiple updates to ordering fields +- Fix password reset via email +- Make podcast episode pagination reactive (#2205) +- Render HTML in podcast short description (#2206) +- Resolve race condition regarding axios when initializing the frontend + Prevent sending same language setting to backend multiple times + +Documentation: + +- Fixed incorrect upgrade instructions link in docs. + +Contributors to our Issues: + +- Ciarán Ainsworth +- Georg Krause +- Kasper Seweryn +- Kay Borowski +- Marcos Peña +- Mathieu Jourdan +- Virgile Robles +- codl +- jooola +- petitminion +- tinglycraniumplacidly +- unkn0wwn52 + +Contributors to our Merge Requests: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- Virgile Robles +- codl +- jooola +- petitminion + +Committers: + +- Ciarán Ainsworth +- codl +- Georg Krause +- jo +- Kasper Seweryn +- petitminion + +## 1.3.1 (2023-06-27) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Dynamically add report targets to the map to avoid missing keys (#2121) +- Fix location of the nginx config template for docker deployments (#2146) +- Fix pagination on search page (#2134) +- Fix Prune skipped uploads is OOM killed (#2136) +- Fixed Fomantic UI dropdown messing with Vue internals in radio builder (#2142) +- Fixed premature login redirect on podcast detail page (#2155) +- Fixed stale data in indexedDB after logout (#2133) +- Make sure dependency pins are working with pip install (Restores python3.7 support) +- Make sure embed codes generated before 1.3.0 are still working +- Make sure the SPA Manifest is fetched using the right protocol (#2151) +- Moved modals above all content (#2154) +- Raise SystemExit exception in API manage.py script +- Remove track from cache when it gets disposed outside of the cache handler (#2157) +- Standardize instanceUrl value in instance store (#2113) +- Fix for banner images not being served on pods. +- Fixed PWA Window theme color. + +Documentation: + +- Fix instructions for using custom nginx configurations in our documentation + +Other: + +- Don't run CI on branch containing stable or develop + +Contributors to our Issues: + +- AMoonRabbit +- Asier Iturralde Sarasola +- Bertille D. +- Casuallynoted +- Ciarán Ainsworth +- Daniel Jeller +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Mathieu Jourdan +- NaiveTub +- Ricardo +- Virgile Robles +- nouts +- petitminion + +Contributors to our Merge Requests: + +- AMoonRabbit +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- jooola +- petitminion + +Committers: + +- AMoonRabbit +- Georg Krause +- jo +- JuniorJPDJ +- Kasper Seweryn +- Moon Rabbit +- Petitminion + +## 1.3.0 (2023-06-01) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Update instructions: + +- If you are running the docker deployment, make sure to update our compose file. + In this small example we show you how to save the old config and update it + correctly: + + ``` + export FUNKWHALE_VERSION="1.3.0" + cd /srv/funkwhale + docker-compose down + mv docker-compose.yml docker-compose.bak + curl -L -o /srv/funkwhale/docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml" + ``` + + :::{note} + If you need to customize your nginx template, e.g. to work around [problems with Docker's resolver](https://docs.funkwhale.audio/admin/external-storages.html#no-resolver-found), you can mount your + custom nginx configuration into the container. Uncomment the commented volumes in the `nginx` section of your `docker-compose.yml`. + Additionally you need to update the paths in `nginx/funkwhale.template`. + Replace all occurrences of `/funkwhale` by `/usr/share/nginx/html`. + This loads the templates from your `nginx` folder and overrides the template files in the Docker container. + ::: + + ``` + docker-compose up -d + ``` + +- The Docker instructions now use the updated Docker compose plugin. If you previously used the `docker-compose` standalone installation, do the following while upgrading: + + 1. Download the [Docker compose plugin](https://docs.docker.com/compose/install/linux/#install-using-the-repository) + 2. Stop your containers using the **docker-compose** syntax. + + ```sh + sudo docker-compose down + ``` + + 3. Bring the containers back up using the **docker compose** syntax. + + ```sh + sudo docker compose up -d + ``` + + After this you can continue to use the **docker compose** syntax for all Docker management tasks. + +- Upgrade Postgres to version 15. [Make sure to migrate!](https://docs.funkwhale.audio/administrator/upgrade/docker.html#upgrade-the-postgres-container) +- With this update Funkwhale starts using poetry to maintain its dependencies. We therefore recommend + removing the old virtualenv by running `rm -rf /srv/funkwhale/virtualenv`. + +Features: + +- Add a management command to create a new library for a user +- Add Gitpod configuration and guide +- Add Sentry SDK to collect #1479 +- Prepare API for the upcoming version 2 +- Rewrite player to be based on Web Audio API + +Enhancements: + +- Add a celery task to scan remote library (#1712) +- Add coverage report for Frontend Tests +- Add hint which serializer is used for OembedView (#1901) +- Add music visualizer (#1135) +- Add playable tracks to gitpod instance +- Add playlists radio to search page (#1968) +- Add proper serialization for TextPreviewView (#1903) +- Add python debug and test support for gitpod +- Add Serializer for SpaManifest endpoint +- Add support for python 3.11 +- Added proper serializers for the rate-limit endpoint. +- Added type hints to the API. +- Adding support for play all radio in search result page (#1563) +- All administrator documentation has been rewritten to improve clarity and update outdated information. +- Allow arbitrary length names for artists, albums and tracks +- Allow installing the funkwhale_api package +- Allow using default browser dark mode and update UI dynamically on change +- Apply migrations on API container start (!1879) +- Automatically fetch next page of tracks (#1526) +- Build frontend natively for cross-arch docker images +- Change unmaintained PyMemoize library to django-cache-memoize + to enable Python 3.10 support +- Cleaned up frontend docker container +- Cleanup Gitlab CI and Dockerfiles (!1796) +- Create the funkwhale-manage entrypoint in the api package +- Created migration guide for the deprecated all-in-one docker container. +- Don't buffer python stdout/err in docker +- Don't compile python byte code in docker +- Don't use poetry in production deployments +- Drop direct dependency on pyopenssl (#1975) +- Exclude /api/v1/oauth/authorize from the specs since its not supported yet (#1899) +- Fix openapi specs for user endpoints (#1892, #1894) +- Fix Serializer for inline channel artists (#1833) +- Fix specs for ListenViewSet (#1898) +- Handle PWA correctly and provide better cache strategy for album covers (#1721) +- Improve docker caching +- Improve specification of LibraryFollowViewSet (#1896) +- Install API python package in docker image +- Make CI always run all tests on protected branches. +- Make mutations endpoint appear in openapi specs +- Make Python 3.10 tests in CI mandatory +- Make sure ChannelViewSet always has a serializer (#1895) +- Migrate to new queue system from old localStorage keys +- Migrate to Vue 3 +- Migrate to vue-i18n (#1831) + Fix locale changing (#1862) +- Migrated to sphinx-design. +- New task checking if remote instance is reachable to avoid playback latence (#1711) +- OAuth Application client secrets are now hashed before storing them to the DB. Those are only displayed once from now on! +- Parameterize the default S3 ACL when uploading objects. (#1319) +- Pin Alpine package versions in API Dockerfile (fixes part of CI build issues). +- Prefer using the funkwhale-manage entrypoint +- Prevent running two pipelines for MRs +- Random and less listened radio filter out un-owned content on library section (#2007) +- Refactor node info endpoint to use proper serializers +- Refactor SettingsView to use a proper serializer +- Remove unnecessary or wrong `is` keyword usage from backend +- Rename OpenAPI schema's operation ids for nicer API client method names. +- Replace django-channels package with web socket implementation from @vueuse/core (#1715) +- Retry fetching new radio track 5 times if error occurred before resetting radio session (#2022) +- Rewrite embedded player to petite-vue +- Split DATABASE_URL into multiple configuration variables +- The ListenBrainz plugin submits the track duration +- Update Django OAuth Toolkit to version 2, ref #1944 +- Update migration after django update (#1815) +- Update upload status when import fails (#1999) +- Updated the installation guides to make installation steps clearer. +- Upgrade docker base image to alpine 3.17 +- Use proper serializer for Search endpoint (#1902) + +Refactoring: + +- Instead of requesting the right spa content from the API using a middleware we now serve the + Frontend directly with nginx and only proxy-forward for API endpoints +- Replace django-rest-auth with dj-rest-auth (#1877) + +Bugfixes: + +- Allow enabling systemd funkwhale.target +- Allow playback of media from external frontend (#1937). +- Allow summary field of actors to be blank. This leaves actors valid that have a blank (`""`) summary field and allows follows from those. +- Catch ValueError on radio end (#1596) +- Channel overview was displaying foreign tracks (#1773) (1773) +- Docker setup: do not export the API port 5000 publicly +- Fix adding same track multiple times (#1933) +- Fix artist name submission in Maloja plugin +- Fix changing visualizer CORS error (#1934). +- Fix content form autofocus despite `autofocus` prop being set to `false` (#1924) +- Fix CSP header issues +- Fix CSP issue caused by django-channels package (#1752) +- Fix docker API image building with removing autobahn workaround version pin +- Fix docker builds on armv7 +- Fix docker nginx entrypoint +- Fix editing playlist tracks (#1362) +- Fix embedded player not working on social posts (1946) +- Fix favorite button in queue +- Fix fetching pages of albums in album detail view (#1927) +- Fix front album tracks count translation +- Fix global keyboard shortcuts firing when input is focused (#1876) +- Fix lots of problems in debian installation guide +- Fix media directory nginx routing error in front docker container introduced in !1897 +- Fix OAuth login (#1890) +- Fix play button in albums with multi-page volumes (#1928) +- Fix player closing when queue ends (#1931) +- Fix postgres connection details in docker setup +- Fix purging of dangling files #1929 +- Fix remote search (#1857) +- Fix search by text in affected views (#1858) +- Fix timeout on spa manifest requests +- Fix track table showing all tracks and double pagination in some cases (#1923) +- Fix user requests and reports filtering (#1924) +- Fix validity issues in openapi/swagger spec files (#1171) +- Fixed an issue which caused links in Markdown forms to not render correctly. (#2023) +- Fixed login redirect (1736) +- Fixed mobile player element widths (#2054) +- Fixed remote subscription form in Podcast and search views (#1708) +- Fixed upload form VUE errors (#1738) (1738) +- Fixes an issue which made it possible to download all media files without access control (#2101) +- Fixes channel page (#1729) (1729) +- Fixes development environment set-up with docker (1726) +- Fixes embed player (#1783) (1783) +- Fixes service worker (#1634) +- Fixes track listenings not being sent when tab is not focused +- Hide create custom radio to un-authenticated users (#1720) +- Improve signal handling for service and containers +- Move api docker hardcoded env vars in the settings module +- Prefer str over dict for the CACHE_URL api setting + + This fix the ability to reuse the CACHE_URL with other settings such as + CELERY_BROKER_URL. + +- Remove trailing slash from reverse proxy configuration +- Remove unused Footer component (#1660) +- Remove usage of deprecated Model and Serializer fields (#1663) +- Resolved an issue where queue text with mouse over has dark text on dark background (#2058) (2058) +- Skip refreshing local actors in celery federation.refresh_actor_data task - fixes disappearing avatars (!1873) + +Documentation: + +- Add ability to translate documentation into multiple languages +- Add generic upgrade instructions to Docker postgres documentation (#2049) +- Add restore instructions to backup docs (#1627). +- Add systemd update instructions to Debian upgrade instructions (#1966) +- Added Nginx regeneration instructions to Debian update guide (#2050) +- Added virtualenv upgrade instructions for Debian (#1562). +- Cleaned up documentation +- Document the new login flow of the CLI-tool (#1800) +- Documented LOGLEVEL command (#1541). +- Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624). +- Fix broken links in CHANGELOG (#1976) +- Harden security for debian install docs +- Remove unnecessary postgres variable in Docker migration guide (#2124). +- Rewrote documentation contributor guide. +- Rewrote the architecture file (#1908) +- Rewrote the federation developer documentation (#1911) +- Rewrote the plugins documentation (#1910) +- Rewrote translators file +- Updated API developer documentation (#1912, #1909) +- Updated CONTRIBUTING guide with up-to-date documentation. Created layout in documentation hub. + +Other: + +- Add a CI job to check if changelog snippet is available +- Add CI broken links checker +- Add pre-commit hooks + - flake8 + - black + - isort + - pyupgrade + - prettier + - codespell +- Add pre-commit to development tools +- Align the openapi spec to the actual API wherever possible +- Cache lychee checked urls for 1 day in CI +- Fix api tests warnings by renaming fixtures +- Fix permissions for build artifacts +- Fix shell scripts lint errors +- Format api pyproject.toml +- Format or fix files using pre-commit + + - Upgrade code to >=python3.7 + - Fix flake8 warnings + - Fix spelling errors + - Format files using black + - Format files using isort + - Format files using prettier + +- Move api tools config to pyproject.toml +- Move database url composition from custom script to django settings +- Remove docker_all_in_one_release ci job +- Rename api composer/django/ dir to docker/ +- Unpin asgiref in API dependencies +- Use vite for building the frontend, #1644 + +Deprecation: + +- Deprecate the api manage.py script in favor of the funkwhale-manage entrypoint +- That's the last minor version series that supports python3.7. Funkwhale 1.4 will remove support for + it. #1693 +- The automatically generated `DATABASE_URL` configuration in the docker setup is deprecated, please + configure either the `DATABASE_URL` environment variable or the `DATABASE_HOST`, `DATABASE_USER` and + `DATABASE_PASSWORD` environment variables instead. + +Removal: + +- This release removes support for Python 3.6. Please make sure you update your python version before + Updating Funkwhale! + +Committers: + +- Agate +- Aina Hernàndez Campaña +- AMoonRabbit +- Anton +- bruce diao +- Bruno Talanski +- ButterflyOfFire +- Çağla Pickaxe +- Ciarán Ainsworth +- Dignified Silence +- dignny +- Éilias McTalún +- EorlBruder +- Fedi Funkers +- Georg Krause +- ghose +- Henri Dickson +- Jacek Pruciak +- Jasper Bogers +- Jhoan Sebastian Espinosa Borrero +- jo +- jooola +- Julian Rademacher +- JuniorJPDJ +- Kasper Seweryn +- Keunes +- Kisel1337 +- Laurin W +- Marcos Peña +- Matyáš Caras +- Michael Long +- nztvar +- oki +- Petitminion +- Philipp Wolfer +- poeppe +- Porrumentzio +- ppom +- Reinhard Prechtl +- Sky +- Sporiff +- Stuart Begley-Miller +- @ta +- Thomas +- Till Robin Zickel +- tobifroe +- wvffle + +Contributors to our Issues: + +- AMoonRabbit +- Agate +- Artem Anufrij +- ChengChung +- Ciarán Ainsworth +- Creak +- Eric Mesa +- Georg Krause +- Hans Bauer +- HurricaneDancer +- Jakob Schürz +- Jucgshu +- Julian-Samuel Gebühr +- JuniorJPDJ +- Kasper Seweryn +- Keunes +- Laser Lesbian +- Laurin W +- Marco +- Marcos Peña +- Martin Giger +- Mathieu Jourdan +- MattDHarding +- Meliurwen +- Micha Gläß-Stöcker +- MichaelBechHansen +- Nathan Mih +- Nicolas Derive +- Nolan Darilek +- Philipp Wolfer +- Porrumentzio +- Rodion Borisov +- Sam Birch +- Sky Leite +- TheSunCat +- Thomas +- Tobias Frölich +- Tony Wasserka +- Vincent Riquer +- Virgile Robles +- dddddd-mmmmmm +- gerry_the_hat +- getzze +- heyarne +- jake +- jooola +- jovuit +- nouts +- petitminion +- ppom +- pullopen +- resister +- silksow +- troll + +Contributors to our Merge Requests: + +- AMoonRabbit +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Laurin W +- Marcos Peña +- Mathieu Jourdan +- Nicolas Derive +- Philipp Wolfer +- Rodion Borisov +- Thomas +- Tobias Frölich +- getzze +- jooola +- mqus +- petitminion +- poeppe + +## 1.2.10 (2023-03-17) + +Bugfixes: + +- Fixes a security vulnerability that allows to download all media files without access control #2101 + +Contributors to our Issues: + +- Georg Krause +- JuniorJPDJ + +Special thanks to Conradowatz for reporting the vulnerability + +Committers: + +- JuniorJPDJ + +## 1.2.9 (2022-11-25) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Ensure index.html files get loaded with UTF-8 encoding +- Fixed invitation reuse after the invited user has been deleted (#1952) +- Fixed unplayable skipped upload (#1349) + +Committers: + +- Georg Krause +- Marcos Peña +- Philipp Wolfer +- Travis Briggs + +Contributors to our Issues: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- Mathieu Jourdan +- Micha Gläß-Stöcker +- fuomag9 +- gammelalf +- myOmikron +- petitminion + +Contributors to our Merge Requests: + +- Georg Krause +- JuniorJPDJ +- Marcos Peña +- Philipp Wolfer +- fuomag9 + +## 1.2.8 (2022-09-12) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Features: + +- Add Sentry SDK to collect errors at the backend + +Bugfixes: + +- Fix exponentially growing database when using in-place-imports on a regular base #1676 +- Fix navigating to registration request not showing anything (#1836) +- Fix player cover image overlapping queue list +- Fixed metadata handling for Various Artists albums (#1201) +- Fixed search behaviour in radio builder's filters (#733) +- Fixed unpredictable subsonic search3 results (#1782) + +Committers: + +- Ciarán Ainsworth +- Georg Krause +- Marcos Peña +- Mathias Koehler +- wvffle + +Contributors to our Issues: + +- AMoonRabbit +- Agate +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Kelvin Hammond +- Marcos Peña +- Meliurwen +- Micha Gläß-Stöcker +- Miv2nir +- Sam Birch +- Tolriq +- Tony Wasserka +- f1reflyyyylmao +- heyarne +- petitminion +- troll + +Contributors to our Merge Requests: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- interru + +## 1.2.7 (2022-07-14) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Fixed libre.fm plugin not submitting scrobbles (#1817) + +Committers: + +- Georg Krause +- Marcos Peña + +Contributors to our Issues: + +- Ciarán Ainsworth +- Marcos Peña + +Contributors to our Merge Requests: + +- Georg Krause +- Marcos Peña + +## 1.2.6 (2022-07-04) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Channel overview was displaying foreign tracks (#1773) +- Fixed login form focusing reset password link instead of next input (#1373) +- Fixed missing album contextual menu (#1791) +- Fixed single listening submission when repeating a song (#1312) +- Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263) +- Resolve timeouts if nodeinfo and service actor is not known (#1714) + +Other: + +- Replaced references to #funkwhale-troubleshooting with #funkwhale-support + +Committers: + +- Georg Krause +- Marcos Peña +- Petitminion +- wvffle + +Contributors to our Issues: + +- jeweet +- wvffle +- Georg Krause +- Marcos Peña +- AMoonRabbit +- Micha Gläß-Stöcker +- Ciarán Ainsworth +- heyarne +- Agate +- JuniorJPDJ +- MichaelBechHansen +- ooZberg +- Esras . +- PhieF +- Petitminion + +Contributors to our Merge Requests: + +- wvffle +- Georg Krause +- Marcos Peña +- Petitminion + +## 1.2.5 (2022-05-07) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Parameterize the default S3 ACL when uploading objects. (#1319) + +Bugfixes: + +- Fix stopped player to not show 00:00 when loading a track (#1432) +- Fixes channel page (#1729) (1729) + +Committers: + +- Georg Krause +- Marcos +- MattDHarding +- Stuart Begley-Miller + +Contributors to our Issues: + +- Agate +- Beto Dealmeida +- Cam Sweeney +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Marcos Peña +- Mathieu Jourdan +- MattDHarding +- Micha Gläß-Stöcker +- Stuart Begley-Miller +- Tony Wasserka +- jovuit +- petitminion +- pullopen + +Contributors to our Merge Requests: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Marcos Peña +- MattDHarding +- PhieF +- Stuart Begley-Miller +- petitminion + +## 1.2.4 (2022-04-23) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Hand cursor now displayed over artist and album cards + +Bugfixes: + +- Fixes docs' SMTP URI configuration (#1749) (1749) + +Documentation: + +- The documentation is now available in two versions: Develop and Stable + +Contributors to our Issues: + +- Beto Dealmeida +- Cam Sweeney +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Marcos Peña +- Mathieu Jourdan +- Micha Gläß-Stöcker +- petitminion + +Contributors to our Merge Requests: + +- Georg Krause +- JuniorJPDJ +- Marcos Peña +- petitminion + +Committers: + +- Georg Krause +- Marcos Peña +- MattDHarding + +## 1.2.3 (2022-03-18) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Added support for all cover sources in the embedded player (#1697). +- Change unmaintained PyMemoize library to django-cache-memoize + to enable Python 3.10 support + +Bugfixes: + +- Catch ValueError on radio end (#1596) +- Fix bug that prevents users from creating a new oauth application (#1706) +- Fix failed track adding to playlist being silent (#1020) +- Fix recently added radio not working has expected (#1674) +- Fixed an issue where you couldn't load the details page for tracks with no associated album (#1703) +- Fixed library visibility dropdown (#1384) +- In playlist editor can now click outside the trashcan but inside the button to delete entry (#1348) + +Contributors to our Issues: + +- Agate +- Baudouin Feildel +- Christoph Pomaska +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- Mathieu Jourdan +- MattDHarding +- Micha Gläß-Stöcker +- dnikolov +- jovuit +- petitminion + +Contributors to our Merge Requests: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- MattDHarding +- petitminion + +Committers + +- Ciaran Ainsworth +- Georg Krause +- JuniorJPDJ +- MattDHarding +- Petitminion +- Reinhard Prechtl + +## 1.2.2 (2022-02-04) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Fix an issue where the tracks tab in a library doesn't show any tracks (#1683) +- Fix an issue with the embedded player not showing any content (#1675) +- Fix broken instance description if it contains a line break #1673 + +Dependency Updates: + +- Update dependency vue-template-compiler to 2.6.14 +- Update dependency vue to ^2.6.14 +- Update dependency vuex-persistedstate to ^2.7.1 +- Update dependency vuedraggable to ^2.24.3 +- Update dependency vue-lazyload to ^1.3.3 +- Update dependency vue-plyr to ^5.1.3 +- Update dependency vue-upload-component to ^2.8.22 +- Update dependency vue-gettext to ^2.1.12 +- Update dependency showdown to ^1.9.1 +- Update dependency js-logger to ^1.6.1 +- Update dependency register-service-worker to ^1.7.2 +- Update dependency howler to ^2.2.3 +- Update dependency fomantic-ui-css to ^2.8.8 +- Update dependency diff to ^4.0.2 +- Update dependency axios-auth-refresh to ^2.2.8 + +Contributors to our Issues: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Marcos Peña +- Mathieu Jourdan +- Micha Gläß-Stöcker +- Ricardo +- petitminion + +Contributors to our Merge Requests: + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Marcos Peña + +Committers + +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Keunes +- Marcos Peña + +## 1.2.1 (2022-01-06) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Fix Pipeline for stable release builds (#1652) +- Fix remote content page (#1655) + +Contributors to our Issues: + +- Ciarán Ainsworth +- Georg Krause +- Jakob Schürz +- Mathieu Jourdan +- Micha Gläß-Stöcker +- petitminion + +Contributors to our Merge Requests: + +- Georg Krause + +Committers: + +- Dignified Silence +- Georg Krause +- JuniorJPDJ +- nztvar + +## 1.2.0 (2021-12-27) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Due to a bug in our CI Pipeline, you need to download the frontend artifact here: https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download + +If you are running the All-in-One-Container since a longer time, you probably need to manually migrate your database information. If that's the case, you will get a message like this: + +`DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 13.5.` + +Make sure the Funkwhale version is set to `1.1.4` in `docker-compose.yml`. Now you can run this command to dump the database into a file: + +`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > "db.dump"` + +Now you can update the Funkwhale version in `docker-compose.yml` to `1.2.0`. Additionally you should save your `data` directory, eg by running `mv data data.bak && mkdir data`. Stop Funkwhale and start it again with the new version, by using `docker-compose down && docker-compose up -d`. This will initialize a fresh DB and applies all migrations. Now you can restore your database with the following command: `cat db.dump | docker-compose exec -T funkwhale psql -U funkwhale`. That's it, enjoy! + +Features: + +- Implemented awesome recently added radio (part of #1390) +- Rework the instance about page (#1376) +- Made changes to the track table to make it more visibly pleasing + +Enhancements: + +- Add linting for Frontend code (#1602) +- Add xmlns:content to feed schemas fixes #1535 +- Add a Maloja plugin to submit listenings +- Add artist cover art in subsonic API response (#1528) +- Allow listen activities privacy level to be set public +- Allow running multi-container setup on non-root user inside docker (!1375) (fixes #1334) +- Change volume dynamic range from 60dB to 40dB (fixes #1544) +- Change Start Radio to Play Radio (#1400) +- Display toast when subsonic password is copied (#1496) +- Expose more metadata in Subsonic's getAlbumList endpoint (#623) +- ListenBrainz: Submit media player and submission client information +- Make "play in list" the default when interacting with individual tracks (#1274) +- Prevent an uncontrolled exception when uploading a file without tags, and prints user friendly message (1275) +- Remove deprecated JWT Authentication (#1108) (1108) +- Remove Raven SDK to report errors to Sentry (#1425) (1425) +- Replace psycopg2-binary with psycopg2 (#1513) + +Bugfixes: + +- Add worker-src to nginx header to prevent issues (#1489) +- Enable stepless adjustment of the volume slider (!1294) +- Fix an error in a Subsonic methods that return lists of numbers/strings like getUser +- Fix showing too long radio descriptions (#1556) +- Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN value for other pages (fix #1022) +- Fix before last track starts playing when last track removed (#1485) +- Fix delete account button is not disabled when missing password (#1591) +- Fix omputed properties already defined in components data (#1649) +- Fix the all in one docker image building process, related to #1503 +- Fix crash in album moderation interface when missing cover (#1474) +- Fix subsonic scrobble not triggering plugin hook (#1416) +- Improve formatting of RSS episode descriptions (#1405) +- Only suggest typed tag once if it already exists +- Partially fixed playing two tracks at same time (#1213) +- Revert changes that break mobile browser playback (#1509) +- Sanitize remote tracks' saving locations with slashes on their names (#1435) +- Show embed option for channel tracks (#1278) +- Store volume in logarithmic scale and convert when setting it to audio (fixes #1543) +- Use global Howler volume instead of setting it separately for each track (fixes #1542) + +Documentation: + +- Add email configuration to the documentation (#1481) +- Add server uninstallation documentation (\!1314) +- Document location of cli env file on macOS (\!1354) +- Fix broken backup documentation (#1345) +- Refactore installation documentation and other small documentation adjustments (\!1314) +- Add User documentation for built-in plugins + +Other: + +- Create stable branch, master is now deprecated and will be removed in 1.3 (#1476) + +Committers: + +- Alexandra Parker +- Alyssa Ross +- appzer0 +- Arthur Brugière +- Asier Iturralde Sarasola +- bittin +- Blopware +- Brian McMillen +- Christoph Pomaska +- Ciaran Ainsworth +- Ciarán Ainsworth +- Classified +- Connor Hay +- Damian Szetela +- David Marzal +- Deleted User +- Dignified Silence +- Dominik Danelski +- egon0 +- Erik Präntare +- Georg Abenthung +- Georgios B +- Georgios Brellas +- Georg Krause +- ghose +- greengekota +- heyarne +- ian Vatega +- Janek +- jovuit +- JuniorJPDJ +- Konstantinos G +- manuelviens +- Manuel Viens +- Marcos +- Marcos Peña +- Martin Giger +- Matthew J +- Micha Gläß-Stöcker +- petitminion +- Petitminion +- Philipp Wolfer +- Porrumentzio +- Quentin PAGÈS +- Raphael Lullis +- Riccardo Sacchetto +- Romain Failliot +- Rubén Cabrera +- Ryan Harg +- Sergio Varela +- SpcCw +- Stefano Pigozzi +- Thomas +- Tony Simoes +- Tony Wasserka +- vachan-maker +- Virgile Robles + +Contributors to our Issues: + +- AMoonRabbit +- Agate +- Antoine POPINEAU +- Arthur Brugière +- Ciarán Ainsworth +- Connor Hay +- Creak +- David Marzal +- Georg Krause +- Gerhard Beck +- Greg Poole +- JuniorJPDJ +- Kuba Orlik +- Lunar Control +- Marcos Peña +- Mateusz Korzeniewski +- Mathieu Jourdan +- Micha Gläß-Stöcker +- Philipp Wolfer +- Porrumentzio +- Thomas +- Tony Wasserka +- Ville Ranki +- arkhi +- heyarne +- interfect +- jovuit +- mal +- petitminion +- vachan-maker + +Contributors to our Merge Requests: + +- Agate +- Arthur Brugière +- Ciarán Ainsworth +- Connor Hay +- David Marzal +- Distopico +- Fanyx +- Georg Abenthung +- Georg Krause +- Janek +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- Mathieu Jourdan +- Matthew J. +- Micha Gläß-Stöcker +- Philipp Wolfer +- Thomas +- Tony Wasserka +- heyarne +- jovuit +- petitminion +- thanksd + +## 1.1.4 (2021-08-02) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +- Pinned version of asgiref to avoid trouble with latest release. For further information, see #1516 + +## 1.1.3 (2021-08-02) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Test better tagging of Docker Images (#1505) + +Bugfixes: + +- Fix the scrobbler plugin submitting literal "None" as MusicBrainz ID (#1498) +- Add worker-src to nginx header to prevent issues (#1489) +- Only suggest typed tag once if it already exists +- Implement access control on the moderation views (#1494) +- Prevent open redirect on login (#1492) + +## 1.1.2 (2021-05-19) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Added modal to prompt users to log in when subscribing to channels (#1296) + +Bugfixes: + +- Added missing is_playable serializer for the tracks endpoint. +- Fixed minor graphical bug where loaders would appear white in dark theme (#1442) +- Fixed systemd unit for funkwhale-worker (#1160) +- Several minor fixes for the Frontend + +## 1.1.1 (2021-04-13) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Improve UI consistency in artist tracks (#1286) +- Adds year to album's card and album's base UI + +Bugfixes: + +- Fix playback issues when pausing close the the end of a track (#1324) +- Fix tracks playing in the background without the ability to control them (#1213) (#1387) +- Fixed track playback indicator to reset on queue end (#1380) +- Frontend build tooling is less dependent on `npm` or `yarn` being used (!1285) +- Fixed a small discrepancy to the subsonic api 1374 + +## 1.1 (2021-03-10) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Add number of tracks and discs of an album to API (#1238) +- Add spacing after "Play all" button in playlist view (!1271) +- Added a ListenBrainz plugin to submit listenings +- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294) +- Added new search functions to allow users to more easily search for podcasts in the UI. +- Added padding to volume slider to ease mouse control (#1241) +- Logarithmic scale for volume slider (#1222) +- More user-friendly subsonic tokens (#1269) +- Remove manual entry of Import Reference on front-end import (#1284) +- Support AIFF file format (#1243) + +Bugfixes: + +- "Add check for empty/null covers (#1281)" +- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282) +- Avoid broken Faker version (#1323) +- Changed audio format detection to happen via sniffing and not file extensions (#1274) +- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289) +- Fix delete library modal closing immediately (#1272) +- Fix public shared remote library radio button being disabled (#1292) +- Fixed an issue that prevented disabling plugins +- Fixed an issue where channel albums don't show up in the album search (#1300) +- Fixed an issue where modals would prevent users being able to interact with channels (#1295) +- Update MediaSession metadata for initially loaded track (#1252) +- Update playback position slider also when track is paused (#1266) +- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342 +- Update pleroma JSON-LD Schema (#1341) +- Pin twisted version to 20.3.0 + +Contributors to this release (development, documentation, reviews): + +- Adam Novak +- Agate +- alemairebe +- Alicia Blasco Leon +- anonymous +- Amaranthe +- appzer0 +- Arne +- Asier Iturralde Sarasola +- Christian Paul +- Ciarán Ainsworth +- Daniel +- David +- Dominik Danelski +- Eorn le goéland +- Eleos +- Erik Duxstad +- Esteban +- Fred Uggla +- Freyja Wildes +- Georg Krause +- ghose +- hellekin +- heyarne +- interfect +- Jess Jing +- Johannes H. +- jovuit +- marzzzello +- Meliurwen +- Mehdi +- Nitai Bezerra da Silva +- Philipp Wolfer +- Pierre Couy +- Porrumentzio +- Reg +- Robert Kaye +- Rubén Cabrera +- Silver Fox +- Snack Capt +- SpcCw +- Strom Lin +- vicdorke +- x + +## 1.1-rc2 (2021-03-01) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342 +- Update pleroma JSON-LD Schema (#1341) +- Revert fork replacement of http-signature since official package breaks federation +- Pin twisted version to 20.3.0 + +## 1.1-rc1 (2021-02-24) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Add number of tracks and discs of an album to API (#1238) +- Add spacing after "Play all" button in playlist view (!1271) +- Added a ListenBrainz plugin to submit listenings +- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294) +- Added new search functions to allow users to more easily search for podcasts in the UI. +- Added padding to volume slider to ease mouse control (#1241) +- Logarithmic scale for volume slider (#1222) +- More user-friendly subsonic tokens (#1269) +- Remove manual entry of Import Reference on front-end import (#1284) +- Replaced forked http-signature dependency with official package (#876) +- Support AIFF file format (#1243) + +Bugfixes: + +- "Add check for empty/null covers (#1281)" +- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282) +- Avoid broken Faker version (#1323) +- Changed audio format detection to happen via sniffing and not file extensions (#1274) +- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289) +- Fix delete library modal closing immediately (#1272) +- Fix public shared remote library radio button being disabled (#1292) +- Fixed an issue that prevented disabling plugins +- Fixed an issue where channel albums don't show up in the album search (#1300) +- Fixed an issue where modals would prevent users being able to interact with channels (#1295) +- Update MediaSession metadata for initially loaded track (#1252) +- Update playback position slider also when track is paused (#1266) + +Contributors to this release (development, documentation, reviews): + +- Reg +- hellekin +- Esteban +- Freyja Wildes +- Amaranthe +- Eleos +- Johannes H. +- Mehdi +- Adam Novak +- Agate +- Christian Paul +- Ciarán Ainsworth +- Erik Duxstad +- Fred Uggla +- Georg Krause +- heyarne +- interfect +- jovuit +- Nitai Bezerra da Silva +- Philipp Wolfer +- Pierre Couy +- Robert Kaye +- Strom Lin + +## 1.0.1 (2020-10-31) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Added controls to play volume of an album (#1226) +- Allow genre tags to be updated when rescanning files in-place (#1246) + +Bugfixes: + +- Fixed broken install because of upgraded dependencies +- Fixed duplication of discs for multi-disc albums in album views (#1228) +- Make the generated RSS feed more conformant with w3c specification (#1250) + +Contributors to this release (development, documentation, reviews): + +- Agate +- Cédric Schieli +- Ciarán Ainsworth +- Kuba Orlik + +## 1.0 (2020-09-09) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +### Dropped python 3.5 support [manual action required, non-docker only] + +With Funkwhale 1.0, we're dropping support for Python 3.5. Before upgrading, +ensure `python3 --version` returns `3.6` or higher. + +If it returns `3.6` or higher, you have nothing to do. + +If it returns `3.5`, you will need to upgrade your Python version/Host, then recreate your virtual environment: + +```sh +rm -rf /srv/funkwhale/virtualenv +python3 -m venv /srv/funkwhale/virtualenv +``` + +### Increased quality of JPEG thumbnails [manual action required] + +Default quality for JPEG thumbnails was increased from 70 to 95, as 70 was producing visible artifacts in resized images. + +Because of this change, existing thumbnails will not load, and you will need to: + +1. delete the `__sized__` directory in your `MEDIA_ROOT` directory +2. run `python manage.py fw media generate-thumbnails` to regenerate thumbnails with the enhanced quality + +If you don't want to regenerate thumbnails, you can keep the old ones by adding `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your .env file. + +### Small API breaking change in `/api/v1/libraries` + +To allow easier crawling of public libraries on a pod,we had to make a slight breaking change +to the behaviour of `GET /api/v1/libraries`. + +Before, it returned only libraries owned by the current user. + +Now, it returns all the accessible libraries (including ones from other users and pods). + +If you are consuming the API via a third-party client and need to retrieve your libraries, +use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me` + +### API breaking change in `/api/v1/albums` + +To increase performance, querying `/api/v1/albums` doesn't return album tracks anymore. This caused +some performance issues, especially as some albums and series have dozens or even hundreds of tracks. + +If you want to retrieve tracks for an album, you can query `/api/v1/tracks/?album=`. + +### JWT deprecation + +API Authentication using JWT is deprecated and will be removed in Funkwhale 1.0. Please use OAuth or application tokens +and refer to our API documentation at https://docs.funkwhale.audio/swagger/ for guidance. + +### Full list of changes + +Features: + +- Allow users to hide compilation artists on the artist search page (#1053) +- Can now launch server import from the UI (#1105) +- Dedicated, advanced search page (#370) +- Persist theme and language settings across sessions (#996) + +Enhancements: + +- Add support for unauthenticated users hitting the logout page +- Added support for Licence Art Libre (#1088) +- Broadcast/handle rejected follows (#858) +- Confirm email without requiring the user to validate the form manually (#407) +- Display channel and track downloads count (#1178) +- Do not include tracks in album API representation (#1102) +- Dropped python 3.5 support. Python 3.6 is the minimum required version (#1099) +- Improved keyboard accessibility (#1125) +- Improved naming of pages for accessibility (#1127) +- Improved shuffle behaviour (#1190) +- Increased quality of JPEG thumbnails +- Lock focus in modals to improve accessibility (#1128) +- More consistent search UX on /albums, /artists, /radios and /playlists (#1131) +- Play button now replace current queue instead of appending to it (#1083) +- Set proper lang attribute on HTML document (#1130) +- Use semantic headers for accessibility (#1121) +- Users can now update their email address (#292) +- [plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and secret are provided +- Added a new, large thumbnail size for cover images (#1205 +- Enforce authentication when viewing remote channels, profiles and libraries (#1210) + +Bugfixes: + +- Fix broken media support detection (#1180) +- Fix layout issue with playbar on landscape tablets (#1144) +- Fix random radio so that podcast content is not picked up (#1140) +- Fixed an issue with search pages where results would not appear after navigating to another page +- Fixed crash with negative track position in file tags (#1193) +- Handle access errors scanning directories when importing files +- Make channel card updated times more humanly readable, add internationalization (#1089) +- Ensure search page reloads if another search is submitted in the sidebar (#1197) +- Fixed "scope=subscribed" on albums, artists, uploads and libraries API (#1217) +- Fixed broken federation with pods using allow-listing (#1999) +- Fixed broken search when using (, " or & chars (#1196) +- Fixed domains table hidden controls when no domains are found (#1198) + +Documentation: + +- Simplify Docker mono-container installation and upgrade documentation + +Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects): + +- Agate +- Andy Craze +- anonymous +- appzer0 +- Arne +- Ciarán Ainsworth +- Daniele Lira Mereb +- dulz +- Francesc Galí +- ghose +- Kalle Anka +- mekind +- Meliurwen +- Puri +- Quentin PAGÈS +- Raphaël Ventura +- Slimane Selyan Amiri +- SpcCw +- Stefano Pigozzi +- Sébastien de Melo +- Ventura Pérez García +- vicdorke +- Xosé M diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 000000000..539a1a0be --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +*.md @funkwhale/documentation diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..e1f64e782 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +SHELL := bash +CPU_CORES := $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) + +BAKE_FILES = \ + docker-bake.json \ + docker-bake.api.json \ + docker-bake.front.json + +docker-bake.%.json: + ./scripts/build_metadata.py --format bake --bake-target $* --bake-image docker.io/funkwhale/$* > $@ + +docker-metadata: $(BAKE_FILES) + +docker-build: docker-metadata + docker buildx bake $(foreach FILE,$(BAKE_FILES), --file $(FILE)) --print $(BUILD_ARGS) + docker buildx bake $(foreach FILE,$(BAKE_FILES), --file $(FILE)) $(BUILD_ARGS) + +build-metadata: + ./scripts/build_metadata.py --format env | tee build_metadata.env diff --git a/README.md b/README.md index 361e9a1fc..2400701de 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,4 @@ If you find a security issue or vulnerability, please report it on our [GitLab i ## Code of conduct -The Funkwhale collective adheres to a [code of conduct](https://funkwhale.audio/en_US/code-of-conduct) in all our community spaces. Please familiarize yourself with this code and follow it when participating in discussions in our spaces. +The Funkwhale collective adheres to a [code of conduct](https://funkwhale.audio/code-of-conduct) in all our community spaces. Please familiarize yourself with this code and follow it when participating in discussions in our spaces. diff --git a/api/Dockerfile b/api/Dockerfile index 84f4a1a3e..c6e0ee473 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,14 +1,20 @@ -FROM alpine:3.17 as pre-build +FROM alpine:3.17 as requirements # We need this additional step to avoid having poetrys deps interacting with our # dependencies. This is only required until alpine 3.16 is released, since this # allows us to install poetry as package. -RUN apk add --no-cache python3 py3-cryptography py3-pip poetry -COPY pyproject.toml poetry.lock / -RUN poetry export --without-hashes > requirements.txt -RUN poetry export --with dev --without-hashes > dev-requirements.txt +RUN set -eux; \ + apk add --no-cache \ + poetry \ + py3-cryptography \ + py3-pip \ + python3 +COPY pyproject.toml poetry.lock / +RUN set -eux; \ + poetry export --without-hashes --extras typesense > requirements.txt; \ + poetry export --without-hashes --with dev > dev-requirements.txt; FROM alpine:3.17 as builder @@ -22,6 +28,7 @@ RUN set -eux; \ cargo \ curl \ gcc \ + g++ \ git \ jpeg-dev \ libffi-dev \ @@ -41,15 +48,15 @@ RUN set -eux; \ py3-watchfiles=0.18.1-r0 \ python3-dev -# create virtual env for next stage +# Create virtual env RUN python3 -m venv --system-site-packages /venv -# emulate activation by prefixing PATH -ENV PATH="/venv/bin:/root/.local/bin:$PATH" VIRTUAL_ENV=/venv +ENV PATH="/venv/bin:$PATH" -COPY --from=pre-build /requirements.txt /requirements.txt -COPY --from=pre-build /dev-requirements.txt /dev-requirements.txt +COPY --from=requirements /requirements.txt /requirements.txt +COPY --from=requirements /dev-requirements.txt /dev-requirements.txt -RUN set -eux; \ +RUN --mount=type=cache,target=~/.cache/pip; \ + set -eux; \ pip3 install --upgrade pip; \ pip3 install setuptools wheel; \ # Currently we are unable to relieably build rust-based packages on armv7. This @@ -65,7 +72,8 @@ RUN set -eux; \ watchfiles==0.18.1 ARG install_dev_deps=0 -RUN set -eux; \ +RUN --mount=type=cache,target=~/.cache/pip; \ + set -eux; \ if [ "$install_dev_deps" = "1" ] ; then \ grep -Ev 'cryptography|lxml|pillow|psycopg2|watchfiles' /dev-requirements.txt \ | pip3 install -r /dev/stdin \ @@ -76,7 +84,7 @@ RUN set -eux; \ watchfiles==0.18.1; \ fi -FROM alpine:3.17 as image +FROM alpine:3.17 as production ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 @@ -98,16 +106,17 @@ RUN set -eux; \ py3-pillow=9.3.0-r0 \ py3-psycopg2=2.9.5-r0 \ py3-watchfiles=0.18.1-r0 \ - python3 + python3 \ + tzdata COPY --from=builder /venv /venv -# emulate activation by prefixing PATH ENV PATH="/venv/bin:$PATH" COPY . /app WORKDIR /app -RUN set -eux; \ +RUN --mount=type=cache,target=~/.cache/pip; \ + set -eux; \ pip3 install --no-deps --editable . ENV IS_DOCKER_SETUP=true diff --git a/api/Makefile b/api/Makefile new file mode 100644 index 000000000..a31857fad --- /dev/null +++ b/api/Makefile @@ -0,0 +1,14 @@ +SHELL := bash +CPU_CORES := $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) + +.PHONY: install lint + +install: + poetry install + +lint: + poetry run pylint \ + --jobs=$(CPU_CORES) \ + --output-format=colorized \ + --recursive=true \ + config funkwhale_api tests diff --git a/api/config/__init__.py b/api/config/__init__.py index d3cd60b0d..e69de29bb 100644 --- a/api/config/__init__.py +++ b/api/config/__init__.py @@ -1,3 +0,0 @@ -# loads what is required to generate the swagger docs -# https://matrix.to/#/!nNBDNverFlbfNpReEO:matrix.org/$16579878472182UmZUv:tchncs.de?via=tchncs.de&via=matrix.org&via=juniorjpdj.pl -import config.schema # noqa: F401 diff --git a/api/config/api_urls.py b/api/config/api_urls.py deleted file mode 100644 index 6fa17b3c6..000000000 --- a/api/config/api_urls.py +++ /dev/null @@ -1,97 +0,0 @@ -from django.conf.urls import include, url -from rest_framework import routers -from rest_framework.urlpatterns import format_suffix_patterns - -from funkwhale_api.activity import views as activity_views -from funkwhale_api.audio import views as audio_views -from funkwhale_api.common import routers as common_routers -from funkwhale_api.common import views as common_views -from funkwhale_api.music import views -from funkwhale_api.playlists import views as playlists_views -from funkwhale_api.subsonic.views import SubsonicViewSet -from funkwhale_api.tags import views as tags_views - -router = common_routers.OptionalSlashRouter() -router.register(r"activity", activity_views.ActivityViewSet, "activity") -router.register(r"tags", tags_views.TagViewSet, "tags") -router.register(r"plugins", common_views.PluginViewSet, "plugins") -router.register(r"tracks", views.TrackViewSet, "tracks") -router.register(r"uploads", views.UploadViewSet, "uploads") -router.register(r"libraries", views.LibraryViewSet, "libraries") -router.register(r"listen", views.ListenViewSet, "listen") -router.register(r"stream", views.StreamViewSet, "stream") -router.register(r"artists", views.ArtistViewSet, "artists") -router.register(r"channels", audio_views.ChannelViewSet, "channels") -router.register(r"subscriptions", audio_views.SubscriptionsViewSet, "subscriptions") -router.register(r"albums", views.AlbumViewSet, "albums") -router.register(r"licenses", views.LicenseViewSet, "licenses") -router.register(r"playlists", playlists_views.PlaylistViewSet, "playlists") -router.register(r"mutations", common_views.MutationViewSet, "mutations") -router.register(r"attachments", common_views.AttachmentViewSet, "attachments") -v1_patterns = router.urls - -subsonic_router = routers.SimpleRouter(trailing_slash=False) -subsonic_router.register(r"subsonic/rest", SubsonicViewSet, basename="subsonic") - - -v1_patterns += [ - url(r"^oembed/$", views.OembedView.as_view(), name="oembed"), - url( - r"^instance/", - include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), - ), - url( - r"^manage/", - include(("funkwhale_api.manage.urls", "manage"), namespace="manage"), - ), - url( - r"^moderation/", - include( - ("funkwhale_api.moderation.urls", "moderation"), namespace="moderation" - ), - ), - url( - r"^federation/", - include( - ("funkwhale_api.federation.api_urls", "federation"), namespace="federation" - ), - ), - url( - r"^providers/", - include(("funkwhale_api.providers.urls", "providers"), namespace="providers"), - ), - url( - r"^favorites/", - include(("funkwhale_api.favorites.urls", "favorites"), namespace="favorites"), - ), - url(r"^search$", views.Search.as_view(), name="search"), - url( - r"^radios/", - include(("funkwhale_api.radios.urls", "radios"), namespace="radios"), - ), - url( - r"^history/", - include(("funkwhale_api.history.urls", "history"), namespace="history"), - ), - url( - r"^", - include(("funkwhale_api.users.api_urls", "users"), namespace="users"), - ), - # XXX: remove if Funkwhale 1.1 - url( - r"^users/", - include(("funkwhale_api.users.api_urls", "users"), namespace="users-nested"), - ), - url( - r"^oauth/", - include(("funkwhale_api.users.oauth.urls", "oauth"), namespace="oauth"), - ), - url(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), - url( - r"^text-preview/?$", common_views.TextPreviewView.as_view(), name="text-preview" - ), -] - -urlpatterns = [ - url(r"^v1/", include((v1_patterns, "v1"), namespace="v1")) -] + format_suffix_patterns(subsonic_router.urls, allowed=["view"]) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index dd05ec5d0..b7040a707 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -13,7 +13,29 @@ APPS_DIR = ROOT_DIR.path("funkwhale_api") env = environ.Env() ENV = env -LOGLEVEL = env("LOGLEVEL", default="info").upper() +# If DEBUG is `true`, we automatically set the loglevel to "DEBUG" +# If DEBUG is `false`, we try to read the level from LOGLEVEL environment and default to "INFO" +LOGLEVEL = ( + "DEBUG" if env.bool("DEBUG", False) else env("LOGLEVEL", default="info").upper() +) +""" +Default logging level for the Funkwhale processes. + +.. note:: + The `DEBUG` variable overrides the `LOGLEVEL` if it is set to `TRUE`. + + The `LOGLEVEL` value only applies if `DEBUG` is `false` or not present. + +Available levels: + +- ``debug`` +- ``info`` +- ``warning`` +- ``error`` +- ``critical`` + +""" + IS_DOCKER_SETUP = env.bool("IS_DOCKER_SETUP", False) @@ -35,19 +57,6 @@ if env("FUNKWHALE_SENTRY_DSN", default=None) is not None: ) sentry_sdk.set_tag("instance", env("FUNKWHALE_HOSTNAME")) -""" -Default logging level for the Funkwhale processes - -Available levels: - -- ``debug`` -- ``info`` -- ``warning`` -- ``error`` -- ``critical`` - -""" # pylint: disable=W0105 - LOGGING_CONFIG = None logging.config.dictConfig( { @@ -187,9 +196,7 @@ request errors related to this. FUNKWHALE_SPA_HTML_CACHE_DURATION = env.int( "FUNKWHALE_SPA_HTML_CACHE_DURATION", default=60 * 15 ) -FUNKWHALE_EMBED_URL = env( - "FUNKWHALE_EMBED_URL", default=FUNKWHALE_URL + "/front/embed.html" -) +FUNKWHALE_EMBED_URL = env("FUNKWHALE_EMBED_URL", default=FUNKWHALE_URL + "/embed.html") FUNKWHALE_SPA_REWRITE_MANIFEST = env.bool( "FUNKWHALE_SPA_REWRITE_MANIFEST", default=True ) @@ -272,6 +279,7 @@ LOCAL_APPS = ( "funkwhale_api.playlists", "funkwhale_api.subsonic", "funkwhale_api.tags", + "funkwhale_api.typesense", ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps @@ -281,9 +289,9 @@ ADDITIONAL_APPS = env.list("ADDITIONAL_APPS", default=[]) List of Django apps to load in addition to Funkwhale plugins and apps. """ INSTALLED_APPS = ( - DJANGO_APPS + LOCAL_APPS + + DJANGO_APPS + THIRD_PARTY_APPS - + LOCAL_APPS + tuple(ADDITIONAL_APPS) + tuple(plugins.trigger_filter(plugins.PLUGINS_APPS, [], enabled=True)) ) @@ -822,7 +830,7 @@ If you're using password auth (the extra slash is important) .. note:: If you want to use Redis over unix sockets, you also need to update - :attr:`CELERY_BROKER_URL`, because the scheme differ from the one used by + :attr:`CELERY_BROKER_URL`, because the scheme differs from the one used by :attr:`CACHE_URL`. """ @@ -873,7 +881,7 @@ to use a different server or use Redis sockets to connect. Example: -- ``redis://127.0.0.1:6379/0`` +- ``unix://127.0.0.1:6379/0`` - ``redis+socket:///run/redis/redis.sock?virtual_host=0`` """ @@ -934,6 +942,11 @@ CELERY_BEAT_SCHEDULE = { ), "options": {"expires": 60 * 60}, }, + "typesense.build_canonical_index": { + "task": "typesense.build_canonical_index", + "schedule": crontab(day_of_week="*/2", minute="0", hour="3"), + "options": {"expires": 60 * 60 * 24}, + }, } if env.bool("ADD_ALBUM_TAGS_FROM_TRACKS", default=True): @@ -1459,3 +1472,22 @@ instead of request header. HASHING_ALGORITHM = "sha256" HASHING_CHUNK_SIZE = 1024 * 100 + +""" +Typenses Settings +""" +TYPESENSE_API_KEY = env("TYPESENSE_API_KEY", default=None) +""" Typesense API key. This need to be defined in the .env file for Typenses to be activated.""" +TYPESENSE_PORT = env("TYPESENSE_PORT", default="8108") +"""Typesense listening port""" +TYPESENSE_PROTOCOL = env("TYPESENSE_PROTOCOL", default="http") +"""Typesense listening protocol""" +TYPESENSE_HOST = env( + "TYPESENSE_HOST", + default="typesense" if IS_DOCKER_SETUP else "localhost", +) +""" +Typesense hostname. Defaults to `localhost` on non-Docker deployments and to `typesense` on +Docker deployments. +""" +TYPESENSE_NUM_TYPO = env("TYPESENSE_NUM_TYPO", default=5) diff --git a/api/config/settings/local.py b/api/config/settings/local.py index 7564fde53..b1dc93f19 100644 --- a/api/config/settings/local.py +++ b/api/config/settings/local.py @@ -76,7 +76,7 @@ DEBUG_TOOLBAR_PANELS = [ # django-extensions # ------------------------------------------------------------------------------ -# INSTALLED_APPS += ('django_extensions', ) +INSTALLED_APPS += ("django_extensions",) INSTALLED_APPS += ("drf_spectacular",) @@ -149,3 +149,5 @@ MIDDLEWARE = ( "funkwhale_api.common.middleware.ProfilerMiddleware", "funkwhale_api.common.middleware.PymallocMiddleware", ) + MIDDLEWARE + +TYPESENSE_API_KEY = "apikey" diff --git a/api/config/settings/testing.py b/api/config/settings/testing.py new file mode 100644 index 000000000..ab763b84d --- /dev/null +++ b/api/config/settings/testing.py @@ -0,0 +1,9 @@ +import os + +os.environ.setdefault("FUNKWHALE_URL", "http://funkwhale.dev") + +from .common import * # noqa + +DEBUG = True +SECRET_KEY = "a_super_secret_key!" +TYPESENSE_API_KEY = "apikey" diff --git a/api/config/urls/api_v2.py b/api/config/urls/api_v2.py index 95c776a0c..a5fda5c7c 100644 --- a/api/config/urls/api_v2.py +++ b/api/config/urls/api_v2.py @@ -8,7 +8,11 @@ v2_patterns = router.urls v2_patterns += [ url( r"^instance/", - include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), + include(("funkwhale_api.instance.urls_v2", "instance"), namespace="instance"), + ), + url( + r"^radios/", + include(("funkwhale_api.radios.urls_v2", "radios"), namespace="radios"), ), ] diff --git a/api/funkwhale_api/__init__.py b/api/funkwhale_api/__init__.py index f73b22bce..646b6149e 100644 --- a/api/funkwhale_api/__init__.py +++ b/api/funkwhale_api/__init__.py @@ -1,7 +1,4 @@ -__version__ = "1.3.4" -__version_info__ = tuple( - [ - int(num) if num.isdigit() else num - for num in __version__.replace("-", ".", 1).split(".") - ] -) +from importlib.metadata import version as get_version + +version = get_version("funkwhale_api") +__version__ = version diff --git a/api/funkwhale_api/audio/serializers.py b/api/funkwhale_api/audio/serializers.py index 212d4ab78..3c830fd80 100644 --- a/api/funkwhale_api/audio/serializers.py +++ b/api/funkwhale_api/audio/serializers.py @@ -1,10 +1,10 @@ import datetime import logging +import sys import time import uuid import feedparser -import pytz import requests from django.conf import settings from django.db import transaction @@ -33,6 +33,11 @@ from funkwhale_api.users import serializers as users_serializers from . import categories, models +if sys.version_info < (3, 9): + from backports.zoneinfo import ZoneInfo +else: + from zoneinfo import ZoneInfo + logger = logging.getLogger(__name__) @@ -769,7 +774,7 @@ class RssFeedItemSerializer(serializers.Serializer): if "published_parsed" in validated_data: track_defaults["creation_date"] = datetime.datetime.fromtimestamp( time.mktime(validated_data["published_parsed"]) - ).replace(tzinfo=pytz.utc) + ).replace(tzinfo=ZoneInfo("UTC")) upload_defaults = { "source": validated_data["links"]["audio"]["source"], diff --git a/api/funkwhale_api/cli/users.py b/api/funkwhale_api/cli/users.py index 0921a73e1..c9c7aaa47 100644 --- a/api/funkwhale_api/cli/users.py +++ b/api/funkwhale_api/cli/users.py @@ -38,7 +38,7 @@ def handler_create_user( utils.logger.debug("Creating user…") user = serializer.save(request=request) utils.logger.debug("Setting permissions and other attributes…") - user.is_staff = is_staff + user.is_staff = is_staff or is_superuser # Always set staff if superuser is set user.upload_quota = upload_quota user.is_superuser = is_superuser for permission in permissions: diff --git a/api/funkwhale_api/common/filters.py b/api/funkwhale_api/common/filters.py index 6fb4b1b45..65f5e008d 100644 --- a/api/funkwhale_api/common/filters.py +++ b/api/funkwhale_api/common/filters.py @@ -1,5 +1,6 @@ from django import forms from django.db.models import Q +from django.db.models.functions import Lower from django_filters import rest_framework as filters from django_filters import widgets from drf_spectacular.utils import extend_schema_field @@ -239,3 +240,19 @@ class ActorScopeFilter(filters.CharFilter): raise EmptyQuerySet() return Q(**{self.actor_field: actor}) + + +class CaseInsensitiveNameOrderingFilter(filters.OrderingFilter): + def filter(self, qs, value): + order_by = [] + + if value is None: + return qs + + for param in value: + if param == "name": + order_by.append(Lower("name")) + else: + order_by.append(self.get_ordering_value(param)) + + return qs.order_by(*order_by) diff --git a/api/funkwhale_api/common/management/commands/createsuperuser.py b/api/funkwhale_api/common/management/commands/createsuperuser.py new file mode 100644 index 000000000..49a59753f --- /dev/null +++ b/api/funkwhale_api/common/management/commands/createsuperuser.py @@ -0,0 +1,22 @@ +import os + +from django.contrib.auth.management.commands.createsuperuser import ( + Command as BaseCommand, +) +from django.core.management.base import CommandError + + +class Command(BaseCommand): + def handle(self, *apps_label, **options): + """ + Creating Django Superusers would bypass some of our username checks, which can lead to unexpected behaviour. + We therefore prohibit the execution of the command. + """ + if not os.environ.get("FORCE") == "1": + raise CommandError( + "Running createsuperuser on your Funkwhale instance bypasses some of our checks " + "which can lead to unexpected behavior of your instance. We therefore suggest to " + "run `funkwhale-manage fw users create --superuser` instead." + ) + + return super().handle(*apps_label, **options) diff --git a/api/funkwhale_api/common/management/commands/gitpod.py b/api/funkwhale_api/common/management/commands/gitpod.py index 78d8c9ddb..3887c7f3c 100644 --- a/api/funkwhale_api/common/management/commands/gitpod.py +++ b/api/funkwhale_api/common/management/commands/gitpod.py @@ -36,22 +36,7 @@ class Command(BaseCommand): self.stdout.write("") def init(self): - try: - user = User.objects.get(username="gitpod") - except Exception: - call_command( - "createsuperuser", - username="gitpod", - email="gitpod@example.com", - no_input=False, - ) - user = User.objects.get(username="gitpod") - - user.set_password("gitpod") - if not user.actor: - user.create_actor() - - user.save() + user = User.objects.get(username="gitpod") # Allow anonymous access preferences.set("common__api_authentication_required", False) diff --git a/api/funkwhale_api/common/management/commands/inplace_to_s3.py b/api/funkwhale_api/common/management/commands/inplace_to_s3.py new file mode 100644 index 000000000..e973b8466 --- /dev/null +++ b/api/funkwhale_api/common/management/commands/inplace_to_s3.py @@ -0,0 +1,95 @@ +import pathlib +from argparse import RawTextHelpFormatter + +from django.core.management.base import BaseCommand +from django.db import transaction + +from funkwhale_api.music import models + + +class Command(BaseCommand): + help = """ + Update the reference for Uploads that have been imported with --in-place and are now moved to s3. + + Please note: This does not move any file! Make sure you already moved the files to your s3 bucket. + + Specify --source to filter the reference to update to files from a specific in-place directory. If no + --source is given, all in-place imported track references will be updated. + + Specify --target to specify a subdirectory in the S3 bucket where you moved the files. If no --target is + given, the file is expected to be stored in the same path as before. + + Examples: + + Music File: /music/Artist/Album/track.ogg + --source: /music + --target unset + + All files imported from /music will be updated and expected to be in the same folder structure in the bucket + + Music File: /music/Artist/Album/track.ogg + --source: /music + --target: /in_place + + The music file is expected to be stored in the bucket in the directory /in_place/Artist/Album/track.ogg + """ + + def create_parser(self, *args, **kwargs): + parser = super().create_parser(*args, **kwargs) + parser.formatter_class = RawTextHelpFormatter + return parser + + def add_arguments(self, parser): + parser.add_argument( + "--no-dry-run", + action="store_false", + dest="dry_run", + default=True, + help="Disable dry run mode and apply updates for real on the database", + ) + parser.add_argument( + "--source", + type=pathlib.Path, + required=True, + help="Specify the path of the directory where the files originally were stored to update their reference.", + ) + parser.add_argument( + "--target", + type=pathlib.Path, + help="Specify a subdirectory in the S3 bucket where you moved the files to.", + ) + + @transaction.atomic + def handle(self, *args, **options): + if options["dry_run"]: + self.stdout.write("Dry-run on, will not touch the database") + else: + self.stdout.write("Dry-run off, *changing the database*") + self.stdout.write("") + + prefix = f"file://{options['source']}" + + to_change = models.Upload.objects.filter(source__startswith=prefix) + + self.stdout.write(f"Found {to_change.count()} uploads to update.") + + target = options.get("target") + if target is None: + target = options["source"] + + for upl in to_change: + upl.audio_file = str(upl.source).replace(str(prefix), str(target)) + upl.source = None + self.stdout.write(f"Upload expected in {upl.audio_file}") + if not options["dry_run"]: + upl.save() + + self.stdout.write("") + if options["dry_run"]: + self.stdout.write( + "Nothing was updated, rerun this command with --no-dry-run to apply the changes" + ) + else: + self.stdout.write("Updating completed!") + + self.stdout.write("") diff --git a/api/funkwhale_api/common/management/commands/script.py b/api/funkwhale_api/common/management/commands/script.py index be94e4eab..ab165f626 100644 --- a/api/funkwhale_api/common/management/commands/script.py +++ b/api/funkwhale_api/common/management/commands/script.py @@ -26,7 +26,7 @@ class Command(BaseCommand): script = available_scripts[name] except KeyError: raise CommandError( - "{} is not a valid script. Run funkwhale-manage for a " + "{} is not a valid script. Run funkwhale-manage script for a " "list of available scripts".format(name) ) @@ -43,7 +43,7 @@ class Command(BaseCommand): def show_help(self): self.stdout.write("") self.stdout.write("Available scripts:") - self.stdout.write("Launch with: funkwhale-manage ") + self.stdout.write("Launch with: funkwhale-manage script ") available_scripts = self.get_scripts() for name, script in sorted(available_scripts.items()): self.stdout.write("") diff --git a/api/funkwhale_api/common/management/commands/testdata.py b/api/funkwhale_api/common/management/commands/testdata.py new file mode 100644 index 000000000..fa7ae631b --- /dev/null +++ b/api/funkwhale_api/common/management/commands/testdata.py @@ -0,0 +1,43 @@ +from django.core.management.commands.migrate import Command as BaseCommand + +from funkwhale_api.federation import factories +from funkwhale_api.federation.models import Actor + + +class Command(BaseCommand): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.help = "Helper to generate randomized testdata" + self.type_choices = {"notifications": self.handle_notifications} + self.missing_args_message = f"Please specify one of the following sub-commands: { *self.type_choices.keys(), }" + + def add_arguments(self, parser): + subparsers = parser.add_subparsers(dest="subcommand") + + notification_parser = subparsers.add_parser("notifications") + notification_parser.add_argument( + "username", type=str, help="Username to send the notifications to" + ) + notification_parser.add_argument( + "--count", type=int, help="Number of elements to create", default=1 + ) + + def handle(self, *args, **options): + self.type_choices[options["subcommand"]](options) + + def handle_notifications(self, options): + self.stdout.write( + f"Create {options['count']} notification(s) for {options['username']}" + ) + try: + actor = Actor.objects.get(preferred_username=options["username"]) + except Actor.DoesNotExist: + self.stdout.write( + "The user you want to create notifications for does not exist" + ) + return + + follow_activity = factories.ActivityFactory(type="Follow") + for _ in range(options["count"]): + factories.InboxItemFactory(actor=actor, activity=follow_activity) diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py index b83beb2e6..63ba1b378 100644 --- a/api/funkwhale_api/common/middleware.py +++ b/api/funkwhale_api/common/middleware.py @@ -150,7 +150,9 @@ def get_default_head_tags(path): { "tag": "meta", "property": "og:image", - "content": utils.join_url(settings.FUNKWHALE_URL, "/front/favicon.png"), + "content": utils.join_url( + settings.FUNKWHALE_URL, "/android-chrome-512x512.png" + ), }, { "tag": "meta", diff --git a/api/funkwhale_api/common/serializers.py b/api/funkwhale_api/common/serializers.py index d10969eeb..96f5beddd 100644 --- a/api/funkwhale_api/common/serializers.py +++ b/api/funkwhale_api/common/serializers.py @@ -349,7 +349,7 @@ class ScopesSerializer(serializers.Serializer): class IdentSerializer(serializers.Serializer): type = serializers.CharField() - id = serializers.IntegerField() + id = serializers.CharField() class RateLimitSerializer(serializers.Serializer): diff --git a/api/funkwhale_api/common/throttling.py b/api/funkwhale_api/common/throttling.py index 06b99f9f0..264bb92c5 100644 --- a/api/funkwhale_api/common/throttling.py +++ b/api/funkwhale_api/common/throttling.py @@ -7,7 +7,7 @@ from rest_framework import throttling as rest_throttling def get_ident(user, request): if user and user.is_authenticated: - return {"type": "authenticated", "id": user.pk} + return {"type": "authenticated", "id": f"{user.pk}"} ident = rest_throttling.BaseThrottle().get_ident(request) return {"type": "anonymous", "id": ident} diff --git a/api/funkwhale_api/common/utils.py b/api/funkwhale_api/common/utils.py index f0d4b1970..19d43ad82 100644 --- a/api/funkwhale_api/common/utils.py +++ b/api/funkwhale_api/common/utils.py @@ -477,14 +477,13 @@ def monkey_patch_request_build_absolute_uri(): def get_file_hash(file, algo=None, chunk_size=None, full_read=False): algo = algo or settings.HASHING_ALGORITHM chunk_size = chunk_size or settings.HASHING_CHUNK_SIZE - handler = getattr(hashlib, algo) - hash = handler() + hasher = hashlib.new(algo) file.seek(0) if full_read: for byte_block in iter(lambda: file.read(chunk_size), b""): - hash.update(byte_block) + hasher.update(byte_block) else: # sometimes, it's useful to only hash the beginning of the file, e.g # to avoid a lot of I/O when crawling large libraries - hash.update(file.read(chunk_size)) - return f"{algo}:{hash.hexdigest()}" + hasher.update(file.read(chunk_size)) + return f"{algo}:{hasher.hexdigest()}" diff --git a/api/funkwhale_api/contrib/maloja/funkwhale_ready.py b/api/funkwhale_api/contrib/maloja/funkwhale_ready.py index 7ac9057a6..45db7f70a 100644 --- a/api/funkwhale_api/contrib/maloja/funkwhale_ready.py +++ b/api/funkwhale_api/contrib/maloja/funkwhale_ready.py @@ -17,31 +17,40 @@ def submit_listen(listening, conf, **kwargs): return logger = PLUGIN["logger"] - logger.info("Submitting listening to Majola at %s", server_url) - payload = get_payload(listening, api_key) - logger.debug("Majola payload: %r", payload) + logger.info("Submitting listening to Maloja at %s", server_url) + payload = get_payload(listening, api_key, conf) + logger.debug("Maloja payload: %r", payload) url = server_url.rstrip("/") + "/apis/mlj_1/newscrobble" session = plugins.get_session() response = session.post(url, json=payload) response.raise_for_status() details = json.loads(response.text) if details["status"] == "success": - logger.info("Majola listening submitted successfully") + logger.info("Maloja listening submitted successfully") else: raise MalojaException(response.text) -def get_payload(listening, api_key): +def get_payload(listening, api_key, conf): track = listening.track + + # See https://github.com/krateng/maloja/blob/master/API.md payload = { "key": api_key, "artists": [track.artist.name], "title": track.title, "time": int(listening.creation_date.timestamp()), + "nofix": bool(conf.get("nofix")), } if track.album: if track.album.title: payload["album"] = track.album.title + if track.album.artist: + payload["albumartists"] = [track.album.artist.name] + + upload = track.uploads.filter(duration__gte=0).first() + if upload: + payload["length"] = upload.duration return payload diff --git a/api/funkwhale_api/contrib/maloja/funkwhale_startup.py b/api/funkwhale_api/contrib/maloja/funkwhale_startup.py index 69e5c85b2..266ab32b3 100644 --- a/api/funkwhale_api/contrib/maloja/funkwhale_startup.py +++ b/api/funkwhale_api/contrib/maloja/funkwhale_startup.py @@ -5,10 +5,16 @@ PLUGIN = plugins.get_plugin_config( label="Maloja", description="A plugin that allows you to submit your listens to your Maloja server.", homepage="https://docs.funkwhale.audio/users/builtinplugins.html#maloja-plugin", - version="0.1.1", + version="0.2", user=True, conf=[ {"name": "server_url", "type": "text", "label": "Maloja server URL"}, {"name": "api_key", "type": "text", "label": "Your Maloja API key"}, + { + "name": "nofix", + "type": "boolean", + "label": "Skip server-side metadata fixing", + "default": False, + }, ], ) diff --git a/api/funkwhale_api/federation/signing.py b/api/funkwhale_api/federation/signing.py index ccac03045..1706e5215 100644 --- a/api/funkwhale_api/federation/signing.py +++ b/api/funkwhale_api/federation/signing.py @@ -1,8 +1,8 @@ import datetime import logging +import sys import cryptography.exceptions -import pytz import requests import requests_http_message_signatures from django import forms @@ -11,6 +11,11 @@ from django.utils.http import parse_http_date from . import exceptions, utils +if sys.version_info < (3, 9): + from backports.zoneinfo import ZoneInfo +else: + from zoneinfo import ZoneInfo + logger = logging.getLogger(__name__) # the request Date should be between now - 30s and now + 30s @@ -26,7 +31,7 @@ def verify_date(raw_date): except ValueError as e: raise forms.ValidationError(str(e)) dt = datetime.datetime.utcfromtimestamp(ts) - dt = dt.replace(tzinfo=pytz.utc) + dt = dt.replace(tzinfo=ZoneInfo("UTC")) delta = datetime.timedelta(seconds=DATE_HEADER_VALID_FOR) now = timezone.now() if dt < now - delta or dt > now + delta: diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py index d34fb814f..402fe7e16 100644 --- a/api/funkwhale_api/instance/dynamic_preferences_registry.py +++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py @@ -1,3 +1,4 @@ +import pycountry from django.core.validators import FileExtensionValidator from django.forms import widgets from dynamic_preferences import types @@ -170,3 +171,18 @@ class Banner(ImagePreference): default = None help_text = "This banner will be displayed on your pod's landing and about page. At least 600x100px recommended." field_kwargs = {"required": False} + + +@global_preferences_registry.register +class Location(types.ChoicePreference): + show_in_api = True + section = instance + name = "location" + verbose_name = "Server Location" + default = "" + choices = [(country.alpha_2, country.name) for country in pycountry.countries] + help_text = ( + "The country or territory in which your server is located. This is displayed in the server's Nodeinfo " + "endpoint." + ) + field_kwargs = {"choices": choices, "required": False} diff --git a/api/funkwhale_api/instance/serializers.py b/api/funkwhale_api/instance/serializers.py index 15eeaed59..7856df065 100644 --- a/api/funkwhale_api/instance/serializers.py +++ b/api/funkwhale_api/instance/serializers.py @@ -12,6 +12,17 @@ class SoftwareSerializer(serializers.Serializer): return "funkwhale" +class SoftwareSerializer_v2(SoftwareSerializer): + repository = serializers.SerializerMethodField() + homepage = serializers.SerializerMethodField() + + def get_repository(self, obj): + return "https://dev.funkwhale.audio/funkwhale/funkwhale" + + def get_homepage(self, obj): + return "https://funkwhale.audio" + + class ServicesSerializer(serializers.Serializer): inbound = serializers.ListField(child=serializers.CharField(), default=[]) outbound = serializers.ListField(child=serializers.CharField(), default=[]) @@ -31,6 +42,8 @@ class UsersUsageSerializer(serializers.Serializer): class UsageSerializer(serializers.Serializer): users = UsersUsageSerializer() + localPosts = serializers.IntegerField(required=False) + localComments = serializers.IntegerField(required=False) class TotalCountSerializer(serializers.Serializer): @@ -92,19 +105,14 @@ class MetadataSerializer(serializers.Serializer): private = serializers.SerializerMethodField() shortDescription = serializers.SerializerMethodField() longDescription = serializers.SerializerMethodField() - rules = serializers.SerializerMethodField() contactEmail = serializers.SerializerMethodField() - terms = serializers.SerializerMethodField() nodeName = serializers.SerializerMethodField() banner = serializers.SerializerMethodField() defaultUploadQuota = serializers.SerializerMethodField() - library = serializers.SerializerMethodField() supportedUploadExtensions = serializers.ListField(child=serializers.CharField()) allowList = serializers.SerializerMethodField() - reportTypes = ReportTypeSerializer(source="report_types", many=True) funkwhaleSupportMessageEnabled = serializers.SerializerMethodField() instanceSupportMessage = serializers.SerializerMethodField() - endpoints = EndpointsSerializer() usage = MetadataUsageSerializer(source="stats", required=False) def get_private(self, obj) -> bool: @@ -116,15 +124,9 @@ class MetadataSerializer(serializers.Serializer): def get_longDescription(self, obj) -> str: return obj["preferences"].get("instance__long_description") - def get_rules(self, obj) -> str: - return obj["preferences"].get("instance__rules") - def get_contactEmail(self, obj) -> str: return obj["preferences"].get("instance__contact_email") - def get_terms(self, obj) -> str: - return obj["preferences"].get("instance__terms") - def get_nodeName(self, obj) -> str: return obj["preferences"].get("instance__name") @@ -137,15 +139,6 @@ class MetadataSerializer(serializers.Serializer): def get_defaultUploadQuota(self, obj) -> int: return obj["preferences"].get("users__upload_quota") - @extend_schema_field(NodeInfoLibrarySerializer) - def get_library(self, obj): - data = obj["stats"] or {} - data["federationEnabled"] = obj["preferences"].get("federation__enabled") - data["anonymousCanListen"] = not obj["preferences"].get( - "common__api_authentication_required" - ) - return NodeInfoLibrarySerializer(data).data - @extend_schema_field(AllowListStatSerializer) def get_allowList(self, obj): return AllowListStatSerializer( @@ -166,6 +159,62 @@ class MetadataSerializer(serializers.Serializer): return MetadataUsageSerializer(obj["stats"]).data +class Metadata20Serializer(MetadataSerializer): + library = serializers.SerializerMethodField() + reportTypes = ReportTypeSerializer(source="report_types", many=True) + endpoints = EndpointsSerializer() + rules = serializers.SerializerMethodField() + terms = serializers.SerializerMethodField() + + def get_rules(self, obj) -> str: + return obj["preferences"].get("instance__rules") + + def get_terms(self, obj) -> str: + return obj["preferences"].get("instance__terms") + + @extend_schema_field(NodeInfoLibrarySerializer) + def get_library(self, obj): + data = obj["stats"] or {} + data["federationEnabled"] = obj["preferences"].get("federation__enabled") + data["anonymousCanListen"] = not obj["preferences"].get( + "common__api_authentication_required" + ) + return NodeInfoLibrarySerializer(data).data + + +class MetadataContentLocalSerializer(serializers.Serializer): + artists = serializers.IntegerField() + releases = serializers.IntegerField() + recordings = serializers.IntegerField() + hoursOfContent = serializers.IntegerField() + + +class MetadataContentCategorySerializer(serializers.Serializer): + name = serializers.CharField() + count = serializers.IntegerField() + + +class MetadataContentSerializer(serializers.Serializer): + local = MetadataContentLocalSerializer() + topMusicCategories = MetadataContentCategorySerializer(many=True) + topPodcastCategories = MetadataContentCategorySerializer(many=True) + + +class Metadata21Serializer(MetadataSerializer): + languages = serializers.ListField(child=serializers.CharField()) + location = serializers.CharField() + content = MetadataContentSerializer() + features = serializers.ListField(child=serializers.CharField()) + codeOfConduct = serializers.SerializerMethodField() + + def get_codeOfConduct(self, obj) -> str: + return ( + full_url("/about/pod#rules") + if obj["preferences"].get("instance__rules") + else "" + ) + + class NodeInfo20Serializer(serializers.Serializer): version = serializers.SerializerMethodField() software = SoftwareSerializer() @@ -196,9 +245,36 @@ class NodeInfo20Serializer(serializers.Serializer): usage = {"users": {"total": 0, "activeMonth": 0, "activeHalfyear": 0}} return UsageSerializer(usage).data - @extend_schema_field(MetadataSerializer) + @extend_schema_field(Metadata20Serializer) def get_metadata(self, obj): - return MetadataSerializer(obj).data + return Metadata20Serializer(obj).data + + +class NodeInfo21Serializer(NodeInfo20Serializer): + version = serializers.SerializerMethodField() + software = SoftwareSerializer_v2() + + def get_version(self, obj) -> str: + return "2.1" + + @extend_schema_field(UsageSerializer) + def get_usage(self, obj): + usage = None + if obj["preferences"]["instance__nodeinfo_stats_enabled"]: + usage = obj["stats"] + usage["localPosts"] = 0 + usage["localComments"] = 0 + else: + usage = { + "users": {"total": 0, "activeMonth": 0, "activeHalfyear": 0}, + "localPosts": 0, + "localComments": 0, + } + return UsageSerializer(usage).data + + @extend_schema_field(Metadata21Serializer) + def get_metadata(self, obj): + return Metadata21Serializer(obj).data class SpaManifestIconSerializer(serializers.Serializer): diff --git a/api/funkwhale_api/instance/stats.py b/api/funkwhale_api/instance/stats.py index 923a1dadb..9353eb53e 100644 --- a/api/funkwhale_api/instance/stats.py +++ b/api/funkwhale_api/instance/stats.py @@ -1,6 +1,6 @@ import datetime -from django.db.models import Sum +from django.db.models import Count, F, Sum from django.utils import timezone from funkwhale_api.favorites.models import TrackFavorite @@ -22,6 +22,39 @@ def get(): } +def get_content(): + return { + "local": { + "artists": get_artists(), + "releases": get_albums(), + "recordings": get_tracks(), + "hoursOfContent": get_music_duration(), + }, + "topMusicCategories": get_top_music_categories(), + "topPodcastCategories": get_top_podcast_categories(), + } + + +def get_top_music_categories(): + return ( + models.Track.objects.filter(artist__content_category="music") + .exclude(tagged_items__tag_id=None) + .values(name=F("tagged_items__tag__name")) + .annotate(count=Count("name")) + .order_by("-count")[:3] + ) + + +def get_top_podcast_categories(): + return ( + models.Track.objects.filter(artist__content_category="podcast") + .exclude(tagged_items__tag_id=None) + .values(name=F("tagged_items__tag__name")) + .annotate(count=Count("name")) + .order_by("-count")[:3] + ) + + def get_users(): qs = User.objects.filter(is_active=True) now = timezone.now() diff --git a/api/funkwhale_api/instance/urls.py b/api/funkwhale_api/instance/urls.py index 6047eca19..62baa5021 100644 --- a/api/funkwhale_api/instance/urls.py +++ b/api/funkwhale_api/instance/urls.py @@ -8,7 +8,7 @@ admin_router = routers.OptionalSlashRouter() admin_router.register(r"admin/settings", views.AdminSettings, "admin-settings") urlpatterns = [ - url(r"^nodeinfo/2.0/?$", views.NodeInfo.as_view(), name="nodeinfo-2.0"), + url(r"^nodeinfo/2.0/?$", views.NodeInfo20.as_view(), name="nodeinfo-2.0"), url(r"^settings/?$", views.InstanceSettings.as_view(), name="settings"), url(r"^spa-manifest.json", views.SpaManifest.as_view(), name="spa-manifest"), ] + admin_router.urls diff --git a/api/funkwhale_api/instance/urls_v2.py b/api/funkwhale_api/instance/urls_v2.py new file mode 100644 index 000000000..2b8ddcb3b --- /dev/null +++ b/api/funkwhale_api/instance/urls_v2.py @@ -0,0 +1,7 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r"^nodeinfo/2.1/?$", views.NodeInfo21.as_view(), name="nodeinfo-2.1"), +] diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index ffde3db4a..3272a95d8 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -11,6 +11,7 @@ from dynamic_preferences.api import viewsets as preferences_viewsets from dynamic_preferences.api.serializers import GlobalPreferenceSerializer from dynamic_preferences.registries import global_preferences_registry from rest_framework import generics, views +from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from funkwhale_api import __version__ as funkwhale_version @@ -58,9 +59,11 @@ class InstanceSettings(generics.GenericAPIView): @method_decorator(ensure_csrf_cookie, name="dispatch") -class NodeInfo(views.APIView): +class NodeInfo20(views.APIView): permission_classes = [] authentication_classes = [] + serializer_class = serializers.NodeInfo20Serializer + renderer_classes = (JSONRenderer,) @extend_schema( responses=serializers.NodeInfo20Serializer, operation_id="getNodeInfo20" @@ -81,6 +84,7 @@ class NodeInfo(views.APIView): data = { "software": {"version": funkwhale_version}, + "services": {"inbound": ["atom1.0"], "outbound": ["atom1.0"]}, "preferences": pref, "stats": cache_memoize(600, prefix="memoize:instance:stats")(stats.get)() if pref["instance__nodeinfo_stats_enabled"] @@ -112,7 +116,62 @@ class NodeInfo(views.APIView): data["endpoints"]["channels"] = reverse( "federation:index:index-channels" ) - serializer = serializers.NodeInfo20Serializer(data) + serializer = self.serializer_class(data) + return Response( + serializer.data, status=200, content_type=NODEINFO_2_CONTENT_TYPE + ) + + +class NodeInfo21(NodeInfo20): + serializer_class = serializers.NodeInfo21Serializer + + @extend_schema( + responses=serializers.NodeInfo20Serializer, operation_id="getNodeInfo20" + ) + def get(self, request): + pref = preferences.all() + if ( + pref["moderation__allow_list_public"] + and pref["moderation__allow_list_enabled"] + ): + allowed_domains = list( + Domain.objects.filter(allowed=True) + .order_by("name") + .values_list("name", flat=True) + ) + else: + allowed_domains = None + + data = { + "software": {"version": funkwhale_version}, + "services": {"inbound": ["atom1.0"], "outbound": ["atom1.0"]}, + "preferences": pref, + "stats": cache_memoize(600, prefix="memoize:instance:stats")(stats.get)() + if pref["instance__nodeinfo_stats_enabled"] + else None, + "actorId": get_service_actor().fid, + "supportedUploadExtensions": SUPPORTED_EXTENSIONS, + "allowed_domains": allowed_domains, + "languages": pref.get("moderation__languages"), + "location": pref.get("instance__location"), + "content": cache_memoize(600, prefix="memoize:instance:content")( + stats.get_content + )() + if pref["instance__nodeinfo_stats_enabled"] + else None, + "features": [ + "channels", + "podcasts", + ], + } + + if not pref.get("common__api_authentication_required"): + data["features"].append("anonymousCanListen") + + if pref.get("federation__enabled"): + data["features"].append("federation") + + serializer = self.serializer_class(data) return Response( serializer.data, status=200, content_type=NODEINFO_2_CONTENT_TYPE ) diff --git a/api/funkwhale_api/moderation/dynamic_preferences_registry.py b/api/funkwhale_api/moderation/dynamic_preferences_registry.py index fbbcd6a61..bda9b5952 100644 --- a/api/funkwhale_api/moderation/dynamic_preferences_registry.py +++ b/api/funkwhale_api/moderation/dynamic_preferences_registry.py @@ -1,3 +1,4 @@ +import pycountry from dynamic_preferences import types from dynamic_preferences.registries import global_preferences_registry from rest_framework import serializers @@ -92,3 +93,18 @@ class SignupFormCustomization(common_preferences.SerializedPreference): required = False default = {} data_serializer_class = CustomFormSerializer + + +@global_preferences_registry.register +class Languages(common_preferences.StringListPreference): + show_in_api = True + section = moderation + name = "languages" + default = ["en"] + verbose_name = "Moderation languages" + help_text = ( + "The language(s) spoken by the server moderator(s). Set this to inform users " + "what languages they should write reports and requests in." + ) + choices = [(lang.alpha_3, lang.name) for lang in pycountry.languages] + field_kwargs = {"choices": choices, "required": False} diff --git a/api/funkwhale_api/music/dynamic_preferences_registry.py b/api/funkwhale_api/music/dynamic_preferences_registry.py index 13d5ae56a..20890fde8 100644 --- a/api/funkwhale_api/music/dynamic_preferences_registry.py +++ b/api/funkwhale_api/music/dynamic_preferences_registry.py @@ -32,3 +32,18 @@ class MusicCacheDuration(types.IntPreference): "will be erased and retranscoded on the next listening." ) field_kwargs = {"required": False} + + +@global_preferences_registry.register +class MbidTaggedContent(types.BooleanPreference): + show_in_api = True + section = music + name = "only_allow_musicbrainz_tagged_files" + verbose_name = "Only allow Musicbrainz tagged files" + help_text = ( + "Requires uploaded files to be tagged with a MusicBrainz ID. " + "Enabling this setting has no impact on previously uploaded files. " + "You can use the CLI to clear files that don't contain an MBID or " + "or enable quality filtering to hide untagged content from API calls. " + ) + default = False diff --git a/api/funkwhale_api/music/factories.py b/api/funkwhale_api/music/factories.py index eba9525b4..cf9b11a0a 100644 --- a/api/funkwhale_api/music/factories.py +++ b/api/funkwhale_api/music/factories.py @@ -151,8 +151,9 @@ class TrackFactory( if created: self.save() - @factory.post_generation - def license(self, created, extracted, **kwargs): + # The @factory.post_generation is not used because we must + # not redefine the builtin `license` function. + def _license_post_generation(self, created, extracted, **kwargs): if not created: return @@ -160,6 +161,8 @@ class TrackFactory( self.license = LicenseFactory(code=extracted) self.save() + license = factory.PostGeneration(_license_post_generation) + @registry.register class UploadFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): diff --git a/api/funkwhale_api/music/fake_data.py b/api/funkwhale_api/music/fake_data.py index 4264947ca..204060404 100644 --- a/api/funkwhale_api/music/fake_data.py +++ b/api/funkwhale_api/music/fake_data.py @@ -15,7 +15,10 @@ def create_data(count=25): ) for album in albums: factories.UploadFactory.create_batch( - track__album=album, size=random.randint(3, 18) + track__album=album, + size=random.randint(3, 18), + playable=True, + in_place=True, ) diff --git a/api/funkwhale_api/music/filters.py b/api/funkwhale_api/music/filters.py index 0fc18bd8a..94fa15e14 100644 --- a/api/funkwhale_api/music/filters.py +++ b/api/funkwhale_api/music/filters.py @@ -104,7 +104,7 @@ class ArtistFilter( distinct=True, library_field="tracks__uploads__library", ) - ordering = django_filters.OrderingFilter( + ordering = common_filters.CaseInsensitiveNameOrderingFilter( fields=( ("id", "id"), ("name", "name"), diff --git a/api/funkwhale_api/music/licenses.py b/api/funkwhale_api/music/licenses.py index 2332f0908..1c8c6f4f8 100644 --- a/api/funkwhale_api/music/licenses.py +++ b/api/funkwhale_api/music/licenses.py @@ -28,7 +28,7 @@ def load(data): for row in data: try: - license = existing_by_code[row["code"]] + license_ = existing_by_code[row["code"]] except KeyError: logger.debug("Loading new license: {}".format(row["code"])) to_create.append( @@ -36,15 +36,15 @@ def load(data): ) else: logger.debug("Updating license: {}".format(row["code"])) - stored = [getattr(license, f) for f in MODEL_FIELDS] + stored = [getattr(license_, f) for f in MODEL_FIELDS] wanted = [row[f] for f in MODEL_FIELDS] if wanted == stored: continue # the object in database needs an update for f in MODEL_FIELDS: - setattr(license, f, row[f]) + setattr(license_, f, row[f]) - license.save() + license_.save() models.License.objects.bulk_create(to_create) return sorted(models.License.objects.all(), key=lambda o: o.code) @@ -78,12 +78,12 @@ def match(*values): else: existing = load(LICENSES) _cache = existing - for license in existing: - if license.conf is None: + for license_ in existing: + if license_.conf is None: continue - for i in license.conf["identifiers"]: + for i in license_.conf["identifiers"]: if match_urls(url, i): - return license + return license_ def match_urls(*urls): diff --git a/api/funkwhale_api/music/management/commands/generate_typesense_index.py b/api/funkwhale_api/music/management/commands/generate_typesense_index.py new file mode 100644 index 000000000..f2280f49f --- /dev/null +++ b/api/funkwhale_api/music/management/commands/generate_typesense_index.py @@ -0,0 +1,13 @@ +from django.core.management.base import BaseCommand + +from funkwhale_api.typesense import tasks + + +class Command(BaseCommand): + help = """ + Trigger the generation of a new typesense index for canonical Funkwhale tracks metadata. + This is use to resolve Funkwhale tracks to MusicBrainz ids""" + + def handle(self, *args, **kwargs): + tasks.build_canonical_index.delay() + self.stdout.write("Tasks launched in celery worker.") diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 2d4e173d7..54801967c 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -247,6 +247,13 @@ def process_upload(upload, update_denormalization=True): return fail_import( upload, "invalid_metadata", detail=detail, file_metadata=metadata_dump ) + check_mbid = preferences.get("music__only_allow_musicbrainz_tagged_files") + if check_mbid and not serializer.validated_data.get("mbid"): + return fail_import( + upload, + "Only content tagged with a MusicBrainz ID is permitted on this pod.", + detail="You can tag your files with MusicBrainz Picard", + ) final_metadata = collections.ChainMap( additional_data, serializer.validated_data, internal_config diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 461ec50d5..20942a952 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -583,7 +583,7 @@ def handle_serve( try: f.download_audio_from_remote(actor=actor) except requests.exceptions.RequestException: - return Response({"detail": "Remove track is unavailable"}, status=503) + return Response({"detail": "Remote track is unavailable"}, status=503) data = f.get_audio_data() if data: f.duration = data["duration"] diff --git a/api/funkwhale_api/radios/lb_recommendations.py b/api/funkwhale_api/radios/lb_recommendations.py new file mode 100644 index 000000000..ad67c6e91 --- /dev/null +++ b/api/funkwhale_api/radios/lb_recommendations.py @@ -0,0 +1,148 @@ +import logging +import time + +import troi +import troi.core +from django.core.cache import cache +from django.core.exceptions import ValidationError +from django.db.models import Q +from requests.exceptions import ConnectTimeout + +from funkwhale_api.music import models as music_models +from funkwhale_api.typesense import utils + +logger = logging.getLogger(__name__) + + +patches = troi.utils.discover_patches() + +SUPPORTED_PATCHES = patches.keys() + + +def run(config, **kwargs): + """Validate the received config and run the queryset generation""" + candidates = kwargs.pop("candidates", music_models.Track.objects.all()) + validate(config) + return TroiPatch().get_queryset(config, candidates) + + +def validate(config): + patch = config.get("patch") + if patch not in SUPPORTED_PATCHES: + raise ValidationError( + 'Invalid patch "{}". Supported patches: {}'.format( + config["patch"], SUPPORTED_PATCHES + ) + ) + + return True + + +def build_radio_queryset(patch, config, radio_qs): + """Take a troi patch and its arg, match the missing mbid and then build a radio queryset""" + + logger.info("Config used for troi radio generation is " + str(config)) + + start_time = time.time() + try: + recommendations = troi.core.generate_playlist(patch, config) + except ConnectTimeout: + raise ValueError( + "Timed out while connecting to ListenBrainz. No candidates could be retrieved for the radio." + ) + end_time_rec = time.time() + logger.info("Troi fetch took :" + str(end_time_rec - start_time)) + + if not recommendations: + raise ValueError("No candidates found by troi") + + recommended_mbids = [ + recommended_recording.mbid + for recommended_recording in recommendations.playlists[0].recordings + ] + + logger.info("Searching for MusicBrainz ID in Funkwhale database") + + qs_recommended = ( + music_models.Track.objects.all() + .filter(mbid__in=recommended_mbids) + .order_by("mbid", "pk") + .distinct("mbid") + ) + qs_recommended_mbid = [str(i.mbid) for i in qs_recommended] + + recommended_mbids_not_qs = [ + mbid for mbid in recommended_mbids if mbid not in qs_recommended_mbid + ] + cached_match = cache.get_many(recommended_mbids_not_qs) + cached_match_mbid = [str(i) for i in cached_match.keys()] + + if qs_recommended and cached_match_mbid: + logger.info("MusicBrainz IDs found in Funkwhale database and redis") + qs_recommended_mbid.extend(cached_match_mbid) + mbids_found = qs_recommended_mbid + elif qs_recommended and not cached_match_mbid: + logger.info("MusicBrainz IDs found in Funkwhale database") + mbids_found = qs_recommended_mbid + elif not qs_recommended and cached_match_mbid: + logger.info("MusicBrainz IDs found in redis cache") + mbids_found = cached_match_mbid + else: + logger.info( + "Couldn't find any matches in Funkwhale database. Trying to match all" + ) + mbids_found = [] + + recommended_recordings_not_found = [ + i for i in recommendations.playlists[0].recordings if i.mbid not in mbids_found + ] + + logger.info("Matching missing MusicBrainz ID to Funkwhale track") + + start_time_resolv = time.time() + utils.resolve_recordings_to_fw_track(recommended_recordings_not_found) + end_time_resolv = time.time() + + logger.info( + "Resolving " + + str(len(recommended_recordings_not_found)) + + " tracks in " + + str(end_time_resolv - start_time_resolv) + ) + + cached_match = cache.get_many(recommended_mbids) + + if not mbids_found and not cached_match: + raise ValueError("No candidates found for troi radio") + + mbids_found_pks = list( + music_models.Track.objects.all() + .filter(mbid__in=mbids_found) + .order_by("mbid", "pk") + .distinct("mbid") + .values_list("pk", flat=True) + ) + + mbids_found_pks_unique = [ + i for i in mbids_found_pks if i not in cached_match.keys() + ] + + if mbids_found and cached_match: + return radio_qs.filter( + Q(pk__in=mbids_found_pks_unique) | Q(pk__in=cached_match.values()) + ) + if mbids_found and not cached_match: + return radio_qs.filter(pk__in=mbids_found_pks_unique) + + if not mbids_found and cached_match: + return radio_qs.filter(pk__in=cached_match.values()) + + +class TroiPatch: + code = "troi-patch" + label = "Troi Patch" + + def get_queryset(self, config, qs): + patch_string = config.pop("patch") + patch = patches[patch_string] + return build_radio_queryset(patch(), config, qs) diff --git a/api/funkwhale_api/radios/models.py b/api/funkwhale_api/radios/models.py index 9d8753608..fdd6cd481 100644 --- a/api/funkwhale_api/radios/models.py +++ b/api/funkwhale_api/radios/models.py @@ -54,10 +54,6 @@ class RadioSession(models.Model): CONFIG_VERSION = 0 config = JSONField(encoder=DjangoJSONEncoder, blank=True, null=True) - def save(self, **kwargs): - self.radio.clean(self) - super().save(**kwargs) - @property def next_position(self): next_position = 1 @@ -68,16 +64,24 @@ class RadioSession(models.Model): return next_position - def add(self, track): - new_session_track = RadioSessionTrack.objects.create( - track=track, session=self, position=self.next_position - ) + def add(self, tracks): + next_position = self.next_position + radio_session_tracks = [] + for i, track in enumerate(tracks): + radio_session_track = RadioSessionTrack( + track=track, session=self, position=next_position + i + ) + radio_session_tracks.append(radio_session_track) - return new_session_track + new_session_tracks = RadioSessionTrack.objects.bulk_create(radio_session_tracks) - @property - def radio(self): - from .registries import registry + return new_session_tracks + + def radio(self, api_version): + if api_version == 2: + from .registries_v2 import registry + else: + from .registries import registry return registry[self.radio_type](session=self) diff --git a/api/funkwhale_api/radios/radios.py b/api/funkwhale_api/radios/radios.py index 3706cfc9f..d80c01910 100644 --- a/api/funkwhale_api/radios/radios.py +++ b/api/funkwhale_api/radios/radios.py @@ -1,4 +1,5 @@ import datetime +import json import logging import random from typing import List, Optional, Tuple @@ -14,7 +15,7 @@ from funkwhale_api.moderation import filters as moderation_filters from funkwhale_api.music.models import Artist, Library, Track, Upload from funkwhale_api.tags.models import Tag -from . import filters, models +from . import filters, lb_recommendations, models from .registries import registry logger = logging.getLogger(__name__) @@ -61,11 +62,19 @@ class SessionRadio(SimpleRadio): return self.session def get_queryset(self, **kwargs): - qs = Track.objects.all() - if not self.session: - return qs - if not self.session.user: - return qs + if not self.session or not self.session.user: + return ( + Track.objects.all() + .with_playable_uploads(actor=None) + .select_related("artist", "album__artist", "attributed_to") + ) + else: + qs = ( + Track.objects.all() + .with_playable_uploads(self.session.user.actor) + .select_related("artist", "album__artist", "attributed_to") + ) + query = moderation_filters.get_filtered_content_query( config=moderation_filters.USER_FILTER_CONFIG["TRACK"], user=self.session.user, @@ -75,6 +84,16 @@ class SessionRadio(SimpleRadio): def get_queryset_kwargs(self): return {} + def filter_queryset(self, queryset): + return queryset + + def filter_from_session(self, queryset): + already_played = self.session.session_tracks.all().values_list( + "track", flat=True + ) + queryset = queryset.exclude(pk__in=already_played) + return queryset + def get_choices(self, **kwargs): kwargs.update(self.get_queryset_kwargs()) queryset = self.get_queryset(**kwargs) @@ -87,16 +106,6 @@ class SessionRadio(SimpleRadio): queryset = self.filter_queryset(queryset) return queryset - def filter_queryset(self, queryset): - return queryset - - def filter_from_session(self, queryset): - already_played = self.session.session_tracks.all().values_list( - "track", flat=True - ) - queryset = queryset.exclude(pk__in=already_played) - return queryset - def pick(self, **kwargs): return self.pick_many(quantity=1, **kwargs)[0] @@ -104,8 +113,7 @@ class SessionRadio(SimpleRadio): choices = self.get_choices(**kwargs) picked_choices = super().pick_many(choices=choices, quantity=quantity) if self.session: - for choice in picked_choices: - self.session.add(choice) + self.session.add(picked_choices) return picked_choices def validate_session(self, data, **context): @@ -405,3 +413,58 @@ class RecentlyAdded(SessionRadio): Q(artist__content_category="music"), Q(creation_date__gt=date), ) + + +# Use this to experiment on the custom multiple radio with troi +@registry.register(name="troi") +class Troi(SessionRadio): + """ + Receive a vuejs generated config and use it to launch a troi radio session. + The config data should follow : + {"patch": "troi_patch_name", "troi_arg1":"troi_arg_1", "troi_arg2": ...} + Validation of the config (args) is done by troi during track fetch. + Funkwhale only checks if the patch is implemented + """ + + config = serializers.JSONField(required=True) + + def append_lb_config(self, data): + if self.session.user.settings is None: + logger.warning( + "No lb_user_name set in user settings. Some troi patches will fail" + ) + return data + elif self.session.user.settings.get("lb_user_name") is None: + logger.warning( + "No lb_user_name set in user settings. Some troi patches will fail" + ) + else: + data["user_name"] = self.session.user.settings["lb_user_name"] + + if self.session.user.settings.get("lb_user_token") is None: + logger.warning( + "No lb_user_token set in user settings. Some troi patch will fail" + ) + else: + data["user_token"] = self.session.user.settings["lb_user_token"] + + return data + + def get_queryset_kwargs(self): + kwargs = super().get_queryset_kwargs() + kwargs["config"] = self.session.config + return kwargs + + def validate_session(self, data, **context): + data = super().validate_session(data, **context) + if data.get("config") is None: + raise serializers.ValidationError( + "You must provide a configuration for this radio" + ) + return data + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + config = self.append_lb_config(json.loads(kwargs["config"])) + + return lb_recommendations.run(config, candidates=qs) diff --git a/api/funkwhale_api/radios/radios_v2.py b/api/funkwhale_api/radios/radios_v2.py new file mode 100644 index 000000000..dc7290980 --- /dev/null +++ b/api/funkwhale_api/radios/radios_v2.py @@ -0,0 +1,510 @@ +import datetime +import json +import logging +import pickle +import random +from typing import List, Optional, Tuple + +from django.core.cache import cache +from django.core.exceptions import ValidationError +from django.db import connection +from django.db.models import Q +from rest_framework import serializers + +from funkwhale_api.federation import fields as federation_fields +from funkwhale_api.federation import models as federation_models +from funkwhale_api.moderation import filters as moderation_filters +from funkwhale_api.music.models import Artist, Library, Track, Upload +from funkwhale_api.tags.models import Tag + +from . import filters, lb_recommendations, models +from .registries_v2 import registry + +logger = logging.getLogger(__name__) + + +class SimpleRadio: + related_object_field = None + + def clean(self, instance): + return + + def weighted_pick( + self, + choices: List[Tuple[int, int]], + previous_choices: Optional[List[int]] = None, + ) -> int: + total = sum(weight for c, weight in choices) + r = random.uniform(0, total) + upto = 0 + for choice, weight in choices: + if upto + weight >= r: + return choice + upto += weight + + +class SessionRadio(SimpleRadio): + def __init__(self, session=None): + self.session = session + + def start_session(self, user, **kwargs): + self.session = models.RadioSession.objects.create( + user=user, radio_type=self.radio_type, **kwargs + ) + return self.session + + def get_queryset(self, **kwargs): + actor = None + try: + actor = self.session.user.actor + except KeyError: + pass # Maybe logging would be helpful + + qs = ( + Track.objects.all() + .with_playable_uploads(actor=actor) + .select_related("artist", "album__artist", "attributed_to") + ) + + query = moderation_filters.get_filtered_content_query( + config=moderation_filters.USER_FILTER_CONFIG["TRACK"], + user=self.session.user, + ) + return qs.exclude(query) + + def get_queryset_kwargs(self): + return {} + + def filter_queryset(self, queryset): + return queryset + + def filter_from_session(self, queryset): + already_played = self.session.session_tracks.all().values_list( + "track", flat=True + ) + queryset = queryset.exclude(pk__in=already_played) + return queryset + + def cache_batch_radio_track(self, **kwargs): + BATCH_SIZE = 100 + # get cached RadioTracks if any + try: + cached_evaluated_radio_tracks = pickle.loads( + cache.get(f"radiotracks{self.session.id}") + ) + except TypeError: + cached_evaluated_radio_tracks = None + + # get the queryset and apply filters + kwargs.update(self.get_queryset_kwargs()) + queryset = self.get_queryset(**kwargs) + queryset = self.filter_from_session(queryset) + + if kwargs["filter_playable"] is True: + queryset = queryset.playable_by( + self.session.user.actor if self.session.user else None + ) + queryset = self.filter_queryset(queryset) + + # select a random batch of the qs + sliced_queryset = queryset.order_by("?")[:BATCH_SIZE] + if len(sliced_queryset) <= 0 and not cached_evaluated_radio_tracks: + raise ValueError("No more radio candidates") + + # create the radio session tracks into db in bulk + self.session.add(sliced_queryset) + + # evaluate the queryset to save it in cache + radio_tracks = list(sliced_queryset) + + if cached_evaluated_radio_tracks is not None: + radio_tracks.extend(cached_evaluated_radio_tracks) + logger.info( + f"Setting redis cache for radio generation with radio id {self.session.id}" + ) + cache.set(f"radiotracks{self.session.id}", pickle.dumps(radio_tracks), 3600) + cache.set(f"radioqueryset{self.session.id}", sliced_queryset, 3600) + + return sliced_queryset + + def get_choices(self, quantity, **kwargs): + if cache.get(f"radiotracks{self.session.id}"): + cached_radio_tracks = pickle.loads( + cache.get(f"radiotracks{self.session.id}") + ) + logger.info("Using redis cache for radio generation") + radio_tracks = cached_radio_tracks + if len(radio_tracks) < quantity: + logger.info( + "Not enough radio tracks in cache. Trying to generate new cache" + ) + sliced_queryset = self.cache_batch_radio_track(**kwargs) + sliced_queryset = cache.get(f"radioqueryset{self.session.id}") + else: + sliced_queryset = self.cache_batch_radio_track(**kwargs) + + return sliced_queryset[:quantity] + + def pick_many(self, quantity, **kwargs): + if self.session: + sliced_queryset = self.get_choices(quantity=quantity, **kwargs) + else: + logger.info( + "No radio session. Can't track user playback. Won't cache queryset results" + ) + sliced_queryset = self.get_choices(quantity=quantity, **kwargs) + + return sliced_queryset + + def validate_session(self, data, **context): + return data + + +@registry.register(name="random") +class RandomRadio(SessionRadio): + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + return qs.filter(artist__content_category="music").order_by("?") + + +@registry.register(name="random_library") +class RandomLibraryRadio(SessionRadio): + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + tracks_ids = self.session.user.actor.attributed_tracks.all().values_list( + "id", flat=True + ) + query = Q(artist__content_category="music") & Q(pk__in=tracks_ids) + return qs.filter(query).order_by("?") + + +@registry.register(name="favorites") +class FavoritesRadio(SessionRadio): + def get_queryset_kwargs(self): + kwargs = super().get_queryset_kwargs() + if self.session: + kwargs["user"] = self.session.user + return kwargs + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + track_ids = kwargs["user"].track_favorites.all().values_list("track", flat=True) + return qs.filter(pk__in=track_ids, artist__content_category="music") + + +@registry.register(name="custom") +class CustomRadio(SessionRadio): + def get_queryset_kwargs(self): + kwargs = super().get_queryset_kwargs() + kwargs["user"] = self.session.user + kwargs["custom_radio"] = self.session.custom_radio + return kwargs + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + return filters.run(kwargs["custom_radio"].config, candidates=qs) + + def validate_session(self, data, **context): + data = super().validate_session(data, **context) + try: + user = data["user"] + except KeyError: + user = context.get("user") + try: + assert data["custom_radio"].user == user or data["custom_radio"].is_public + except KeyError: + raise serializers.ValidationError("You must provide a custom radio") + except AssertionError: + raise serializers.ValidationError("You don't have access to this radio") + return data + + +@registry.register(name="custom_multiple") +class CustomMultiple(SessionRadio): + """ + Receive a vuejs generated config and use it to launch a radio session + """ + + config = serializers.JSONField(required=True) + + def get_config(self, data): + return data["config"] + + def get_queryset_kwargs(self): + kwargs = super().get_queryset_kwargs() + kwargs["config"] = self.session.config + return kwargs + + def validate_session(self, data, **context): + data = super().validate_session(data, **context) + try: + data["config"] is not None + except KeyError: + raise serializers.ValidationError( + "You must provide a configuration for this radio" + ) + return data + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + return filters.run([kwargs["config"]], candidates=qs) + + +class RelatedObjectRadio(SessionRadio): + """Abstract radio related to an object (tag, artist, user...)""" + + related_object_field = serializers.IntegerField(required=True) + + def clean(self, instance): + super().clean(instance) + if not instance.related_object: + raise ValidationError( + "Cannot start RelatedObjectRadio without related object" + ) + if not isinstance(instance.related_object, self.model): + raise ValidationError("Trying to start radio with bad related object") + + def get_related_object(self, pk): + return self.model.objects.get(pk=pk) + + +@registry.register(name="tag") +class TagRadio(RelatedObjectRadio): + model = Tag + related_object_field = serializers.CharField(required=True) + + def get_related_object(self, name): + return self.model.objects.get(name=name) + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + query = ( + Q(tagged_items__tag=self.session.related_object) + | Q(artist__tagged_items__tag=self.session.related_object) + | Q(album__tagged_items__tag=self.session.related_object) + ) + return qs.filter(query) + + def get_related_object_id_repr(self, obj): + return obj.name + + +def weighted_choice(choices): + total = sum(w for c, w in choices) + r = random.uniform(0, total) + upto = 0 + for c, w in choices: + if upto + w >= r: + return c + upto += w + assert False, "Shouldn't get here" + + +class NextNotFound(Exception): + pass + + +@registry.register(name="similar") +class SimilarRadio(RelatedObjectRadio): + model = Track + + def filter_queryset(self, queryset): + queryset = super().filter_queryset(queryset) + seeds = list( + self.session.session_tracks.all() + .values_list("track_id", flat=True) + .order_by("-id")[:3] + ) + [self.session.related_object.pk] + for seed in seeds: + try: + return queryset.filter(pk=self.find_next_id(queryset, seed)) + except NextNotFound: + continue + + return queryset.none() + + def find_next_id(self, queryset, seed): + with connection.cursor() as cursor: + query = """ + SELECT next, count(next) AS c + FROM ( + SELECT + track_id, + creation_date, + LEAD(track_id) OVER ( + PARTITION by user_id order by creation_date asc + ) AS next + FROM history_listening + INNER JOIN users_user ON (users_user.id = user_id) + WHERE users_user.privacy_level = 'instance' OR users_user.privacy_level = 'everyone' OR user_id = %s + ORDER BY creation_date ASC + ) t WHERE track_id = %s AND next != %s GROUP BY next ORDER BY c DESC; + """ + cursor.execute(query, [self.session.user_id, seed, seed]) + next_candidates = list(cursor.fetchall()) + + if not next_candidates: + raise NextNotFound() + + matching_tracks = list( + queryset.filter(pk__in=[c[0] for c in next_candidates]).values_list( + "id", flat=True + ) + ) + next_candidates = [n for n in next_candidates if n[0] in matching_tracks] + if not next_candidates: + raise NextNotFound() + return random.choice([c[0] for c in next_candidates]) + + +@registry.register(name="artist") +class ArtistRadio(RelatedObjectRadio): + model = Artist + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + return qs.filter(artist=self.session.related_object) + + +@registry.register(name="less-listened") +class LessListenedRadio(SessionRadio): + def clean(self, instance): + instance.related_object = instance.user + super().clean(instance) + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + listened = self.session.user.listenings.all().values_list("track", flat=True) + return ( + qs.filter(artist__content_category="music") + .exclude(pk__in=listened) + .order_by("?") + ) + + +@registry.register(name="less-listened_library") +class LessListenedLibraryRadio(SessionRadio): + def clean(self, instance): + instance.related_object = instance.user + super().clean(instance) + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + listened = self.session.user.listenings.all().values_list("track", flat=True) + tracks_ids = self.session.user.actor.attributed_tracks.all().values_list( + "id", flat=True + ) + query = Q(artist__content_category="music") & Q(pk__in=tracks_ids) + return qs.filter(query).exclude(pk__in=listened).order_by("?") + + +@registry.register(name="actor-content") +class ActorContentRadio(RelatedObjectRadio): + """ + Play content from given actor libraries + """ + + model = federation_models.Actor + related_object_field = federation_fields.ActorRelatedField(required=True) + + def get_related_object(self, value): + return value + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + actor_uploads = Upload.objects.filter( + library__actor=self.session.related_object, + ) + return qs.filter(pk__in=actor_uploads.values("track")) + + def get_related_object_id_repr(self, obj): + return obj.full_username + + +@registry.register(name="library") +class LibraryRadio(RelatedObjectRadio): + """ + Play content from a given library + """ + + model = Library + related_object_field = serializers.UUIDField(required=True) + + def get_related_object(self, value): + return Library.objects.get(uuid=value) + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + actor_uploads = Upload.objects.filter( + library=self.session.related_object, + ) + return qs.filter(pk__in=actor_uploads.values("track")) + + def get_related_object_id_repr(self, obj): + return obj.uuid + + +@registry.register(name="recently-added") +class RecentlyAdded(SessionRadio): + def get_queryset(self, **kwargs): + date = datetime.date.today() - datetime.timedelta(days=30) + qs = super().get_queryset(**kwargs) + return qs.filter( + Q(artist__content_category="music"), + Q(creation_date__gt=date), + ) + + +# Use this to experiment on the custom multiple radio with troi +@registry.register(name="troi") +class Troi(SessionRadio): + """ + Receive a vuejs generated config and use it to launch a troi radio session. + The config data should follow : + {"patch": "troi_patch_name", "troi_arg1":"troi_arg_1", "troi_arg2": ...} + Validation of the config (args) is done by troi during track fetch. + Funkwhale only checks if the patch is implemented + """ + + config = serializers.JSONField(required=True) + + def append_lb_config(self, data): + if self.session.user.settings is None: + logger.warning( + "No lb_user_name set in user settings. Some troi patches will fail" + ) + return data + elif self.session.user.settings.get("lb_user_name") is None: + logger.warning( + "No lb_user_name set in user settings. Some troi patches will fail" + ) + else: + data["user_name"] = self.session.user.settings["lb_user_name"] + + if self.session.user.settings.get("lb_user_token") is None: + logger.warning( + "No lb_user_token set in user settings. Some troi patch will fail" + ) + else: + data["user_token"] = self.session.user.settings["lb_user_token"] + + return data + + def get_queryset_kwargs(self): + kwargs = super().get_queryset_kwargs() + kwargs["config"] = self.session.config + return kwargs + + def validate_session(self, data, **context): + data = super().validate_session(data, **context) + if data.get("config") is None: + raise serializers.ValidationError( + "You must provide a configuration for this radio" + ) + return data + + def get_queryset(self, **kwargs): + qs = super().get_queryset(**kwargs) + config = self.append_lb_config(json.loads(kwargs["config"])) + + return lb_recommendations.run(config, candidates=qs) diff --git a/api/funkwhale_api/radios/registries_v2.py b/api/funkwhale_api/radios/registries_v2.py new file mode 100644 index 000000000..6cd16f206 --- /dev/null +++ b/api/funkwhale_api/radios/registries_v2.py @@ -0,0 +1,10 @@ +import persisting_theory + + +class RadioRegistry_v2(persisting_theory.Registry): + def prepare_name(self, data, name=None): + setattr(data, "radio_type", name) + return name + + +registry = RadioRegistry_v2() diff --git a/api/funkwhale_api/radios/serializers.py b/api/funkwhale_api/radios/serializers.py index 76e847d9e..16886f818 100644 --- a/api/funkwhale_api/radios/serializers.py +++ b/api/funkwhale_api/radios/serializers.py @@ -40,9 +40,11 @@ class RadioSerializer(serializers.ModelSerializer): class RadioSessionTrackSerializerCreate(serializers.ModelSerializer): + count = serializers.IntegerField(required=False, allow_null=True) + class Meta: model = models.RadioSessionTrack - fields = ("session",) + fields = ("session", "count") class RadioSessionTrackSerializer(serializers.ModelSerializer): diff --git a/api/funkwhale_api/radios/urls.py b/api/funkwhale_api/radios/urls.py index 4890b953f..7f1e3864b 100644 --- a/api/funkwhale_api/radios/urls.py +++ b/api/funkwhale_api/radios/urls.py @@ -5,7 +5,7 @@ from . import views router = routers.OptionalSlashRouter() router.register(r"sessions", views.RadioSessionViewSet, "sessions") router.register(r"radios", views.RadioViewSet, "radios") -router.register(r"tracks", views.RadioSessionTrackViewSet, "tracks") +router.register(r"tracks", views.V1_RadioSessionTrackViewSet, "tracks") urlpatterns = router.urls diff --git a/api/funkwhale_api/radios/urls_v2.py b/api/funkwhale_api/radios/urls_v2.py new file mode 100644 index 000000000..bac76f998 --- /dev/null +++ b/api/funkwhale_api/radios/urls_v2.py @@ -0,0 +1,10 @@ +from funkwhale_api.common import routers + +from . import views + +router = routers.OptionalSlashRouter() + +router.register(r"sessions", views.V2_RadioSessionViewSet, "sessions") + + +urlpatterns = router.urls diff --git a/api/funkwhale_api/radios/views.py b/api/funkwhale_api/radios/views.py index adf2fe464..07138ee35 100644 --- a/api/funkwhale_api/radios/views.py +++ b/api/funkwhale_api/radios/views.py @@ -1,3 +1,6 @@ +import pickle + +from django.core.cache import cache from django.db.models import Q from drf_spectacular.utils import extend_schema from rest_framework import mixins, status, viewsets @@ -121,7 +124,7 @@ class RadioSessionViewSet( return context -class RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet): +class V1_RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet): serializer_class = serializers.RadioSessionTrackSerializer queryset = models.RadioSessionTrack.objects.all() permission_classes = [] @@ -133,21 +136,19 @@ class RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet) session = serializer.validated_data["session"] if not request.user.is_authenticated and not request.session.session_key: self.request.session.create() - try: - assert (request.user == session.user) or ( - request.session.session_key == session.session_key - and session.session_key - ) - except AssertionError: + if not request.user == session.user or ( + not request.session.session_key == session.session_key + and not session.session_key + ): return Response(status=status.HTTP_403_FORBIDDEN) + try: - session.radio.pick() + session.radio(api_version=1).pick() except ValueError: return Response( "Radio doesn't have more candidates", status=status.HTTP_404_NOT_FOUND ) session_track = session.session_tracks.all().latest("id") - # self.perform_create(serializer) # dirty override here, since we use a different serializer for creation and detail serializer = self.serializer_class( instance=session_track, context=self.get_serializer_context() @@ -161,3 +162,99 @@ class RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet) if self.action == "create": return serializers.RadioSessionTrackSerializerCreate return super().get_serializer_class(*args, **kwargs) + + +class V2_RadioSessionViewSet( + mixins.CreateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet +): + """Returns a list of RadioSessions""" + + serializer_class = serializers.RadioSessionSerializer + queryset = models.RadioSession.objects.all() + permission_classes = [] + + @action(detail=True, serializer_class=serializers.RadioSessionTrackSerializerCreate) + def tracks(self, request, pk, *args, **kwargs): + data = {"session": pk} + data["count"] = ( + request.query_params["count"] + if "count" in request.query_params.keys() + else 1 + ) + serializer = serializers.RadioSessionTrackSerializerCreate(data=data) + serializer.is_valid(raise_exception=True) + session = serializer.validated_data["session"] + + count = int(data["count"]) + # this is used for test purpose. + filter_playable = ( + request.query_params["filter_playable"] + if "filter_playable" in request.query_params.keys() + else True + ) + if not request.user.is_authenticated and not request.session.session_key: + self.request.session.create() + + if not request.user == session.user or ( + not request.session.session_key == session.session_key + and not session.session_key + ): + return Response(status=status.HTTP_403_FORBIDDEN) + try: + from . import radios_v2 # noqa + + session.radio(api_version=2).pick_many( + count, filter_playable=filter_playable + ) + except ValueError: + return Response( + "Radio doesn't have more candidates", status=status.HTTP_404_NOT_FOUND + ) + + # dirty override here, since we use a different serializer for creation and detail + evaluated_radio_tracks = pickle.loads(cache.get(f"radiotracks{session.id}")) + batch = evaluated_radio_tracks[:count] + serializer = TrackSerializer( + data=batch, + many="true", + ) + serializer.is_valid() + + # delete the tracks we sent from the cache + new_cached_radiotracks = evaluated_radio_tracks[count:] + cache.set(f"radiotracks{session.id}", pickle.dumps(new_cached_radiotracks)) + + return Response( + serializer.data, + status=status.HTTP_201_CREATED, + ) + + def get_queryset(self): + queryset = super().get_queryset() + if self.request.user.is_authenticated: + return queryset.filter( + Q(user=self.request.user) + | Q(session_key=self.request.session.session_key) + ) + + return queryset.filter(session_key=self.request.session.session_key).exclude( + session_key=None + ) + + def perform_create(self, serializer): + if ( + not self.request.user.is_authenticated + and not self.request.session.session_key + ): + self.request.session.create() + return serializer.save( + user=self.request.user if self.request.user.is_authenticated else None, + session_key=self.request.session.session_key, + ) + + def get_serializer_context(self): + context = super().get_serializer_context() + context["user"] = ( + self.request.user if self.request.user.is_authenticated else None + ) + return context diff --git a/api/funkwhale_api/typesense/__init__.py b/api/funkwhale_api/typesense/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/api/funkwhale_api/typesense/factories.py b/api/funkwhale_api/typesense/factories.py new file mode 100644 index 000000000..006298f50 --- /dev/null +++ b/api/funkwhale_api/typesense/factories.py @@ -0,0 +1,111 @@ +from troi import Artist, Element, Playlist, Recording +from troi.patch import Patch + +recording_list = [ + Recording( + name="I Want It That Way", + mbid="87dfa566-21c3-45ed-bc42-1d345b8563fa", + artist=Artist(name="artist_name"), + ), + Recording(name="Untouchable", artist=Artist(name="Another lol")), + Recording( + name="The Perfect Kiss", + mbid="ec0da94e-fbfe-4eb0-968e-024d4c32d1d0", + artist=Artist(name="artist_name2"), + ), + Recording( + name="Love Your Voice", + mbid="93726547-f8c0-4efd-8e16-d2dee76500f6", + artist=Artist(name="artist_name"), + ), + Recording( + name="Hall of Fame", + mbid="395bd5a1-79cc-4e04-8869-ca9eabc78d09", + artist=Artist(name="artist_name_3"), + ), +] + + +class DummyElement(Element): + """Dummy element that returns a fixed playlist for testing""" + + @staticmethod + def outputs(): + return [Playlist] + + def read(self, sources): + recordings = recording_list + + return [ + Playlist( + name="Test Export Playlist", + description="A playlist to test exporting playlists to spotify", + recordings=recordings, + ) + ] + + +class DummyPatch(Patch): + """Dummy patch that always returns a fixed set of recordings for testing""" + + @staticmethod + def slug(): + return "test-patch" + + def create(self, inputs): + return DummyElement() + + @staticmethod + def outputs(): + return [Recording] + + +recommended_recording_mbids = [ + "87dfa566-21c3-45ed-bc42-1d345b8563fa", + "ec0da94e-fbfe-4eb0-968e-024d4c32d1d0", + "93726547-f8c0-4efd-8e16-d2dee76500f6", + "395bd5a1-79cc-4e04-8869-ca9eabc78d09", +] + +typesense_search_result = { + "facet_counts": [], + "found": 1, + "out_of": 1, + "page": 1, + "request_params": { + "collection_name": "canonical_fw_data", + "per_page": 10, + "q": "artist_nameiwantitthatway", + }, + "search_time_ms": 1, + "hits": [ + { + "highlights": [ + { + "field": "combined", + "snippet": "string", + "matched_tokens": ["string"], + } + ], + "document": { + "pk": "1", + "combined": "artist_nameiwantitthatway", + }, + "text_match": 130916, + }, + { + "highlights": [ + { + "field": "combined", + "snippet": "string", + "matched_tokens": ["string"], + } + ], + "document": { + "pk": "2", + "combined": "artist_nameiwantitthatway", + }, + "text_match": 130916, + }, + ], +} diff --git a/api/funkwhale_api/typesense/tasks.py b/api/funkwhale_api/typesense/tasks.py new file mode 100644 index 000000000..febb96eea --- /dev/null +++ b/api/funkwhale_api/typesense/tasks.py @@ -0,0 +1,108 @@ +import logging + +from django.conf import settings + +from funkwhale_api.music import models as music_models +from funkwhale_api.taskapp import celery + +from . import utils + +logger = logging.getLogger(__name__) + + +class TypesenseNotActivate(Exception): + pass + + +if not settings.TYPESENSE_API_KEY: + logger.info( + "Typesense is not activated. You can enable it by setting the TYPESENSE_API_KEY env variable." + ) +else: + import typesense + from typesense.exceptions import ObjectAlreadyExists + + +api_key = settings.TYPESENSE_API_KEY +host = settings.TYPESENSE_HOST +port = settings.TYPESENSE_PORT +protocol = settings.TYPESENSE_PROTOCOL + +collection_name = "canonical_fw_data" +BATCH_SIZE = 10000 + + +@celery.app.task(name="typesense.add_tracks_to_index") +def add_tracks_to_index(tracks_pk): + """ + This will add fw tracks data to the typesense index. It will concatenate the artist name + and the track title into one string. + """ + + client = typesense.Client( + { + "api_key": api_key, + "nodes": [{"host": host, "port": port, "protocol": protocol}], + "connection_timeout_seconds": 2, + } + ) + + try: + logger.info(f"Updating index {collection_name}") + tracks = music_models.Track.objects.all().filter(pk__in=tracks_pk) + documents = [] + for track in tracks: + document = dict() + document["pk"] = track.pk + document["combined"] = utils.delete_non_alnum_characters( + track.artist.name + track.title + ) + documents.append(document) + + client.collections[collection_name].documents.import_( + documents, {"action": "upsert"} + ) + + except typesense.exceptions.TypesenseClientError as err: + logger.error(f"Can't build index: {str(err)}") + + +@celery.app.task(name="typesense.build_canonical_index") +def build_canonical_index(): + if not settings.TYPESENSE_API_KEY: + raise TypesenseNotActivate( + "Typesense is not activated. You can enable it by setting the TYPESENSE_API_KEY env variable." + ) + + schema = { + "name": collection_name, + "fields": [ + {"name": "combined", "type": "string"}, + {"name": "pk", "type": "int32"}, + ], + "default_sorting_field": "pk", + } + client = typesense.Client( + { + "api_key": api_key, + "nodes": [{"host": host, "port": port, "protocol": protocol}], + "connection_timeout_seconds": 2, + } + ) + try: + client.collections.create(schema) + except ObjectAlreadyExists: + pass + + tracks = music_models.Track.objects.all().values_list("pk", flat=True) + total_tracks = tracks.count() + total_batches = (total_tracks - 1) // BATCH_SIZE + 1 + + for i in range(total_batches): + start_index = i * BATCH_SIZE + end_index = (i + 1) * (BATCH_SIZE - 1) + batch_tracks = tracks[start_index:end_index] + logger.info( + f"Launching async task to add {str(batch_tracks)} tracks pks to index" + ) + add_tracks_to_index.delay(list(batch_tracks)) diff --git a/api/funkwhale_api/typesense/utils.py b/api/funkwhale_api/typesense/utils.py new file mode 100644 index 000000000..4e2d4b70d --- /dev/null +++ b/api/funkwhale_api/typesense/utils.py @@ -0,0 +1,92 @@ +import logging +import re + +import unidecode +from django.conf import settings +from django.core.cache import cache +from lb_matching_tools.cleaner import MetadataCleaner + +from funkwhale_api.music import models as music_models + +logger = logging.getLogger(__name__) + +api_key = settings.TYPESENSE_API_KEY +host = settings.TYPESENSE_HOST +port = settings.TYPESENSE_PORT +protocol = settings.TYPESENSE_PROTOCOL +TYPESENSE_NUM_TYPO = settings.TYPESENSE_NUM_TYPO + + +class TypesenseNotActivate(Exception): + pass + + +if not settings.TYPESENSE_API_KEY: + logger.info( + "Typesense is not activated. You can enable it by setting the TYPESENSE_API_KEY env variable." + ) +else: + import typesense + + +def delete_non_alnum_characters(text): + return unidecode.unidecode(re.sub(r"[^\w]+", "", text).lower()) + + +def resolve_recordings_to_fw_track(recordings): + """ + Tries to match a troi recording entity to a fw track using the typesense index. + It will save the results in the match_mbid attribute of the Track table. + For test purposes : if multiple fw tracks are returned, we log the information + but only keep the best result in db to avoid duplicates. + """ + + if not settings.TYPESENSE_API_KEY: + raise TypesenseNotActivate( + "Typesense is not activated. You can enable it by setting the TYPESENSE_API_KEY env variable." + ) + + client = typesense.Client( + { + "api_key": api_key, + "nodes": [{"host": host, "port": port, "protocol": protocol}], + "connection_timeout_seconds": 2, + } + ) + + mc = MetadataCleaner() + + for recording in recordings: + rec = mc.clean_recording(recording.name) + artist = mc.clean_artist(recording.artist.name) + canonical_name_for_track = delete_non_alnum_characters(artist + rec) + + logger.debug(f"Trying to resolve : {canonical_name_for_track}") + + search_parameters = { + "q": canonical_name_for_track, + "query_by": "combined", + "num_typos": TYPESENSE_NUM_TYPO, + "drop_tokens_threshold": 0, + } + matches = client.collections["canonical_fw_data"].documents.search( + search_parameters + ) + + if matches["hits"]: + hit = matches["hits"][0] + pk = hit["document"]["pk"] + logger.debug(f"Saving match for track with primary key {pk}") + cache.set(recording.mbid, pk) + + if settings.DEBUG and matches["hits"][1]: + for hit in matches["hits"][1:]: + pk = hit["document"]["pk"] + fw_track = music_models.Track.objects.get(pk=pk) + logger.info( + f"Duplicate match found for {fw_track.artist.name} {fw_track.title} \ + and primary key {pk}. Skipping because of better match." + ) + else: + logger.debug("No match found in fw db") + return cache.get_many([rec.mbid for rec in recordings]) diff --git a/api/funkwhale_api/users/factories.py b/api/funkwhale_api/users/factories.py index e8b785bb5..aa1ab4ca5 100644 --- a/api/funkwhale_api/users/factories.py +++ b/api/funkwhale_api/users/factories.py @@ -1,5 +1,6 @@ +import sys + import factory -import pytz from django.contrib.auth.models import Permission from django.utils import timezone @@ -7,6 +8,11 @@ from funkwhale_api.factories import ManyToManyFromList, NoUpdateOnCreate, regist from . import models +if sys.version_info < (3, 9): + from backports.zoneinfo import ZoneInfo +else: + from zoneinfo import ZoneInfo + @registry.register class GroupFactory(NoUpdateOnCreate, factory.django.DjangoModelFactory): @@ -159,7 +165,7 @@ class GrantFactory(factory.django.DjangoModelFactory): class AccessTokenFactory(factory.django.DjangoModelFactory): application = factory.SubFactory(ApplicationFactory) user = factory.SubFactory(UserFactory) - expires = factory.Faker("future_datetime", tzinfo=pytz.UTC) + expires = factory.Faker("future_datetime", tzinfo=ZoneInfo("UTC")) token = factory.Faker("uuid4") scope = "read" diff --git a/api/poetry.lock b/api/poetry.lock index a6fdba08a..b788a42cf 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. [[package]] name = "aiohttp" @@ -99,12 +99,10 @@ files = [ [package.dependencies] aiosignal = ">=1.1.2" async-timeout = ">=4.0.0a3,<5.0" -asynctest = {version = "0.13.0", markers = "python_version < \"3.8\""} attrs = ">=17.3.0" charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} yarl = ">=1.0,<2.0" [package.extras] @@ -154,25 +152,24 @@ vine = ">=5.0.0,<6.0.0" [[package]] name = "anyio" -version = "3.7.1" +version = "4.1.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, + {file = "anyio-4.1.0-py3-none-any.whl", hash = "sha256:56a415fbc462291813a94528a779597226619c8e78af7de0507333f700011e5f"}, + {file = "anyio-4.1.0.tar.gz", hash = "sha256:5a0bec7085176715be77df87fc66d6c9d70626bd752fcc85f57cdbee5b3760da"}, ] [package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "appnope" @@ -198,7 +195,6 @@ files = [ [package.dependencies] python-dateutil = ">=2.7.0" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "asgiref" @@ -217,6 +213,25 @@ typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} [package.extras] tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] +[[package]] +name = "astroid" +version = "2.15.8" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.7.2" +files = [ + {file = "astroid-2.15.8-py3-none-any.whl", hash = "sha256:1aa149fc5c6589e3d0ece885b4491acd80af4f087baafa3fb5203b113e68cd3c"}, + {file = "astroid-2.15.8.tar.gz", hash = "sha256:6c107453dffee9055899705de3c9ead36e74119cee151e5a9aaf7f0b0e020a6a"}, +] + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] + [[package]] name = "async-timeout" version = "4.0.3" @@ -228,9 +243,6 @@ files = [ {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] -[package.dependencies] -typing-extensions = {version = ">=3.6.5", markers = "python_version < \"3.8\""} - [[package]] name = "asynctest" version = "0.13.0" @@ -253,9 +265,6 @@ files = [ {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, ] -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] dev = ["attrs[docs,tests]", "pre-commit"] @@ -320,6 +329,34 @@ files = [ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] +[[package]] +name = "backports-zoneinfo" +version = "0.2.1" +description = "Backport of the standard library zoneinfo module" +optional = false +python-versions = ">=3.6" +files = [ + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, + {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, +] + +[package.extras] +tzdata = ["tzdata"] + [[package]] name = "billiard" version = "3.6.4.0" @@ -333,32 +370,45 @@ files = [ [[package]] name = "black" -version = "22.12.0" +version = "23.3.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.7" files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] @@ -424,17 +474,6 @@ urllib3 = ">=1.25.4,<1.27" [package.extras] crt = ["awscrt (==0.16.9)"] -[[package]] -name = "cached-property" -version = "1.5.2" -description = "A decorator for caching properties in classes." -optional = false -python-versions = "*" -files = [ - {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, - {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, -] - [[package]] name = "cachetools" version = "5.3.2" @@ -463,7 +502,6 @@ click = ">=8.0.3,<9.0" click-didyoumean = ">=0.0.3" click-plugins = ">=1.1.1" click-repl = ">=0.2.0" -importlib-metadata = {version = ">=1.4.0", markers = "python_version < \"3.8\""} kombu = ">=5.2.3,<6.0" pytz = ">=2021.3" vine = ">=5.0.0,<6.0" @@ -503,86 +541,74 @@ zstd = ["zstandard"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -741,7 +767,6 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "click-didyoumean" @@ -805,13 +830,23 @@ files = [ [[package]] name = "constantly" -version = "15.1.0" +version = "23.10.4" description = "Symbolic constants in Python" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "constantly-15.1.0-py2.py3-none-any.whl", hash = "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d"}, - {file = "constantly-15.1.0.tar.gz", hash = "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"}, + {file = "constantly-23.10.4-py3-none-any.whl", hash = "sha256:3fd9b4d1c3dc1ec9757f3c52aef7e53ad9323dbe39f51dfd4c43853b68dfa3f9"}, + {file = "constantly-23.10.4.tar.gz", hash = "sha256:aa92b70a33e2ac0bb33cd745eb61776594dc48764b06c35e0efd050b7f1c7cbd"}, +] + +[[package]] +name = "countryinfo" +version = "0.1.2" +description = "countryinfo is a python module for returning data about countries, ISO info and states/provinces within them." +optional = false +python-versions = ">3.0.0" +files = [ + {file = "countryinfo-0.1.2-py3-none-any.whl", hash = "sha256:fd518b3fd8899f6520518320ac17b67bf410c7db5044c61cb191f802bb85c34d"}, ] [[package]] @@ -1010,6 +1045,20 @@ wrapt = ">=1.10,<2" [package.extras] dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +[[package]] +name = "dill" +version = "0.3.7" +description = "serialize all of Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + [[package]] name = "dj-rest-auth" version = "2.2.8" @@ -1194,6 +1243,20 @@ develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "py docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] +[[package]] +name = "django-extensions" +version = "3.2.3" +description = "Extensions for Django" +optional = false +python-versions = ">=3.6" +files = [ + {file = "django-extensions-3.2.3.tar.gz", hash = "sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a"}, + {file = "django_extensions-3.2.3-py3-none-any.whl", hash = "sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401"}, +] + +[package.dependencies] +Django = ">=3.2" + [[package]] name = "django-filter" version = "22.1" @@ -1297,13 +1360,13 @@ pytz = "*" [[package]] name = "drf-spectacular" -version = "0.25.1" +version = "0.26.5" description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" optional = false python-versions = ">=3.6" files = [ - {file = "drf-spectacular-0.25.1.tar.gz", hash = "sha256:789696f9845ef2397c52f66154aec6d96411baf6aa09a5d40c5f0b0e99f6b3d8"}, - {file = "drf_spectacular-0.25.1-py3-none-any.whl", hash = "sha256:d58684e702f5ad436c5bd1735d46df0e123e64de883092d38f1debb9fa4a03c9"}, + {file = "drf-spectacular-0.26.5.tar.gz", hash = "sha256:aee55330a774ba8a9cbdb125714d1c9ee05a8aafd3ce3be8bfd26527649aeb44"}, + {file = "drf_spectacular-0.26.5-py3-none-any.whl", hash = "sha256:c0002a820b11771fdbf37853deb371947caf0159d1afeeffe7598e964bc1db94"}, ] [package.dependencies] @@ -1312,7 +1375,6 @@ djangorestframework = ">=3.10.3" inflection = ">=0.3.1" jsonschema = ">=2.6.0" PyYAML = ">=5.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} uritemplate = ">=2.0.0" [package.extras] @@ -1321,13 +1383,13 @@ sidecar = ["drf-spectacular-sidecar"] [[package]] name = "exceptiongroup" -version = "1.1.3" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] @@ -1364,7 +1426,6 @@ files = [ [package.dependencies] python-dateutil = ">=2.4" -typing-extensions = {version = ">=3.10.0.1", markers = "python_version < \"3.8\""} [[package]] name = "feedparser" @@ -1392,138 +1453,124 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.7.0,<2.8.0" pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "frozendict" -version = "2.3.8" +version = "2.3.10" description = "A simple immutable dictionary" optional = false python-versions = ">=3.6" files = [ - {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, - {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:750632cc890d8ee9484fe6d31b261159144b6efacc08e1317fe46accd1410373"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ee5fe2658a8ac9a57f748acaf563f6a47f80b8308cbf0a04fac0ba057d41f75"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23c4bb46e6b8246e1e7e49b5593c2bc09221db0d8f31f7c092be8dfb42b9e620"}, - {file = "frozendict-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:c31abc8acea309b132dde441856829f6003a3d242da8b54bce4c0f2a3c8c63f0"}, - {file = "frozendict-2.3.8-cp310-cp310-win_arm64.whl", hash = "sha256:9ea5520e85447ff8d4681e181941e482662817ccba921b7cb3f87922056d892a"}, - {file = "frozendict-2.3.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f83fed36497af9562ead5e9fb8443224ba2781786bd3b92b1087cb7d0ff20135"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27c5c1d29d0eda7979253ec88abc239da1313b38f39f4b16984db3b3e482300"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c785de7f1a13f15963945f400656b18f057c2fc76c089dacf127a2bb188c03"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8cf35ddd25513428ec152614def9696afb93ae5ec0eb54fa6aa6206eda77ac4c"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ffc684773de7c88724788fa9787d0016fd75830412d58acbd9ed1a04762c675b"}, - {file = "frozendict-2.3.8-cp36-cp36m-win_amd64.whl", hash = "sha256:4c258aab9c8488338634f2ec670ef049dbf0ab0e7a2fa9bc2c7b5009cb614801"}, - {file = "frozendict-2.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47fc26468407fdeb428cfc89495b7921419e670355c21b383765482fdf6c5c14"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea638228692db2bf94bce40ea4b25f4077588497b516bd16576575560094bd9"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a75bf87e76c4386caecdbdd02a99e53ad43a6b5c38fb3d5a634a9fc9ce41462"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed5a6c5c7a0f57269577c2a338a6002949aea21a23b7b7d06da7e7dced8b605b"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d086440328a465dea9bef2dbad7548d75d1a0a0d21f43a08c03e1ec79ac5240e"}, - {file = "frozendict-2.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:0bc4767e2f83db5b701c787e22380296977368b0c57e485ca71b2eedfa11c4a3"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:638cf363d3cbca31a341503cf2219eac52a5f5140449676fae3d9644cd3c5487"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b2fd8ce36277919b36e3c834d2389f3cd7ac068ae730c312671dd4439a5dd65"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3957d52f1906b0c85f641a1911d214255873f6408ab4e5ad657cc27a247fb145"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72cfe08ab8ae524e54848fa90b22d02c1b1ecfb3064438696bcaa4b953f18772"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4742e76c4111bd09198d3ab66cef94be8506212311338f9182d6ef5f5cb60493"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:313ed8d9ba6bac35d7635cd9580ee5721a0fb016f4d2d20f0efa05dbecbdb1be"}, - {file = "frozendict-2.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:d3c6ce943946c2a61501c8cf116fff0892d11dd579877eb36e2aea2c27fddfef"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0f573dc4861dd7ec9e055c8cceaf45355e894e749f621f199aab7b311ac4bdb"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b3435e5f1ca5ae68a5e95e64b09d6d5c645cadd6b87569a0b3019dd248c8d00"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145afd033ebfade28416093335261b8ec1af5cccc593482309e7add062ec8668"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da98427de26b5a2865727947480cbb53860089c4d195baa29c539da811cea617"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e82befa7c385a668d569cebbebbdf49cee6fea4083f08e869a1b08cfb640a9f"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80abe81d36e889ceec665e06ec764a7638000fa3e7be09786ac4d3ddc64b76db"}, - {file = "frozendict-2.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ccc94ac781710db44e142e1a11ff9b31d02c032c01c6868d51fcbef73086225"}, - {file = "frozendict-2.3.8-cp39-cp39-win_arm64.whl", hash = "sha256:e72dbc1bcc2203cef38d205f692396f5505921a5680f66aa9a7e8bb71fd38f28"}, - {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, - {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, + {file = "frozendict-2.3.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df2d2afa5af41bfa09dc9d5a8e6d73ae39b677a8572200c65a5ea353387ffccd"}, + {file = "frozendict-2.3.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b10df7f5d8637b1af319434f99dc25ca6f5537e28b293e4c405ebfb4bf9581fa"}, + {file = "frozendict-2.3.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da22a3e873f365f97445c49afc1e6d5198ed6d172f3efaf0e9fde0edcca3cea1"}, + {file = "frozendict-2.3.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89218738e2122b50bf8a0444083dbe2de280402e9c2ef0929c0db0f93ff11271"}, + {file = "frozendict-2.3.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aa11add43a71fd47523fbd011be5cc011df79e25ec0b0339fc0d728623aaa7ec"}, + {file = "frozendict-2.3.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:af267bd6d98cbc10580105dc76f28f7156856fa48a5bbcadd40edb85f93657ae"}, + {file = "frozendict-2.3.10-cp310-cp310-win_amd64.whl", hash = "sha256:c112024df64b8926a315d7e36b860967fcad8aae0c592b9f117589391373e893"}, + {file = "frozendict-2.3.10-cp310-cp310-win_arm64.whl", hash = "sha256:a0065db2bc76628853dd620bd08c1ca44ad0b711e92e89b4156493153add6f9d"}, + {file = "frozendict-2.3.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:93634af5a6d71762aebc7d78bdce92890b7e612588faf887c9eaf752dc7ccdb1"}, + {file = "frozendict-2.3.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b4d05e231dc1a2ec874f847fd7348cbee469555468efb875a89994ecde31a81"}, + {file = "frozendict-2.3.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d40d0644f19365fc6cc428db31c0f113fa550bd15920262f9d77ccf6556d87b"}, + {file = "frozendict-2.3.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:12b40526219f9583b30690011288bca4d6cce8724cda96b3c3ab08b67c5a7f09"}, + {file = "frozendict-2.3.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6b552fffeba8e41b43ce10cc0fc467e048a7c9a71ae3241057510342132555b9"}, + {file = "frozendict-2.3.10-cp36-cp36m-win_amd64.whl", hash = "sha256:07208e4718cb70aa259ac886c19b96a4aad1cf00e9199f211746f738951bbf7c"}, + {file = "frozendict-2.3.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e8bec6d11f7254e405290cb1b081caffa0c18b6aa779130da9a546349c56be83"}, + {file = "frozendict-2.3.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b089c7e8c95d8b043e82e7da26e165f4220d7310efaad5e94445db7e3bc8321e"}, + {file = "frozendict-2.3.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08a5829d708657c9d5ad58f4a7e4baa73a3d57290f9613bdd909d481fc203a3a"}, + {file = "frozendict-2.3.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1c015852dacf144dbeadf203673d8c714f788fcc2b810a36504994b3c4f5a436"}, + {file = "frozendict-2.3.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bb9f15a5ed924be2b1cb3654b7ea3b7bae265ff39e2b5784d42bd4a6e1353e45"}, + {file = "frozendict-2.3.10-cp37-cp37m-win_amd64.whl", hash = "sha256:809bb9c6c657bded925710a309bb2a2350bdbfdc9371df427f1a93cb8ab7ec3e"}, + {file = "frozendict-2.3.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ff7a9cca3a3a1e584349e859d028388bd96a5475f76721471b73797472c6db17"}, + {file = "frozendict-2.3.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cdd496933ddb428f3854bea9ffdce0245bb27c27909f663ad396409fb4dffb5"}, + {file = "frozendict-2.3.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9df392b655fadaa0174c1923e6205b30ad1ccca248e8e146e63a8147a355ee01"}, + {file = "frozendict-2.3.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7901828700f36fe12486705afe7afc5583434390c8f69b5419de1b6c566fb00d"}, + {file = "frozendict-2.3.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c9aa28ce48d848ee520409533fd0254de4caf025c5cf1b9f27c98c1dd8cf90aa"}, + {file = "frozendict-2.3.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0856af4f5b4288b2270e0b74078fad5cbaf4f799326b82183865f6f367008b2c"}, + {file = "frozendict-2.3.10-cp38-cp38-win_amd64.whl", hash = "sha256:ac41c671ff33cbefc0f06c4b2a630d18ab59f5256f45f57d5632252ae4a8c07a"}, + {file = "frozendict-2.3.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:893205dc5a4e5c4b24e5822ceb21ef14fed8ca4afae7ac688e2fc24294c85225"}, + {file = "frozendict-2.3.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e78c5ac5d71f3b73f07ff9d9e3cc32dfbf7954f2c57c2d0e1fe8f1600e980b40"}, + {file = "frozendict-2.3.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c4ca4cc42bc30b20476616411d4b49aae6084760b99251f1cbdfed879ae53ea"}, + {file = "frozendict-2.3.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c865962216f7cfd6dac8693f4de431a9d98a7225185ff23613ecd10c42423adc"}, + {file = "frozendict-2.3.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99b2f47b292cc4d68f6679918e8e9e6dc5e816924d8369d07018be56b93fb20f"}, + {file = "frozendict-2.3.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e7abf4539b73c8e5680dd2fdbd19ca4fc3e2b2f3666f80f022217839bb859fd"}, + {file = "frozendict-2.3.10-cp39-cp39-win_amd64.whl", hash = "sha256:901e774629fc63f84d24b5e46b59de1eed22392ee98b7f92e694a127d541edac"}, + {file = "frozendict-2.3.10-cp39-cp39-win_arm64.whl", hash = "sha256:6f8681c0ffe92be9aba40c9b9960c48f0ae7f6ea585af2b93fc9542cc3865969"}, + {file = "frozendict-2.3.10-py3-none-any.whl", hash = "sha256:66cded65f144393b4226bda9fe9ac2f42451d2d603e8a486015744bb566a7008"}, + {file = "frozendict-2.3.10.tar.gz", hash = "sha256:aadc83510ce82751a0bb3575231f778bc37cbb373f5f05a52b888e26cbb92f79"}, ] [[package]] name = "frozenlist" -version = "1.3.3" +version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"}, - {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"}, - {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"}, - {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"}, - {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"}, - {file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"}, - {file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"}, - {file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"}, - {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"}, - {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"}, - {file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"}, - {file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"}, - {file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"}, - {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"}, - {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"}, - {file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"}, - {file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"}, - {file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"}, - {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"}, - {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"}, - {file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"}, - {file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"}, - {file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"}, - {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"}, - {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"}, - {file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"}, - {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, - {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, + {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, + {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, + {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, + {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, + {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, + {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, + {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, + {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, + {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, ] [[package]] @@ -1568,51 +1615,49 @@ files = [ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - [[package]] name = "httptools" -version = "0.6.0" +version = "0.6.1" description = "A collection of framework independent HTTP protocol utils." optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.8.0" files = [ - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339"}, - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c"}, - {file = "httptools-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38"}, - {file = "httptools-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2"}, - {file = "httptools-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4"}, - {file = "httptools-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201"}, - {file = "httptools-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d"}, - {file = "httptools-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd"}, - {file = "httptools-0.6.0.tar.gz", hash = "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, ] [package.extras] @@ -1634,52 +1679,51 @@ idna = ">=2.5" [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "importlib-metadata" -version = "4.13.0" +version = "7.0.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-4.13.0-py3-none-any.whl", hash = "sha256:8a8a81bcf996e74fee46f0d16bd3eaa382a7eb20fd82445c3ad11f4090334116"}, - {file = "importlib_metadata-4.13.0.tar.gz", hash = "sha256:dd0173e8f150d6815e098fd354f6414b0f079af4644ddfe90c71e2fc6174346d"}, + {file = "importlib_metadata-7.0.0-py3-none-any.whl", hash = "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67"}, + {file = "importlib_metadata-7.0.0.tar.gz", hash = "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7"}, ] [package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" -version = "5.12.0" +version = "6.1.1" description = "Read resources from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "incremental" @@ -1770,6 +1814,17 @@ parallel = ["ipyparallel"] qtconsole = ["qtconsole"] test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] +[[package]] +name = "isort" +version = "5.13.1" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.1-py3-none-any.whl", hash = "sha256:56a51732c25f94ca96f6721be206dd96a95f42950502eb26c1015d333bc6edb7"}, + {file = "isort-5.13.1.tar.gz", hash = "sha256:aaed790b463e8703fb1eddb831dfa8e8616bacde2c083bd557ef73c8189b7263"}, +] + [[package]] name = "jedi" version = "0.19.1" @@ -1802,27 +1857,42 @@ files = [ [[package]] name = "jsonschema" -version = "4.17.3" +version = "4.20.0" description = "An implementation of JSON Schema validation for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, + {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, + {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, ] [package.dependencies] -attrs = ">=17.4.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +attrs = ">=22.2.0" importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +jsonschema-specifications = ">=2023.03.6" pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +[[package]] +name = "jsonschema-specifications" +version = "2023.11.2" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"}, + {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"}, +] + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.31.0" + [[package]] name = "jwcrypto" version = "1.5.0" @@ -1850,8 +1920,6 @@ files = [ [package.dependencies] amqp = ">=5.0.9,<6.0.0" -cached-property = {version = "*", markers = "python_version < \"3.8\""} -importlib-metadata = {version = ">=0.18", markers = "python_version < \"3.8\""} vine = "*" [package.extras] @@ -1870,6 +1938,69 @@ sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=1.3.1)"] +[[package]] +name = "lazy-object-proxy" +version = "1.9.0" +description = "A fast and thorough lazy object proxy." +optional = false +python-versions = ">=3.7" +files = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] + +[[package]] +name = "lb-matching-tools" +version = "0.1.0" +description = "ListenBrainz tools for matching metadata to and from MusicBrainz." +optional = false +python-versions = ">=3.7" +files = [] +develop = false + +[package.dependencies] +regex = "*" + +[package.source] +type = "git" +url = "https://github.com/metabrainz/listenbrainz-matching-tools.git" +reference = "main" +resolved_reference = "5c0d9c1f2ef39bbb0b1f4892334b306ac2700cd9" + [[package]] name = "lxml" version = "4.9.3" @@ -2020,76 +2151,80 @@ files = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] +[[package]] +name = "more-itertools" +version = "10.1.0" +description = "More routines for operating on iterables, beyond itertools" +optional = false +python-versions = ">=3.8" +files = [ + {file = "more-itertools-10.1.0.tar.gz", hash = "sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a"}, + {file = "more_itertools-10.1.0-py3-none-any.whl", hash = "sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6"}, +] + [[package]] name = "msgpack" -version = "1.0.5" +version = "1.0.7" description = "MessagePack serializer" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"}, - {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"}, - {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"}, - {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"}, - {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"}, - {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"}, - {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"}, - {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"}, - {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"}, - {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"}, - {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"}, - {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"}, - {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"}, - {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"}, - {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"}, - {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b4f35de6a304b5533c238bee86b670b75b03d31b7797929caa7a624b5dda6"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28efb066cde83c479dfe5a48141a53bc7e5f13f785b92ddde336c716663039ee"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cb14ce54d9b857be9591ac364cb08dc2d6a5c4318c1182cb1d02274029d590d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b573a43ef7c368ba4ea06050a957c2a7550f729c31f11dd616d2ac4aba99888d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ccf9a39706b604d884d2cb1e27fe973bc55f2890c52f38df742bc1d79ab9f5e1"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cb70766519500281815dfd7a87d3a178acf7ce95390544b8c90587d76b227681"}, + {file = "msgpack-1.0.7-cp310-cp310-win32.whl", hash = "sha256:b610ff0f24e9f11c9ae653c67ff8cc03c075131401b3e5ef4b82570d1728f8a9"}, + {file = "msgpack-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:a40821a89dc373d6427e2b44b572efc36a2778d3f543299e2f24eb1a5de65415"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e"}, + {file = "msgpack-1.0.7-cp311-cp311-win32.whl", hash = "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1"}, + {file = "msgpack-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f0936e08e0003f66bfd97e74ee530427707297b0d0361247e9b4f59ab78ddc8b"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98bbd754a422a0b123c66a4c341de0474cad4a5c10c164ceed6ea090f3563db4"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b291f0ee7961a597cbbcc77709374087fa2a9afe7bdb6a40dbbd9b127e79afee"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebbbba226f0a108a7366bf4b59bf0f30a12fd5e75100c630267d94d7f0ad20e5"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2d69948e4132813b8d1131f29f9101bc2c915f26089a6d632001a5c1349672"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdf38ba2d393c7911ae989c3bbba510ebbcdf4ecbdbfec36272abe350c454075"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:993584fc821c58d5993521bfdcd31a4adf025c7d745bbd4d12ccfecf695af5ba"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:52700dc63a4676669b341ba33520f4d6e43d3ca58d422e22ba66d1736b0a6e4c"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e45ae4927759289c30ccba8d9fdce62bb414977ba158286b5ddaf8df2cddb5c5"}, + {file = "msgpack-1.0.7-cp312-cp312-win32.whl", hash = "sha256:27dcd6f46a21c18fa5e5deed92a43d4554e3df8d8ca5a47bf0615d6a5f39dbc9"}, + {file = "msgpack-1.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:7687e22a31e976a0e7fc99c2f4d11ca45eff652a81eb8c8085e9609298916dcf"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b6ccc0c85916998d788b295765ea0e9cb9aac7e4a8ed71d12e7d8ac31c23c95"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:235a31ec7db685f5c82233bddf9858748b89b8119bf4538d514536c485c15fe0"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cab3db8bab4b7e635c1c97270d7a4b2a90c070b33cbc00c99ef3f9be03d3e1f7"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bfdd914e55e0d2c9e1526de210f6fe8ffe9705f2b1dfcc4aecc92a4cb4b533d"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36e17c4592231a7dbd2ed09027823ab295d2791b3b1efb2aee874b10548b7524"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38949d30b11ae5f95c3c91917ee7a6b239f5ec276f271f28638dec9156f82cfc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ff1d0899f104f3921d94579a5638847f783c9b04f2d5f229392ca77fba5b82fc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dc43f1ec66eb8440567186ae2f8c447d91e0372d793dfe8c222aec857b81a8cf"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dd632777ff3beaaf629f1ab4396caf7ba0bdd075d948a69460d13d44357aca4c"}, + {file = "msgpack-1.0.7-cp38-cp38-win32.whl", hash = "sha256:4e71bc4416de195d6e9b4ee93ad3f2f6b2ce11d042b4d7a7ee00bbe0358bd0c2"}, + {file = "msgpack-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:8f5b234f567cf76ee489502ceb7165c2a5cecec081db2b37e35332b537f8157c"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfef2bb6ef068827bbd021017a107194956918ab43ce4d6dc945ffa13efbc25f"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484ae3240666ad34cfa31eea7b8c6cd2f1fdaae21d73ce2974211df099a95d81"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3967e4ad1aa9da62fd53e346ed17d7b2e922cba5ab93bdd46febcac39be636fc"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd178c4c80706546702c59529ffc005681bd6dc2ea234c450661b205445a34d"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ffbc252eb0d229aeb2f9ad051200668fc3a9aaa8994e49f0cb2ffe2b7867e7"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:822ea70dc4018c7e6223f13affd1c5c30c0f5c12ac1f96cd8e9949acddb48a61"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:384d779f0d6f1b110eae74cb0659d9aa6ff35aaf547b3955abf2ab4c901c4819"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f64e376cd20d3f030190e8c32e1c64582eba56ac6dc7d5b0b49a9d44021b52fd"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ed82f5a7af3697b1c4786053736f24a0efd0a1b8a130d4c7bfee4b9ded0f08f"}, + {file = "msgpack-1.0.7-cp39-cp39-win32.whl", hash = "sha256:f26a07a6e877c76a88e3cecac8531908d980d3d5067ff69213653649ec0f60ad"}, + {file = "msgpack-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3"}, + {file = "msgpack-1.0.7.tar.gz", hash = "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"}, ] [[package]] @@ -2252,13 +2387,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] @@ -2274,13 +2409,13 @@ files = [ [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] @@ -2384,36 +2519,30 @@ files = [ [[package]] name = "platformdirs" -version = "4.0.0" +version = "4.1.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-4.0.0-py3-none-any.whl", hash = "sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b"}, - {file = "platformdirs-4.0.0.tar.gz", hash = "sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"}, + {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, + {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, ] -[package.dependencies] -typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} - [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] @@ -2465,6 +2594,84 @@ files = [ {file = "psycopg2-2.9.9.tar.gz", hash = "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156"}, ] +[[package]] +name = "psycopg2-binary" +version = "2.9.9" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win32.whl", hash = "sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win32.whl", hash = "sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win32.whl", hash = "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, +] + [[package]] name = "ptyprocess" version = "0.7.0" @@ -2478,13 +2685,13 @@ files = [ [[package]] name = "pyasn1" -version = "0.5.0" +version = "0.5.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, ] [[package]] @@ -2512,6 +2719,19 @@ files = [ {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] +[[package]] +name = "pycountry" +version = "22.3.5" +description = "ISO country, subdivision, language, currency and script definitions and their translations" +optional = false +python-versions = ">=3.6, <4" +files = [ + {file = "pycountry-22.3.5.tar.gz", hash = "sha256:b2163a246c585894d808f18783e19137cb70a0c18fb36748dc01fc6f109c1646"}, +] + +[package.dependencies] +setuptools = "*" + [[package]] name = "pycparser" version = "2.21" @@ -2547,17 +2767,18 @@ files = [ [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyld" @@ -2580,6 +2801,86 @@ cachetools = ["cachetools"] frozendict = ["frozendict"] requests = ["requests"] +[[package]] +name = "pylint" +version = "2.17.7" +description = "python code static checker" +optional = false +python-versions = ">=3.7.2" +files = [ + {file = "pylint-2.17.7-py3-none-any.whl", hash = "sha256:27a8d4c7ddc8c2f8c18aa0050148f89ffc09838142193fdbe98f172781a3ff87"}, + {file = "pylint-2.17.7.tar.gz", hash = "sha256:f4fcac7ae74cfe36bc8451e931d8438e4a476c20314b1101c458ad0f05191fad"}, +] + +[package.dependencies] +astroid = ">=2.15.8,<=2.17.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pylint-django" +version = "2.5.5" +description = "A Pylint plugin to help Pylint understand the Django web framework" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pylint_django-2.5.5-py3-none-any.whl", hash = "sha256:5abd5c2228e0e5e2a4cb6d0b4fc1d1cef1e773d0be911412f4dd4fc1a1a440b7"}, + {file = "pylint_django-2.5.5.tar.gz", hash = "sha256:2f339e4bf55776958283395c5139c37700c91bd5ef1d8251ef6ac88b5abbba9b"}, +] + +[package.dependencies] +pylint = ">=2.0,<4" +pylint-plugin-utils = ">=0.8" + +[package.extras] +with-django = ["Django (>=2.2)"] + +[[package]] +name = "pylint-plugin-utils" +version = "0.8.2" +description = "Utilities and helpers for writing Pylint plugins" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pylint_plugin_utils-0.8.2-py3-none-any.whl", hash = "sha256:ae11664737aa2effbf26f973a9e0b6779ab7106ec0adc5fe104b0907ca04e507"}, + {file = "pylint_plugin_utils-0.8.2.tar.gz", hash = "sha256:d3cebf68a38ba3fba23a873809155562571386d4c1b03e5b4c4cc26c3eee93e4"}, +] + +[package.dependencies] +pylint = ">=1.7" + +[[package]] +name = "pylistenbrainz" +version = "0.5.2" +description = "A simple ListenBrainz client library for Python" +optional = false +python-versions = ">=3.5" +files = [] +develop = false + +[package.dependencies] +importlib-metadata = {version = ">=3.10.0", markers = "python_version < \"3.10\""} +requests = ">=2.23.0" + +[package.source] +type = "git" +url = "https://github.com/metabrainz/pylistenbrainz.git" +reference = "v0.5.2" +resolved_reference = "f66414d2da3a260b9d4322d42f98ec7a6d6b982f" + [[package]] name = "pyopenssl" version = "23.2.0" @@ -2599,79 +2900,54 @@ docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] test = ["flaky", "pretend", "pytest (>=3.0.1)"] [[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6.8" files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "pytest" -version = "7.2.1" +version = "7.4.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"}, - {file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"}, + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" -version = "0.20.3" +version = "0.21.0" description = "Pytest support for asyncio" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-asyncio-0.20.3.tar.gz", hash = "sha256:83cbf01169ce3e8eb71c6c278ccb0574d1a7a3bb8eaaf5e50e0ad342afb33b36"}, - {file = "pytest_asyncio-0.20.3-py3-none-any.whl", hash = "sha256:f129998b209d04fcc65c96fc85c11e5316738358909a8399e93be553d7656442"}, + {file = "pytest-asyncio-0.21.0.tar.gz", hash = "sha256:2b38a496aef56f56b0e87557ec313e11e1ab9276fc3863f6a7be0f1d0e415e1b"}, + {file = "pytest_asyncio-0.21.0-py3-none-any.whl", hash = "sha256:f2b3366b7cd501a4056858bd39349d5af19742aed2d81660b7998b6341c7eb9c"}, ] [package.dependencies] -pytest = ">=6.1.0" -typing-extensions = {version = ">=3.7.2", markers = "python_version < \"3.8\""} +pytest = ">=7.0.0" [package.extras] docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] @@ -2715,20 +2991,20 @@ testing = ["Django", "django-configurations (>=2.0)"] [[package]] name = "pytest-env" -version = "0.8.1" +version = "0.8.2" description = "py.test plugin that allows you to add environment variables." optional = false python-versions = ">=3.7" files = [ - {file = "pytest_env-0.8.1-py3-none-any.whl", hash = "sha256:8c0605ae09a5b7e41c20ebcc44f2c906eea9654095b4b0c342b3814bcc3a8492"}, - {file = "pytest_env-0.8.1.tar.gz", hash = "sha256:d7b2f5273ec6d1e221757998bc2f50d2474ed7d0b9331b92556011fadc4e9abf"}, + {file = "pytest_env-0.8.2-py3-none-any.whl", hash = "sha256:5e533273f4d9e6a41c3a3120e0c7944aae5674fa773b329f00a5eb1f23c53a38"}, + {file = "pytest_env-0.8.2.tar.gz", hash = "sha256:baed9b3b6bae77bd75b9238e0ed1ee6903a42806ae9d6aeffb8754cd5584d4ff"}, ] [package.dependencies] -pytest = ">=7.1.3" +pytest = ">=7.3.1" [package.extras] -test = ["coverage (>=6.5)", "pytest-mock (>=3.10)"] +test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] [[package]] name = "pytest-mock" @@ -2797,13 +3073,13 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "0.21.1" +version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "python-dotenv-0.21.1.tar.gz", hash = "sha256:1c93de8f636cde3ce377292818d0e440b6e45a82f215c3744979151fa8151c49"}, - {file = "python_dotenv-0.21.1-py3-none-any.whl", hash = "sha256:41e12e0318bebc859fcc4d97d4db8d20ad21721a6aa5047dd59f090391cb549a"}, + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, ] [package.extras] @@ -2811,12 +3087,12 @@ cli = ["click (>=5.0)"] [[package]] name = "python-ldap" -version = "3.4.3" +version = "3.4.4" description = "Python modules for implementing LDAP clients" optional = false python-versions = ">=3.6" files = [ - {file = "python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"}, + {file = "python-ldap-3.4.4.tar.gz", hash = "sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828"}, ] [package.dependencies] @@ -2854,13 +3130,13 @@ postgresql = ["psycopg2"] [[package]] name = "pytz" -version = "2022.7.1" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, - {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -2875,7 +3151,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2883,15 +3158,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2908,7 +3176,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2916,7 +3183,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2935,13 +3201,123 @@ files = [ [package.dependencies] async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2\""} -importlib-metadata = {version = ">=1.0", markers = "python_version < \"3.8\""} -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] hiredis = ["hiredis (>=1.0.0)"] ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] +[[package]] +name = "referencing" +version = "0.32.0" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.32.0-py3-none-any.whl", hash = "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99"}, + {file = "referencing-0.32.0.tar.gz", hash = "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "regex" +version = "2023.10.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.7" +files = [ + {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, + {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, + {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, + {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, + {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, + {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, + {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, + {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, + {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, + {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, + {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, + {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, + {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, + {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, + {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, +] + [[package]] name = "requests" version = "2.28.2" @@ -3015,6 +3391,114 @@ requests = ">=2.0.0" [package.extras] rsa = ["oauthlib[signedtoken] (>=3.0.0)"] +[[package]] +name = "rpds-py" +version = "0.13.2" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.13.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d"}, + {file = "rpds_py-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1"}, + {file = "rpds_py-0.13.2-cp310-none-win32.whl", hash = "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc"}, + {file = "rpds_py-0.13.2-cp310-none-win_amd64.whl", hash = "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d"}, + {file = "rpds_py-0.13.2-cp311-none-win32.whl", hash = "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7"}, + {file = "rpds_py-0.13.2-cp311-none-win_amd64.whl", hash = "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60"}, + {file = "rpds_py-0.13.2-cp312-none-win32.whl", hash = "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d"}, + {file = "rpds_py-0.13.2-cp312-none-win_amd64.whl", hash = "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b"}, + {file = "rpds_py-0.13.2-cp38-none-win32.whl", hash = "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab"}, + {file = "rpds_py-0.13.2-cp38-none-win_amd64.whl", hash = "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468"}, + {file = "rpds_py-0.13.2-cp39-none-win32.whl", hash = "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c"}, + {file = "rpds_py-0.13.2-cp39-none-win_amd64.whl", hash = "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31"}, + {file = "rpds_py-0.13.2.tar.gz", hash = "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f"}, +] + [[package]] name = "s3transfer" version = "0.6.2" @@ -3034,13 +3518,13 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] [[package]] name = "sentry-sdk" -version = "1.12.1" +version = "1.19.1" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = "*" files = [ - {file = "sentry-sdk-1.12.1.tar.gz", hash = "sha256:5bbe4b72de22f9ac1e67f2a4e6efe8fbd595bb59b7b223443f50fe5802a5551c"}, - {file = "sentry_sdk-1.12.1-py2.py3-none-any.whl", hash = "sha256:9f0b960694e2d8bb04db4ba6ac2a645040caef4e762c65937998ff06064f10d6"}, + {file = "sentry-sdk-1.19.1.tar.gz", hash = "sha256:7ae78bd921981a5010ab540d6bdf3b793659a4db8cccf7f16180702d48a80d84"}, + {file = "sentry_sdk-1.19.1-py2.py3-none-any.whl", hash = "sha256:885a11c69df23e53eb281d003b9ff15a5bdfa43d8a2a53589be52104a1b4582f"}, ] [package.dependencies] @@ -3049,6 +3533,7 @@ urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} [package.extras] aiohttp = ["aiohttp (>=3.5)"] +arq = ["arq (>=0.23)"] beam = ["apache-beam (>=2.12)"] bottle = ["bottle (>=0.12.13)"] celery = ["celery (>=3)"] @@ -3057,8 +3542,10 @@ django = ["django (>=1.8)"] falcon = ["falcon (>=1.4)"] fastapi = ["fastapi (>=0.79.0)"] flask = ["blinker (>=1.1)", "flask (>=0.11)"] +grpcio = ["grpcio (>=1.21.1)"] httpx = ["httpx (>=0.16.0)"] -opentelemetry = ["opentelemetry-distro (>=0.350b0)"] +huey = ["huey (>=2)"] +opentelemetry = ["opentelemetry-distro (>=0.35b0)"] pure-eval = ["asttokens", "executing", "pure-eval"] pymongo = ["pymongo (>=3.1)"] pyspark = ["pyspark (>=2.4.4)"] @@ -3067,6 +3554,7 @@ rq = ["rq (>=0.6)"] sanic = ["sanic (>=0.8)"] sqlalchemy = ["sqlalchemy (>=1.2)"] starlette = ["starlette (>=0.19.1)"] +starlite = ["starlite (>=1.48)"] tornado = ["tornado (>=5)"] [[package]] @@ -3095,19 +3583,19 @@ tests = ["coverage[toml] (>=5.0.2)", "pytest"] [[package]] name = "setuptools" -version = "68.0.0" +version = "69.0.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-69.0.2-py3-none-any.whl", hash = "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2"}, + {file = "setuptools-69.0.2.tar.gz", hash = "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "sgmllib3k" @@ -3141,6 +3629,28 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] +[[package]] +name = "spotipy" +version = "2.23.0" +description = "A light weight Python library for the Spotify Web API" +optional = false +python-versions = "*" +files = [ + {file = "spotipy-2.23.0-py2-none-any.whl", hash = "sha256:da850fbf62faaa05912132d2886c293a5fbbe8350d0821e7208a6a2fdd6a0079"}, + {file = "spotipy-2.23.0-py3-none-any.whl", hash = "sha256:6bf8b963c10d0a3e51037e4baf92e29732dee36b2a1f1b7dcc8cd5771e662a5b"}, + {file = "spotipy-2.23.0.tar.gz", hash = "sha256:0dfafe08239daae6c16faa68f60b5775d40c4110725e1a7c545ad4c7fb66d4e8"}, +] + +[package.dependencies] +redis = ">=3.5.3" +requests = ">=2.25.0" +six = ">=1.15.0" +urllib3 = ">=1.26.0" + +[package.extras] +doc = ["Sphinx (>=1.5.2)"] +test = ["mock (==2.0.0)"] + [[package]] name = "sqlparse" version = "0.4.4" @@ -3159,13 +3669,13 @@ test = ["pytest", "pytest-cov"] [[package]] name = "termcolor" -version = "2.3.0" +version = "2.4.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, - {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, + {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, + {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, ] [package.extras] @@ -3183,59 +3693,96 @@ files = [ ] [[package]] -name = "traitlets" -version = "5.9.0" -description = "Traitlets Python configuration system" +name = "tomlkit" +version = "0.12.3" +description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, + {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, +] + +[[package]] +name = "traitlets" +version = "5.14.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, + {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "troi" +version = "0.1.0" +description = "An empathetic music recommendation system pipeline" +optional = false +python-versions = ">=3.6" +files = [] +develop = false + +[package.dependencies] +click = ">=8.0" +countryinfo = ">=0.1.2" +more_itertools = "*" +psycopg2-binary = ">=2.9.3" +pylistenbrainz = {git = "https://github.com/metabrainz/pylistenbrainz.git", rev = "v0.5.2"} +pyparsing = "*" +python-dateutil = ">=2.8.2" +requests = "*" +spotipy = ">=2.22.1" +ujson = ">=5.4.0" + +[package.source] +type = "git" +url = "https://github.com/metabrainz/troi-recommendation-playground.git" +reference = "v-2023-10-30.0" +resolved_reference = "a0ca6f9e064eb3a5872db0299a46780f2d118821" [[package]] name = "twisted" -version = "22.4.0" +version = "23.10.0" description = "An asynchronous networking framework written in Python" optional = false -python-versions = ">=3.6.7" +python-versions = ">=3.8.0" files = [ - {file = "Twisted-22.4.0-py3-none-any.whl", hash = "sha256:f9f7a91f94932477a9fc3b169d57f54f96c6e74a23d78d9ce54039a7f48928a2"}, - {file = "Twisted-22.4.0.tar.gz", hash = "sha256:a047990f57dfae1e0bd2b7df2526d4f16dcdc843774dc108b78c52f2a5f13680"}, + {file = "twisted-23.10.0-py3-none-any.whl", hash = "sha256:4ae8bce12999a35f7fe6443e7f1893e6fe09588c8d2bed9c35cdce8ff2d5b444"}, + {file = "twisted-23.10.0.tar.gz", hash = "sha256:987847a0790a2c597197613686e2784fd54167df3a55d0fb17c8412305d76ce5"}, ] [package.dependencies] -attrs = ">=19.2.0" -Automat = ">=0.8.0" +attrs = ">=21.3.0" +automat = ">=0.8.0" constantly = ">=15.1" hyperlink = ">=17.1.1" idna = {version = ">=2.4", optional = true, markers = "extra == \"tls\""} -incremental = ">=21.3.0" -pyopenssl = {version = ">=16.0.0", optional = true, markers = "extra == \"tls\""} +incremental = ">=22.10.0" +pyopenssl = {version = ">=21.0.0", optional = true, markers = "extra == \"tls\""} service-identity = {version = ">=18.1.0", optional = true, markers = "extra == \"tls\""} twisted-iocpsupport = {version = ">=1.0.2,<2", markers = "platform_system == \"Windows\""} -typing-extensions = ">=3.6.5" -"zope.interface" = ">=4.4.2" +typing-extensions = ">=4.2.0" +zope-interface = ">=5" [package.extras] -all-non-platform = ["PyHamcrest (>=1.9.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "contextvars (>=2.4,<3)", "cryptography (>=2.6)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "pyasn1", "pyopenssl (>=16.0.0)", "pyserial (>=3.0)", "pywin32 (!=226)", "service-identity (>=18.1.0)"] -conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "cryptography (>=2.6)", "pyasn1"] -conch-nacl = ["PyNaCl", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "cryptography (>=2.6)", "pyasn1"] -contextvars = ["contextvars (>=2.4,<3)"] -dev = ["coverage (>=6b1,<7)", "pydoctor (>=21.9.0,<21.10.0)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=4.1.2,<6)", "sphinx-rtd-theme (>=0.5,<1.0)", "towncrier (>=19.2,<20.0)", "twistedchecker (>=0.7,<1.0)"] -dev-release = ["pydoctor (>=21.9.0,<21.10.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=4.1.2,<6)", "sphinx-rtd-theme (>=0.5,<1.0)", "towncrier (>=19.2,<20.0)"] +all-non-platform = ["twisted[conch,http2,serial,test,tls]", "twisted[conch,http2,serial,test,tls]"] +conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] +dev = ["coverage (>=6b1,<7)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "twisted[dev-release]", "twistedchecker (>=0.7,<1.0)"] +dev-release = ["pydoctor (>=23.9.0,<23.10.0)", "pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "towncrier (>=23.6,<24.0)"] +gtk-platform = ["pygobject", "pygobject", "twisted[all-non-platform]", "twisted[all-non-platform]"] http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] -macos-platform = ["PyHamcrest (>=1.9.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "contextvars (>=2.4,<3)", "cryptography (>=2.6)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "pyasn1", "pyobjc-core", "pyobjc-framework-CFNetwork", "pyobjc-framework-Cocoa", "pyopenssl (>=16.0.0)", "pyserial (>=3.0)", "pywin32 (!=226)", "service-identity (>=18.1.0)"] -mypy = ["PyHamcrest (>=1.9.0)", "PyNaCl", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "contextvars (>=2.4,<3)", "coverage (>=6b1,<7)", "cryptography (>=2.6)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "idna (>=2.4)", "mypy (==0.930)", "mypy-zope (==0.3.4)", "priority (>=1.1.0,<2.0)", "pyasn1", "pydoctor (>=21.9.0,<21.10.0)", "pyflakes (>=2.2,<3.0)", "pyopenssl (>=16.0.0)", "pyserial (>=3.0)", "python-subunit (>=1.4,<2.0)", "pywin32 (!=226)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "service-identity (>=18.1.0)", "sphinx (>=4.1.2,<6)", "sphinx-rtd-theme (>=0.5,<1.0)", "towncrier (>=19.2,<20.0)", "twistedchecker (>=0.7,<1.0)", "types-pyOpenSSL", "types-setuptools"] -osx-platform = ["PyHamcrest (>=1.9.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "contextvars (>=2.4,<3)", "cryptography (>=2.6)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "pyasn1", "pyobjc-core", "pyobjc-framework-CFNetwork", "pyobjc-framework-Cocoa", "pyopenssl (>=16.0.0)", "pyserial (>=3.0)", "pywin32 (!=226)", "service-identity (>=18.1.0)"] +macos-platform = ["pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "twisted[all-non-platform]", "twisted[all-non-platform]"] +mypy = ["mypy (>=1.5.1,<1.6.0)", "mypy-zope (>=1.0.1,<1.1.0)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] +osx-platform = ["twisted[macos-platform]", "twisted[macos-platform]"] serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] -test = ["PyHamcrest (>=1.9.0)", "cython-test-exception-raiser (>=1.0.2,<2)"] -tls = ["idna (>=2.4)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)"] -windows-platform = ["PyHamcrest (>=1.9.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "contextvars (>=2.4,<3)", "cryptography (>=2.6)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "pyasn1", "pyopenssl (>=16.0.0)", "pyserial (>=3.0)", "pywin32 (!=226)", "pywin32 (!=226)", "service-identity (>=18.1.0)"] +test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] +tls = ["idna (>=2.4)", "pyopenssl (>=21.0.0)", "service-identity (>=18.1.0)"] +windows-platform = ["pywin32 (!=226)", "pywin32 (!=226)", "twisted[all-non-platform]", "twisted[all-non-platform]"] [[package]] name = "twisted-iocpsupport" @@ -3282,64 +3829,101 @@ dev = ["pep8 (>=1.6.2)", "pyenchant (>=1.6.6)", "pytest (>=2.6.4)", "pytest-cov twisted = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] [[package]] -name = "typed-ast" -version = "1.5.5" -description = "a fork of Python 2 and 3 ast modules with type comment support" -optional = false -python-versions = ">=3.6" +name = "typesense" +version = "0.15.1" +description = "Python client for Typesense, an open source and typo tolerant search engine." +optional = true +python-versions = ">=3" files = [ - {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, - {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, - {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, - {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, - {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, - {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, - {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, - {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, - {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, - {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, - {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, - {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, - {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, - {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, - {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, - {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, - {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, - {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, - {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, - {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, - {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, - {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, - {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, - {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, - {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, - {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, + {file = "typesense-0.15.1-py2.py3-none-any.whl", hash = "sha256:4e87e66049e863187b5115d4743371edd5db75c80795f35a8ffe632bb407f075"}, ] +[package.dependencies] +requests = "*" + [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "ujson" +version = "5.9.0" +description = "Ultra fast JSON encoder and decoder for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ujson-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa"}, + {file = "ujson-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106"}, + {file = "ujson-5.9.0-cp310-cp310-win32.whl", hash = "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c"}, + {file = "ujson-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d"}, + {file = "ujson-5.9.0-cp311-cp311-win32.whl", hash = "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120"}, + {file = "ujson-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c"}, + {file = "ujson-5.9.0-cp312-cp312-win32.whl", hash = "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437"}, + {file = "ujson-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b"}, + {file = "ujson-5.9.0-cp38-cp38-win32.whl", hash = "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d"}, + {file = "ujson-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844"}, + {file = "ujson-5.9.0-cp39-cp39-win32.whl", hash = "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34"}, + {file = "ujson-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd"}, + {file = "ujson-5.9.0.tar.gz", hash = "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532"}, ] [[package]] @@ -3413,7 +3997,6 @@ h11 = ">=0.8" httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} @@ -3423,47 +4006,42 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "uvloop" -version = "0.18.0" +version = "0.19.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "uvloop-0.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f354d669586fca96a9a688c585b6257706d216177ac457c92e15709acaece10"}, - {file = "uvloop-0.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:280904236a5b333a273292b3bcdcbfe173690f69901365b973fa35be302d7781"}, - {file = "uvloop-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad79cd30c7e7484bdf6e315f3296f564b3ee2f453134a23ffc80d00e63b3b59e"}, - {file = "uvloop-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99deae0504547d04990cc5acf631d9f490108c3709479d90c1dcd14d6e7af24d"}, - {file = "uvloop-0.18.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:edbb4de38535f42f020da1e3ae7c60f2f65402d027a08a8c60dc8569464873a6"}, - {file = "uvloop-0.18.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:54b211c46facb466726b227f350792770fc96593c4ecdfaafe20dc00f3209aef"}, - {file = "uvloop-0.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:25b714f07c68dcdaad6994414f6ec0f2a3b9565524fba181dcbfd7d9598a3e73"}, - {file = "uvloop-0.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1121087dfeb46e9e65920b20d1f46322ba299b8d93f7cb61d76c94b5a1adc20c"}, - {file = "uvloop-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74020ef8061678e01a40c49f1716b4f4d1cc71190d40633f08a5ef8a7448a5c6"}, - {file = "uvloop-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f4a549cd747e6f4f8446f4b4c8cb79504a8372d5d3a9b4fc20e25daf8e76c05"}, - {file = "uvloop-0.18.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6132318e1ab84a626639b252137aa8d031a6c0550250460644c32ed997604088"}, - {file = "uvloop-0.18.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:585b7281f9ea25c4a5fa993b1acca4ad3d8bc3f3fe2e393f0ef51b6c1bcd2fe6"}, - {file = "uvloop-0.18.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:61151cc207cf5fc88863e50de3d04f64ee0fdbb979d0b97caf21cae29130ed78"}, - {file = "uvloop-0.18.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c65585ae03571b73907b8089473419d8c0aff1e3826b3bce153776de56cbc687"}, - {file = "uvloop-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3d301e23984dcbc92d0e42253e0e0571915f0763f1eeaf68631348745f2dccc"}, - {file = "uvloop-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:680da98f12a7587f76f6f639a8aa7708936a5d17c5e7db0bf9c9d9cbcb616593"}, - {file = "uvloop-0.18.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:75baba0bfdd385c886804970ae03f0172e0d51e51ebd191e4df09b929771b71e"}, - {file = "uvloop-0.18.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ed3c28337d2fefc0bac5705b9c66b2702dc392f2e9a69badb1d606e7e7f773bb"}, - {file = "uvloop-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8849b8ef861431543c07112ad8436903e243cdfa783290cbee3df4ce86d8dd48"}, - {file = "uvloop-0.18.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:211ce38d84118ae282a91408f61b85cf28e2e65a0a8966b9a97e0e9d67c48722"}, - {file = "uvloop-0.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a8f706b943c198dcedf1f2fb84899002c195c24745e47eeb8f2fb340f7dfc3"}, - {file = "uvloop-0.18.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:58e44650cbc8607a218caeece5a689f0a2d10be084a69fc32f7db2e8f364927c"}, - {file = "uvloop-0.18.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b8b7cf7806bdc745917f84d833f2144fabcc38e9cd854e6bc49755e3af2b53e"}, - {file = "uvloop-0.18.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:56c1026a6b0d12b378425e16250acb7d453abaefe7a2f5977143898db6cfe5bd"}, - {file = "uvloop-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:12af0d2e1b16780051d27c12de7e419b9daeb3516c503ab3e98d364cc55303bb"}, - {file = "uvloop-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b028776faf9b7a6d0a325664f899e4c670b2ae430265189eb8d76bd4a57d8a6e"}, - {file = "uvloop-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53aca21735eee3859e8c11265445925911ffe410974f13304edb0447f9f58420"}, - {file = "uvloop-0.18.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:847f2ed0887047c63da9ad788d54755579fa23f0784db7e752c7cf14cf2e7506"}, - {file = "uvloop-0.18.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6e20bb765fcac07879cd6767b6dca58127ba5a456149717e0e3b1f00d8eab51c"}, - {file = "uvloop-0.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e14de8800765b9916d051707f62e18a304cde661fa2b98a58816ca38d2b94029"}, - {file = "uvloop-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f3b18663efe0012bc4c315f1b64020e44596f5fabc281f5b0d9bc9465288559c"}, - {file = "uvloop-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6d341bc109fb8ea69025b3ec281fcb155d6824a8ebf5486c989ff7748351a37"}, - {file = "uvloop-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:895a1e3aca2504638a802d0bec2759acc2f43a0291a1dff886d69f8b7baff399"}, - {file = "uvloop-0.18.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d90858f32a852988d33987d608bcfba92a1874eb9f183995def59a34229f30d"}, - {file = "uvloop-0.18.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db1fcbad5deb9551e011ca589c5e7258b5afa78598174ac37a5f15ddcfb4ac7b"}, - {file = "uvloop-0.18.0.tar.gz", hash = "sha256:d5d1135beffe9cd95d0350f19e2716bc38be47d5df296d7cc46e3b7557c0d1ff"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, ] [package.extras] @@ -3523,33 +4101,86 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "watchfiles" -version = "0.20.0" +version = "0.21.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "watchfiles-0.20.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9"}, - {file = "watchfiles-0.20.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164"}, - {file = "watchfiles-0.20.0-cp37-abi3-win32.whl", hash = "sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_amd64.whl", hash = "sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_arm64.whl", hash = "sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce"}, - {file = "watchfiles-0.20.0.tar.gz", hash = "sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, ] [package.dependencies] @@ -3557,13 +4188,13 @@ anyio = ">=3.0.0" [[package]] name = "wcwidth" -version = "0.2.10" +version = "0.2.12" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.10-py2.py3-none-any.whl", hash = "sha256:aec5179002dd0f0d40c456026e74a729661c9d468e1ed64405e3a6c2176ca36f"}, - {file = "wcwidth-0.2.10.tar.gz", hash = "sha256:390c7454101092a6a5e43baad8f83de615463af459201709556b6e4b1c861f97"}, + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] [[package]] @@ -3579,81 +4210,83 @@ files = [ [[package]] name = "websockets" -version = "11.0.3" +version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, ] [[package]] @@ -3737,106 +4370,121 @@ files = [ [[package]] name = "yarl" -version = "1.9.2" +version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" -typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [[package]] name = "zipp" -version = "3.15.0" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [[package]] name = "zope-interface" @@ -3891,7 +4539,10 @@ docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] +[extras] +typesense = ["typesense"] + [metadata] lock-version = "2.0" -python-versions = "^3.7" -content-hash = "1113f13cc89bbb15d7e7bf9307037765dfca09e02e0eec7ce6a922c6f4f6ff76" +python-versions = "^3.8,<3.12" +content-hash = "fb841fc0c0b0259bb81716fb1fde9c2c8a3822e2a13b8d7e8c1bae65e47b7ace" diff --git a/api/pyproject.toml b/api/pyproject.toml index 09a85a4bb..4bbe45018 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "funkwhale-api" -version = "1.2.9" +version = "1.4.0" description = "Funkwhale API" authors = ["Funkwhale Collective"] @@ -25,7 +25,7 @@ exclude = ["tests"] funkwhale-manage = 'funkwhale_api.main:main' [tool.poetry.dependencies] -python = "^3.7" +python = "^3.8,<3.12" # Django dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } @@ -43,7 +43,7 @@ django-redis = "==5.2.0" django-storages = "==1.13.2" django-versatileimagefield = "==2.2" djangorestframework = "==3.14.0" -drf-spectacular = "==0.25.1" +drf-spectacular = "==0.26.5" markdown = "==3.4.4" persisting-theory = "==1.0" psycopg2 = "==2.9.9" @@ -51,7 +51,7 @@ redis = "==4.5.5" # Django LDAP django-auth-ldap = "==4.1.0" -python-ldap = "==3.4.3" +python-ldap = "==3.4.4" # Channels channels = { extras = ["daphne"], version = "==4.0.0" } @@ -68,6 +68,7 @@ uvicorn = { version = "==0.20.0", extras = ["standard"] } # Libs aiohttp = "==3.8.6" arrow = "==1.2.3" +backports-zoneinfo = { version = "==0.2.1", python = "<3.9" } bleach = "==5.0.1" boto3 = "==1.26.161" click = "==8.1.7" @@ -79,23 +80,28 @@ pillow = "==9.3.0" pydub = "==0.25.1" pyld = "==2.0.3" python-magic = "==0.4.27" -pytz = "==2022.7.1" requests = "==2.28.2" requests-http-message-signatures = "==0.3.1" -sentry-sdk = "==1.12.1" +sentry-sdk = "==1.19.1" watchdog = "==2.2.1" +troi = { git = "https://github.com/metabrainz/troi-recommendation-playground.git", tag = "v-2023-10-30.0"} +lb-matching-tools = { git = "https://github.com/metabrainz/listenbrainz-matching-tools.git", branch = "main"} +unidecode = "==1.3.7" +pycountry = "22.3.5" + +# Typesense +typesense = { version = "==0.15.1", optional = true } # Dependencies pinning -importlib-metadata = { version = "==4.13.0", python = "^3.7" } ipython = "==7.34.0" pluralizer = "==1.2.0" service-identity = "==21.1.0" unicode-slugify = "==0.1.5" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] aioresponses = "==0.7.6" asynctest = "==0.13.0" -black = "==22.12.0" +black = "==23.3.0" coverage = { version = "==6.5.0", extras = ["toml"] } debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" @@ -104,27 +110,30 @@ factory-boy = "==3.2.1" faker = "==15.3.4" flake8 = "==3.9.2" ipdb = "==0.13.13" +pytest = "==7.4.3" +pytest-asyncio = "==0.21.0" prompt-toolkit = "==3.0.41" -pytest = "==7.2.1" -pytest-asyncio = "==0.20.3" pytest-cov = "==4.0.0" pytest-django = "==4.5.2" -pytest-env = "==0.8.1" +pytest-env = "==0.8.2" pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" pytest-sugar = "==0.9.7" requests-mock = "==1.10.0" +pylint = "==2.17.7" +pylint-django = "==2.5.5" +django-extensions = "==3.2.3" + +[tool.poetry.extras] +typesense = ["typesense"] [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.pylint.master] -load-plugins = [ - "pylint_common", - "pylint_django", - "pylint_celery", -] +load-plugins = ["pylint_django"] +django-settings-module = "config.settings.testing" [tool.pylint.messages_control] disable = [ @@ -175,7 +184,7 @@ env = [ [tool.coverage.run] plugins = ["django_coverage_plugin"] -include = ["funkwhale_api/*"] +source = ["funkwhale_api"] omit = [ "*migrations*", "*tests*", diff --git a/api/tests/audio/test_serializers.py b/api/tests/audio/test_serializers.py index 9101e60b3..cdd3a3226 100644 --- a/api/tests/audio/test_serializers.py +++ b/api/tests/audio/test_serializers.py @@ -1,9 +1,9 @@ import datetime +import sys import uuid import feedparser import pytest -import pytz from django.templatetags.static import static from django.urls import reverse @@ -14,6 +14,11 @@ from funkwhale_api.federation import actors from funkwhale_api.federation import serializers as federation_serializers from funkwhale_api.federation import utils as federation_utils +if sys.version_info < (3, 9): + from backports.zoneinfo import ZoneInfo +else: + from zoneinfo import ZoneInfo + def test_channel_serializer_create(factories, mocker): attributed_to = factories["federation.Actor"](local=True) @@ -456,7 +461,7 @@ def test_rss_duration(seconds, expected): "dt, expected", [ ( - datetime.datetime(2020, 1, 30, 6, 0, 49, tzinfo=pytz.UTC), + datetime.datetime(2020, 1, 30, 6, 0, 49, tzinfo=ZoneInfo("UTC")), "Thu, 30 Jan 2020 06:00:49 +0000", ), ], @@ -678,7 +683,7 @@ def test_rss_feed_item_serializer_create(factories): assert upload.track.position == 33 assert upload.track.disc_number == 2 assert upload.track.creation_date == datetime.datetime(2020, 3, 11, 16).replace( - tzinfo=pytz.utc + tzinfo=ZoneInfo("UTC") ) assert upload.track.get_tags() == ["pop", "rock"] assert upload.track.attachment_cover.url == "https://image.url/" @@ -748,7 +753,7 @@ def test_rss_feed_item_serializer_update(factories): assert upload.track.position == 33 assert upload.track.disc_number == 2 assert upload.track.creation_date == datetime.datetime(2020, 3, 11, 16).replace( - tzinfo=pytz.utc + tzinfo=ZoneInfo("UTC") ) assert upload.track.get_tags() == ["pop", "rock"] assert upload.track.attachment_cover.url == "https://image.url/" diff --git a/api/tests/cli/test_users.py b/api/tests/cli/test_users.py index 5f0c63bdb..13aa62653 100644 --- a/api/tests/cli/test_users.py +++ b/api/tests/cli/test_users.py @@ -32,6 +32,22 @@ def test_user_create_handler(factories, mocker, now): assert user.all_permissions == expected_permissions +def test_user_implicit_staff(): + kwargs = { + "username": "helloworld", + "password": "securepassword", + "is_superuser": True, + "email": "hello@world.email", + "upload_quota": 35, + "permissions": ["moderation"], + } + user = users.handler_create_user(**kwargs) + + assert user.username == kwargs["username"] + assert user.is_superuser == kwargs["is_superuser"] + assert user.is_staff is True + + def test_user_delete_handler_soft(factories, mocker, now): user1 = factories["federation.Actor"](local=True).user actor1 = user1.actor diff --git a/api/tests/common/test_commands.py b/api/tests/common/test_commands.py index eb0d77f9e..8893827eb 100644 --- a/api/tests/common/test_commands.py +++ b/api/tests/common/test_commands.py @@ -1,5 +1,8 @@ +import os + import pytest from django.core.management import call_command +from django.core.management.base import CommandError from funkwhale_api.federation import models as federation_models from funkwhale_api.music import models as music_models @@ -97,3 +100,31 @@ def test_load_test_data_skip_dependencies(factories): assert music_models.Artist.objects.count() == 5 assert music_models.Album.objects.count() == 10 + + +commands = ["createsuperuser", "makemigrations"] + + +@pytest.mark.parametrize("command", commands) +def test_blocked_commands(command): + with pytest.raises(CommandError): + call_command(command) + + +@pytest.mark.parametrize("command", commands) +def test_unblocked_commands(command, mocker): + mocker.patch.dict(os.environ, {"FORCE": "1"}) + + call_command(command) + + +def test_inplace_to_s3_without_source(): + with pytest.raises(CommandError): + call_command("inplace_to_s3") + + +def test_inplace_to_s3_dryrun(factories): + upload = factories["music.Upload"](in_place=True, source="file:///music/music.mp3") + call_command("inplace_to_s3", "--source", "/music") + assert upload.source == "file:///music/music.mp3" + assert not upload.audio_file diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py index 2a7251ab8..ff37ca380 100644 --- a/api/tests/common/test_middleware.py +++ b/api/tests/common/test_middleware.py @@ -108,7 +108,7 @@ def test_get_default_head_tags(preferences, settings): { "tag": "meta", "property": "og:image", - "content": settings.FUNKWHALE_URL + "/front/favicon.png", + "content": settings.FUNKWHALE_URL + "/android-chrome-512x512.png", }, {"tag": "meta", "property": "og:url", "content": settings.FUNKWHALE_URL + "/"}, ] diff --git a/api/tests/common/test_throttling.py b/api/tests/common/test_throttling.py index 5445bfbc9..16cd44196 100644 --- a/api/tests/common/test_throttling.py +++ b/api/tests/common/test_throttling.py @@ -17,7 +17,7 @@ def test_get_ident_anonymous(api_request): def test_get_ident_authenticated(api_request, factories): user = factories["users.User"]() request = api_request.get("/") - expected = {"id": user.pk, "type": "authenticated"} + expected = {"id": f"{user.pk}", "type": "authenticated"} assert throttling.get_ident(user, request) == expected @@ -26,7 +26,7 @@ def test_get_ident_authenticated(api_request, factories): [ ( "create", - {"id": 42, "type": "authenticated"}, + {"id": "42", "type": "authenticated"}, "throttling:create:authenticated:42", ), ( diff --git a/api/tests/common/test_views.py b/api/tests/common/test_views.py index 7b08e50b4..1b4447a3d 100644 --- a/api/tests/common/test_views.py +++ b/api/tests/common/test_views.py @@ -160,7 +160,7 @@ def test_cannot_approve_reject_without_perm( def test_rate_limit(logged_in_api_client, now_time, settings, mocker): - expected_ident = {"type": "authenticated", "id": logged_in_api_client.user.pk} + expected_ident = {"type": "authenticated", "id": f"{logged_in_api_client.user.pk}"} expected = { "ident": expected_ident, diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index bd5b2e6cd..e8896e3bd 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -6,7 +6,7 @@ from funkwhale_api import __version__ as api_version from funkwhale_api.music.utils import SUPPORTED_EXTENSIONS -def test_nodeinfo_default(api_client): +def test_nodeinfo_20(api_client): url = reverse("api:v1:instance:nodeinfo-2.0") response = api_client.get(url) @@ -14,7 +14,7 @@ def test_nodeinfo_default(api_client): "version": "2.0", "software": OrderedDict([("name", "funkwhale"), ("version", api_version)]), "protocols": ["activitypub"], - "services": OrderedDict([("inbound", []), ("outbound", [])]), + "services": OrderedDict([("inbound", ["atom1.0"]), ("outbound", ["atom1.0"])]), "openRegistrations": False, "usage": { "users": OrderedDict( @@ -89,3 +89,74 @@ def test_nodeinfo_default(api_client): } assert response.data == expected + + +def test_nodeinfo_21(api_client): + url = reverse("api:v2:instance:nodeinfo-2.1") + response = api_client.get(url) + + expected = { + "version": "2.1", + "software": OrderedDict( + [ + ("name", "funkwhale"), + ("version", api_version), + ("repository", "https://dev.funkwhale.audio/funkwhale/funkwhale"), + ("homepage", "https://funkwhale.audio"), + ] + ), + "protocols": ["activitypub"], + "services": OrderedDict([("inbound", ["atom1.0"]), ("outbound", ["atom1.0"])]), + "openRegistrations": False, + "usage": { + "users": OrderedDict( + [("total", 0), ("activeHalfyear", 0), ("activeMonth", 0)] + ), + "localPosts": 0, + "localComments": 0, + }, + "metadata": { + "actorId": "https://test.federation/federation/actors/service", + "private": False, + "shortDescription": "", + "longDescription": "", + "contactEmail": "", + "nodeName": "", + "banner": None, + "defaultUploadQuota": 1000, + "supportedUploadExtensions": SUPPORTED_EXTENSIONS, + "allowList": {"enabled": False, "domains": None}, + "funkwhaleSupportMessageEnabled": True, + "instanceSupportMessage": "", + "usage": OrderedDict( + [ + ("favorites", OrderedDict([("tracks", {"total": 0})])), + ("listenings", OrderedDict([("total", 0)])), + ("downloads", OrderedDict([("total", 0)])), + ] + ), + "location": "", + "languages": ["en"], + "features": ["channels", "podcasts", "federation"], + "content": OrderedDict( + [ + ( + "local", + OrderedDict( + [ + ("artists", 0), + ("releases", 0), + ("recordings", 0), + ("hoursOfContent", 0), + ] + ), + ), + ("topMusicCategories", []), + ("topPodcastCategories", []), + ] + ), + "codeOfConduct": "", + }, + } + + assert response.data == expected diff --git a/api/tests/music/test_filters.py b/api/tests/music/test_filters.py index 4879b6f38..54fc60072 100644 --- a/api/tests/music/test_filters.py +++ b/api/tests/music/test_filters.py @@ -3,9 +3,32 @@ import pytest from funkwhale_api.music import filters, models +def test_artist_filter_ordering(factories, mocker): + # Lista de prueba + artist1 = factories["music.Artist"](name="Anita Muller") + artist2 = factories["music.Artist"](name="Jane Smith") + artist3 = factories["music.Artist"](name="Adam Johnson") + artist4 = factories["music.Artist"](name="anita iux") + + qs = models.Artist.objects.all() + + cf = factories["moderation.UserFilter"](for_artist=True) + + # Request con ordenamiento + filterset = filters.ArtistFilter( + {"ordering": "name"}, request=mocker.Mock(user=cf.user), queryset=qs + ) + + expected_order = [artist3.name, artist4.name, artist1.name, artist2.name] + actual_order = list(filterset.qs.values_list("name", flat=True)) + + assert actual_order == expected_order + + def test_album_filter_hidden(factories, mocker, queryset_equal_list): factories["music.Album"]() cf = factories["moderation.UserFilter"](for_artist=True) + hidden_album = factories["music.Album"](artist=cf.target_artist) qs = models.Album.objects.all() diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 43bb87dd3..b5b8a31e2 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1400,3 +1400,53 @@ def test_fs_import(factories, cache, mocker, settings): } assert cache.get("fs-import:status") == "finished" assert "Pruning dangling tracks" in cache.get("fs-import:logs")[-1] + + +def test_upload_checks_mbid_tag(temp_signal, factories, mocker, preferences): + preferences["music__only_allow_musicbrainz_tagged_files"] = True + mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") + mocker.patch("funkwhale_api.music.tasks.populate_album_cover") + mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") + track = factories["music.Track"](album__attachment_cover=None, mbid=None) + path = os.path.join(DATA_DIR, "with_cover.opus") + + upload = factories["music.Upload"]( + track=None, + audio_file__from_path=path, + import_metadata={"funkwhale": {"track": {"uuid": str(track.uuid)}}}, + ) + mocker.patch("funkwhale_api.music.models.TrackActor.create_entries") + + with temp_signal(signals.upload_import_status_updated): + tasks.process_upload(upload_id=upload.pk) + + upload.refresh_from_db() + + assert upload.import_status == "errored" + assert upload.import_details == { + "error_code": "Only content tagged with a MusicBrainz ID is permitted on this pod.", + "detail": "You can tag your files with MusicBrainz Picard", + } + + +def test_upload_checks_mbid_tag_pass(temp_signal, factories, mocker, preferences): + preferences["music__only_allow_musicbrainz_tagged_files"] = True + mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") + mocker.patch("funkwhale_api.music.tasks.populate_album_cover") + mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") + track = factories["music.Track"](album__attachment_cover=None, mbid=None) + path = os.path.join(DATA_DIR, "test.mp3") + + upload = factories["music.Upload"]( + track=None, + audio_file__from_path=path, + import_metadata={"funkwhale": {"track": {"uuid": str(track.uuid)}}}, + ) + mocker.patch("funkwhale_api.music.models.TrackActor.create_entries") + + with temp_signal(signals.upload_import_status_updated): + tasks.process_upload(upload_id=upload.pk) + + upload.refresh_from_db() + + assert upload.import_status == "finished" diff --git a/api/tests/radios/test_lb_recommendations.py b/api/tests/radios/test_lb_recommendations.py new file mode 100644 index 000000000..d495a2e0e --- /dev/null +++ b/api/tests/radios/test_lb_recommendations.py @@ -0,0 +1,116 @@ +import pytest +import troi.core +from django.core.cache import cache +from django.db.models import Q +from requests.exceptions import ConnectTimeout + +from funkwhale_api.music.models import Track +from funkwhale_api.radios import lb_recommendations +from funkwhale_api.typesense import factories as custom_factories +from funkwhale_api.typesense import utils + + +def test_can_build_radio_queryset_with_fw_db(factories, mocker): + factories["music.Track"]( + title="I Want It That Way", mbid="87dfa566-21c3-45ed-bc42-1d345b8563fa" + ) + factories["music.Track"]( + title="The Perfect Kiss", mbid="ec0da94e-fbfe-4eb0-968e-024d4c32d1d0" + ) + factories["music.Track"]() + + qs = Track.objects.all() + + mocker.patch("funkwhale_api.typesense.utils.resolve_recordings_to_fw_track") + + radio_qs = lb_recommendations.build_radio_queryset( + custom_factories.DummyPatch(), {"min_recordings": 1}, qs + ) + recommended_recording_mbids = [ + "87dfa566-21c3-45ed-bc42-1d345b8563fa", + "ec0da94e-fbfe-4eb0-968e-024d4c32d1d0", + ] + + assert list( + Track.objects.all().filter(Q(mbid__in=recommended_recording_mbids)) + ) == list(radio_qs) + + +def test_build_radio_queryset_without_fw_db(mocker): + resolve_recordings_to_fw_track = mocker.patch.object( + utils, "resolve_recordings_to_fw_track", return_value=None + ) + # mocker.patch.object(cache, "get_many", return_value=None) + + qs = Track.objects.all() + + with pytest.raises(ValueError): + lb_recommendations.build_radio_queryset( + custom_factories.DummyPatch(), {"min_recordings": 1}, qs + ) + + assert resolve_recordings_to_fw_track.called_once_with( + custom_factories.recommended_recording_mbids + ) + + +def test_build_radio_queryset_with_redis_and_fw_db(factories, mocker): + factories["music.Track"]( + pk="1", title="I Want It That Way", mbid="87dfa566-21c3-45ed-bc42-1d345b8563fa" + ) + mocker.patch.object(utils, "resolve_recordings_to_fw_track", return_value=None) + redis_cache = {} + redis_cache["ec0da94e-fbfe-4eb0-968e-024d4c32d1d0"] = 2 + mocker.patch.object(cache, "get_many", return_value=redis_cache) + + qs = Track.objects.all() + + assert list( + lb_recommendations.build_radio_queryset( + custom_factories.DummyPatch(), {"min_recordings": 1}, qs + ) + ) == list(Track.objects.all().filter(pk__in=[1, 2])) + + +def test_build_radio_queryset_with_redis_and_without_fw_db(factories, mocker): + factories["music.Track"]( + pk="1", title="Super title", mbid="87dfaaaa-2aaa-45ed-bc42-1d34aaaaaaaa" + ) + mocker.patch.object(utils, "resolve_recordings_to_fw_track", return_value=None) + redis_cache = {} + redis_cache["87dfa566-21c3-45ed-bc42-1d345b8563fa"] = 1 + mocker.patch.object(cache, "get_many", return_value=redis_cache) + qs = Track.objects.all() + + assert list( + lb_recommendations.build_radio_queryset( + custom_factories.DummyPatch(), {"min_recordings": 1}, qs + ) + ) == list(Track.objects.all().filter(pk=1)) + + +def test_build_radio_queryset_catch_troi_ConnectTimeout(mocker): + mocker.patch.object( + troi.core, + "generate_playlist", + side_effect=ConnectTimeout, + ) + qs = Track.objects.all() + + with pytest.raises(ValueError): + lb_recommendations.build_radio_queryset( + custom_factories.DummyPatch(), {"min_recordings": 1}, qs + ) + + +def test_build_radio_queryset_catch_troi_no_candidates(mocker): + mocker.patch.object( + troi.core, + "generate_playlist", + ) + qs = Track.objects.all() + + with pytest.raises(ValueError): + lb_recommendations.build_radio_queryset( + custom_factories.DummyPatch(), {"min_recordings": 1}, qs + ) diff --git a/api/tests/radios/test_radios.py b/api/tests/radios/test_radios.py index edef108f4..53c604681 100644 --- a/api/tests/radios/test_radios.py +++ b/api/tests/radios/test_radios.py @@ -2,8 +2,8 @@ import json import random import pytest -from django.core.exceptions import ValidationError from django.urls import reverse +from rest_framework.exceptions import ValidationError from funkwhale_api.favorites.models import TrackFavorite from funkwhale_api.radios import models, radios, serializers @@ -98,7 +98,7 @@ def test_can_get_choices_for_custom_radio(factories): session = factories["radios.CustomRadioSession"]( custom_radio__config=[{"type": "artist", "ids": [artist.pk]}] ) - choices = session.radio.get_choices(filter_playable=False) + choices = session.radio(api_version=1).get_choices(filter_playable=False) expected = [t.pk for t in tracks] assert list(choices.values_list("id", flat=True)) == expected @@ -191,16 +191,17 @@ def test_can_get_track_for_session_from_api(factories, logged_in_api_client): def test_related_object_radio_validate_related_object(factories): - user = factories["users.User"]() # cannot start without related object - radio = radios.ArtistRadio() + radio = {"radio_type": "tag"} + serializer = serializers.RadioSessionSerializer() with pytest.raises(ValidationError): - radio.start_session(user) + serializer.validate(data=radio) # cannot start with bad related object type - radio = radios.ArtistRadio() + radio = {"radio_type": "tag", "related_object": "whatever"} + serializer = serializers.RadioSessionSerializer() with pytest.raises(ValidationError): - radio.start_session(user, related_object=user) + serializer.validate(data=radio) def test_can_start_artist_radio(factories): @@ -391,7 +392,7 @@ def test_get_choices_for_custom_radio_exclude_artist(factories): {"type": "artist", "ids": [excluded_artist.pk], "not": True}, ] ) - choices = session.radio.get_choices(filter_playable=False) + choices = session.radio(api_version=1).get_choices(filter_playable=False) expected = [u.track.pk for u in included_uploads] assert list(choices.values_list("id", flat=True)) == expected @@ -409,7 +410,7 @@ def test_get_choices_for_custom_radio_exclude_tag(factories): {"type": "tag", "names": ["rock"], "not": True}, ] ) - choices = session.radio.get_choices(filter_playable=False) + choices = session.radio(api_version=1).get_choices(filter_playable=False) expected = [u.track.pk for u in included_uploads] assert list(choices.values_list("id", flat=True)) == expected diff --git a/api/tests/radios/test_radios_v2.py b/api/tests/radios/test_radios_v2.py new file mode 100644 index 000000000..85fc15db6 --- /dev/null +++ b/api/tests/radios/test_radios_v2.py @@ -0,0 +1,144 @@ +import json +import logging +import pickle +import random + +from django.core.cache import cache +from django.urls import reverse + +from funkwhale_api.favorites.models import TrackFavorite +from funkwhale_api.radios import models, radios_v2 + + +def test_can_get_track_for_session_from_api_v2(factories, logged_in_api_client): + actor = logged_in_api_client.user.create_actor() + track = factories["music.Upload"]( + library__actor=actor, import_status="finished" + ).track + url = reverse("api:v2:radios:sessions-list") + response = logged_in_api_client.post(url, {"radio_type": "random"}) + session = models.RadioSession.objects.latest("id") + + url = reverse("api:v2:radios:sessions-tracks", kwargs={"pk": session.pk}) + response = logged_in_api_client.get(url, {"session": session.pk}) + data = json.loads(response.content.decode("utf-8")) + + assert data[0]["id"] == track.pk + + next_track = factories["music.Upload"]( + library__actor=actor, import_status="finished" + ).track + response = logged_in_api_client.get(url, {"session": session.pk}) + data = json.loads(response.content.decode("utf-8")) + + assert data[0]["id"] == next_track.id + + +def test_can_use_radio_session_to_filter_choices_v2(factories): + factories["music.Upload"].create_batch(10) + user = factories["users.User"]() + radio = radios_v2.RandomRadio() + session = radio.start_session(user) + + radio.pick_many(quantity=10, filter_playable=False) + + # ensure 10 different tracks have been suggested + tracks_id = [ + session_track.track.pk for session_track in session.session_tracks.all() + ] + assert len(set(tracks_id)) == 10 + + +def test_session_radio_excludes_previous_picks_v2(factories, logged_in_api_client): + tracks = factories["music.Track"].create_batch(5) + url = reverse("api:v2:radios:sessions-list") + response = logged_in_api_client.post(url, {"radio_type": "random"}) + session = models.RadioSession.objects.latest("id") + url = reverse("api:v2:radios:sessions-tracks", kwargs={"pk": session.pk}) + + previous_choices = [] + + for i in range(5): + response = logged_in_api_client.get( + url, {"session": session.pk, "filter_playable": False} + ) + pick = json.loads(response.content.decode("utf-8")) + assert pick[0]["title"] not in previous_choices + assert pick[0]["title"] in [t.title for t in tracks] + previous_choices.append(pick[0]["title"]) + + response = logged_in_api_client.get(url, {"session": session.pk}) + assert ( + json.loads(response.content.decode("utf-8")) + == "Radio doesn't have more candidates" + ) + + +def test_can_get_choices_for_favorites_radio_v2(factories): + files = factories["music.Upload"].create_batch(10) + tracks = [f.track for f in files] + user = factories["users.User"]() + for i in range(5): + TrackFavorite.add(track=random.choice(tracks), user=user) + + radio = radios_v2.FavoritesRadio() + session = radio.start_session(user=user) + choices = session.radio(api_version=2).get_choices( + quantity=100, filter_playable=False + ) + + assert len(choices) == user.track_favorites.all().count() + + for favorite in user.track_favorites.all(): + assert favorite.track in choices + + +def test_can_get_choices_for_custom_radio_v2(factories): + artist = factories["music.Artist"]() + files = factories["music.Upload"].create_batch(5, track__artist=artist) + tracks = [f.track for f in files] + factories["music.Upload"].create_batch(5) + + session = factories["radios.CustomRadioSession"]( + custom_radio__config=[{"type": "artist", "ids": [artist.pk]}] + ) + choices = session.radio(api_version=2).get_choices( + quantity=1, filter_playable=False + ) + + expected = [t.pk for t in tracks] + for t in choices: + assert t.id in expected + + +def test_can_cache_radio_track(factories): + uploads = factories["music.Track"].create_batch(10) + user = factories["users.User"]() + radio = radios_v2.RandomRadio() + session = radio.start_session(user) + picked = session.radio(api_version=2).pick_many(quantity=1, filter_playable=False) + assert len(picked) == 1 + for t in pickle.loads(cache.get(f"radiotracks{session.id}")): + assert t in uploads + + +def test_regenerate_cache_if_not_enought_tracks_in_it( + factories, caplog, logged_in_api_client +): + logger = logging.getLogger("funkwhale_api.radios.radios_v2") + caplog.set_level(logging.INFO) + logger.addHandler(caplog.handler) + + factories["music.Track"].create_batch(10) + factories["users.User"]() + url = reverse("api:v2:radios:sessions-list") + response = logged_in_api_client.post(url, {"radio_type": "random"}) + session = models.RadioSession.objects.latest("id") + url = reverse("api:v2:radios:sessions-tracks", kwargs={"pk": session.pk}) + logged_in_api_client.get(url, {"count": 9, "filter_playable": False}) + response = logged_in_api_client.get(url, {"count": 10, "filter_playable": False}) + pick = json.loads(response.content.decode("utf-8")) + assert ( + "Not enough radio tracks in cache. Trying to generate new cache" in caplog.text + ) + assert len(pick) == 1 diff --git a/api/tests/test_init.py b/api/tests/test_init.py new file mode 100644 index 000000000..947879582 --- /dev/null +++ b/api/tests/test_init.py @@ -0,0 +1,5 @@ +def test_version(): + from funkwhale_api import __version__, version + + assert isinstance(version, str) + assert version == __version__ diff --git a/api/tests/test_urls.py b/api/tests/test_urls.py index 9e4449a32..e48861bc1 100644 --- a/api/tests/test_urls.py +++ b/api/tests/test_urls.py @@ -12,5 +12,5 @@ def test_can_resolve_subsonic(): def test_can_resolve_v2(): - path = reverse("api:v2:instance:nodeinfo-2.0") - assert path == "/api/v2/instance/nodeinfo/2.0" + path = reverse("api:v2:instance:nodeinfo-2.1") + assert path == "/api/v2/instance/nodeinfo/2.1" diff --git a/api/tests/typesense/test_tasks.py b/api/tests/typesense/test_tasks.py new file mode 100644 index 000000000..9e3506a5c --- /dev/null +++ b/api/tests/typesense/test_tasks.py @@ -0,0 +1,58 @@ +import logging + +import requests_mock +import typesense + +from funkwhale_api.typesense import tasks + + +def test_add_tracks_to_index_fails(mocker, caplog): + logger = logging.getLogger("funkwhale_api.typesense.tasks") + caplog.set_level(logging.INFO) + logger.addHandler(caplog.handler) + + client = typesense.Client( + { + "api_key": "api_key", + "nodes": [{"host": "host", "port": "port", "protocol": "protocol"}], + "connection_timeout_seconds": 2, + } + ) + + with requests_mock.Mocker() as r_mocker: + r_mocker.post( + "protocol://host:port/collections/canonical_fw_data/documents/import", + json=[{"name": "data"}], + ) + mocker.patch.object(typesense, "Client", return_value=client) + mocker.patch.object( + typesense.client.ApiCall, + "post", + side_effect=typesense.exceptions.TypesenseClientError("Hello"), + ) + tasks.add_tracks_to_index([1, 2, 3]) + assert "Can't build index" in caplog.text + + +def test_build_canonical_index_success(mocker, caplog, factories): + logger = logging.getLogger("funkwhale_api.typesense.tasks") + caplog.set_level(logging.INFO) + logger.addHandler(caplog.handler) + + client = typesense.Client( + { + "api_key": "api_key", + "nodes": [{"host": "host", "port": "port", "protocol": "protocol"}], + "connection_timeout_seconds": 2, + } + ) + + factories["music.Track"].create_batch(size=5) + + with requests_mock.Mocker() as r_mocker: + mocker.patch.object(typesense, "Client", return_value=client) + + r_mocker.post("protocol://host:port/collections", json={"name": "data"}) + + tasks.build_canonical_index() + assert "Launching async task to add " in caplog.text diff --git a/api/tests/typesense/test_utils.py b/api/tests/typesense/test_utils.py new file mode 100644 index 000000000..f4927cecc --- /dev/null +++ b/api/tests/typesense/test_utils.py @@ -0,0 +1,43 @@ +import requests_mock +import typesense +from django.core.cache import cache + +from funkwhale_api.typesense import factories as custom_factories +from funkwhale_api.typesense import utils + + +def test_resolve_recordings_to_fw_track(mocker, factories): + artist = factories["music.Artist"](name="artist_name") + factories["music.Track"]( + pk=1, + title="I Want It That Way", + artist=artist, + mbid="87dfa566-21c3-45ed-bc42-1d345b8563fa", + ) + factories["music.Track"]( + pk=2, + title="I Want It That Way", + artist=artist, + ) + + client = typesense.Client( + { + "api_key": "api_key", + "nodes": [{"host": "host", "port": "port", "protocol": "protocol"}], + "connection_timeout_seconds": 2, + } + ) + with requests_mock.Mocker() as r_mocker: + mocker.patch.object(typesense, "Client", return_value=client) + mocker.patch.object( + typesense.client.ApiCall, + "post", + return_value=custom_factories.typesense_search_result, + ) + r_mocker.get( + "protocol://host:port/collections/canonical_fw_data/documents/search", + json=custom_factories.typesense_search_result, + ) + + utils.resolve_recordings_to_fw_track(custom_factories.recording_list) + assert cache.get("87dfa566-21c3-45ed-bc42-1d345b8563fa") == "1" diff --git a/changes/template.md.j2 b/changes/template.md.j2 new file mode 100644 index 000000000..6393117f2 --- /dev/null +++ b/changes/template.md.j2 @@ -0,0 +1,28 @@ +## {{ versiondata.version }} ({{ versiondata.date }}) + +Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html + +{% for section, _ in sections.items() %} +{% if sections[section] %} +{% for category, val in definitions.items() if category in sections[section] %} +{{ definitions[category]['name'] }}: + +{% if definitions[category]['showcontent'] %} +{% for text in sections[section][category].keys() | sort() %} +- {{ text }} +{% endfor %} + +{% else %} + +- {{ sections[section][category][''] | join(', ') }} + +{% endif %} +{% if sections[section][category] | length == 0 %} +No significant changes. +{% else %} +{% endif %} +{% endfor %} +{% else %} +No significant changes. +{% endif %} +{% endfor %} diff --git a/changes/template.rst b/changes/template.rst deleted file mode 100644 index c344bc878..000000000 --- a/changes/template.rst +++ /dev/null @@ -1,33 +0,0 @@ -{{ versiondata.version }} ({{ versiondata.date }}) -{{ top_underline * ((versiondata.version + versiondata.date)|length + 3)}} - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -{% for section, _ in sections.items() %} -{% if sections[section] %} -{% for category, val in definitions.items() if category in sections[section]%} -{{ definitions[category]['name'] }}: - -{% if definitions[category]['showcontent'] %} -{% for text in sections[section][category].keys()|sort() %} -- {{ text }} -{% endfor %} - -{% else %} -- {{ sections[section][category]['']|join(', ') }} - -{% endif %} -{% if sections[section][category]|length == 0 %} -No significant changes. - -{% else %} -{% endif %} - -{% endfor %} -{% else %} -No significant changes. - - -{% endif %} -{% endfor %} diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 534dae393..b947a6dbc 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -92,3 +92,14 @@ services: ports: # override those variables in your .env file if needed - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" + + typesense: + restart: unless-stopped + env_file: + - .env + image: typesense/typesense:0.24.0 + volumes: + - ./typesense/data:/data + command: --data-dir /data --enable-cors + profiles: + - typesense diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index a4b297f20..ff9d5e4fe 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -1,7 +1,8 @@ upstream fw { - # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } + +# Required for websocket support. map $http_upgrade $connection_upgrade { default upgrade; '' close; @@ -10,15 +11,31 @@ map $http_upgrade $connection_upgrade { server { listen 80; listen [::]:80; + # update this to match your instance name server_name ${FUNKWHALE_HOSTNAME}; - location / { return 301 https://$host$request_uri; } + + # useful for Let's Encrypt + location /.well-known/acme-challenge/ { + allow all; + } + + location / { + return 301 https://$host$request_uri; + } } + server { listen 443 ssl http2; listen [::]:443 ssl http2; + server_name ${FUNKWHALE_HOSTNAME}; # TLS + # Feel free to use your own configuration for SSL here or simply remove the + # lines and move the configuration to the previous server block if you + # don't want to run funkwhale behind https (this is not recommended) + # have a look here for let's encrypt configuration: + # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx ssl_protocols TLSv1.2; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; @@ -29,12 +46,10 @@ server { # HSTS add_header Strict-Transport-Security "max-age=31536000"; - # Security related headers - # If you are using S3 to host your files, remember to add your S3 URL to the - # media-src and img-src headers (e.g. img-src 'self' https:// data:) - - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + # General configs + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -42,7 +57,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -61,10 +75,11 @@ server { text/vtt text/x-component text/x-cross-domain-policy; + # end of compression settings location / { include /etc/nginx/funkwhale_proxy.conf; - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://fw; + proxy_pass http://fw; } + } diff --git a/deploy/env.prod.sample b/deploy/env.prod.sample index a8f0bd624..1ea36c651 100644 --- a/deploy/env.prod.sample +++ b/deploy/env.prod.sample @@ -15,6 +15,9 @@ # Additional options you may want to check: # - MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH if you plan to use # in-place import +# - TYPESENSE_API_KEY if you want to enable typesense to experiment with +# the recommendation system set this. You can +# generate one using `openssl rand -base64 45`, for example # # Docker only # ----------- @@ -96,7 +99,7 @@ REVERSE_PROXY_TYPE=nginx # # If you want to use Redis over unix sockets, you'll actually need two variables: # For the cache part: -# CACHE_URL=redis:///run/redis/redis.sock?db=0 +# CACHE_URL=unix:///run/redis/redis.sock?db=0 # For the Celery/asynchronous tasks part: # CELERY_BROKER_URL=redis+socket:///run/redis/redis.sock?virtual_host=0 diff --git a/deploy/nginx.template b/deploy/nginx.template index 5ba2ccfa1..d306f8af4 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -1,10 +1,15 @@ -# This file was generated from Funkwhale's nginx.template upstream funkwhale-api { # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } +# Required for websocket support. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + server { listen 80; listen [::]:80; @@ -21,16 +26,10 @@ server { } } -# Required for websocket support. -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - server { listen 443 ssl http2; listen [::]:443 ssl http2; - charset utf-8; + server_name ${FUNKWHALE_HOSTNAME}; # TLS @@ -49,12 +48,11 @@ server { # HSTS add_header Strict-Transport-Security "max-age=31536000"; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; + # General configs root ${FUNKWHALE_FRONTEND_PATH}; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -62,7 +60,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -83,6 +80,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -90,17 +93,39 @@ server { proxy_pass http://funkwhale-api; } - location / { + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; alias ${FUNKWHALE_FRONTEND_PATH}/; + try_files $uri $uri/ /index.html; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; + alias ${FUNKWHALE_FRONTEND_PATH}/; try_files $uri $uri/ /index.html; } location ~ "/(front/)?embed.html" { + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; expires 1d; } @@ -158,7 +183,7 @@ server { # has been checked on API side. # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. internal; - alias ${MUSIC_DIRECTORY_SERVE_PATH}/; + alias ${MUSIC_DIRECTORY_PATH}/; add_header Access-Control-Allow-Origin '*'; } @@ -166,4 +191,8 @@ server { # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; } + + location /staticfiles/ { + alias ${STATIC_ROOT}/; + } } diff --git a/dev.yml b/dev.yml index c4fae3aac..444ec82b6 100644 --- a/dev.yml +++ b/dev.yml @@ -19,7 +19,7 @@ services: - "./po:/po" networks: - internal - command: "yarn dev --host --base /front/" + command: "yarn dev --host" postgres: env_file: @@ -71,7 +71,6 @@ services: - "DATABASE_URL=postgresql://postgres@postgres/postgres" - "CACHE_URL=redis://redis:6379/0" - "STATIC_ROOT=/staticfiles" - - "MEDIA_ROOT=/data/media" depends_on: - postgres @@ -103,7 +102,6 @@ services: - "FUNKWHALE_PROTOCOL=${FUNKWHALE_PROTOCOL-http}" - "DATABASE_URL=postgresql://postgres@postgres/postgres" - "CACHE_URL=redis://redis:6379/0" - - "MEDIA_ROOT=/data/media" volumes: - ./api:/app - "${MUSIC_DIRECTORY_SERVE_PATH-./data/music}:/music:ro" @@ -117,7 +115,6 @@ services: - "node3.funkwhale.test:172.17.0.1" nginx: - command: /entrypoint.sh env_file: - .env.dev - .env @@ -136,8 +133,7 @@ services: - api - front volumes: - - ./docker/nginx/conf.dev:/etc/nginx/nginx.conf.template:ro - - ./docker/nginx/entrypoint.sh:/entrypoint.sh:ro + - ./docker/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro - "${MUSIC_DIRECTORY_SERVE_PATH-./data/music}:/music:ro" - ./deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - "./front:/frontend:ro" @@ -156,15 +152,6 @@ services: traefik.frontend.passHostHeader: true traefik.docker.network: federation - docs: - build: docs - command: python3 serve.py - volumes: - - ".:/app/" - ports: - - "35730:35730" - - "8001:8001" - api-docs: image: swaggerapi/swagger-ui:v3.37.2 environment: @@ -175,6 +162,19 @@ services: - "./docs/swagger.yml:/usr/share/nginx/html/swagger.yml" - "./docs/api:/usr/share/nginx/html/api" + typesense: + env_file: + - .env.dev + - .env + image: typesense/typesense:0.24.0 + networks: + - internal + volumes: + - ./typesense/data:/data + command: --data-dir /data --enable-cors + profiles: + - typesense + # minio: # image: minio/minio # command: server /data @@ -193,5 +193,5 @@ services: networks: internal: federation: - external: - name: federation + name: federation + external: true diff --git a/docker-bake.json b/docker-bake.json new file mode 100644 index 000000000..95bda2c84 --- /dev/null +++ b/docker-bake.json @@ -0,0 +1,17 @@ +{ + "group": { + "default": { + "targets": ["api", "front"] + } + }, + "target": { + "api": { + "context": "api", + "target": "production" + }, + "front": { + "context": "front", + "target": "production" + } + } +} diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index 1270aa764..34bca7872 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -1,170 +1,167 @@ -user nginx; -worker_processes 1; +upstream funkwhale-api { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; +} -error_log /var/log/nginx/error.log warn; -pid /var/run/nginx.pid; +upstream funkwhale-front { + server ${FUNKWHALE_FRONT_IP}:${FUNKWHALE_FRONT_PORT}; +} - -events { - worker_connections 1024; +# Required for websocket support. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; } -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; +server { + listen 80; + listen [::]:80; - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; + server_name _; - access_log /var/log/nginx/access.log main; + # General configs + root /usr/share/nginx/html; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; - sendfile on; + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings - keepalive_timeout 65; + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; - upstream funkwhale-api { - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; - } - upstream funkwhale-front { - server ${FUNKWHALE_FRONT_IP}:${FUNKWHALE_FRONT_PORT}; - } - - # Required for websocket support. - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - server { - listen 80; - listen [::]:80; - charset utf-8; - client_max_body_size ${NGINX_MAX_BODY_SIZE}; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; + # This is needed if you have file import via upload enabled. + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api; + } - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location / { + expires 1d; + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; + } + + location = /embed.html { + proxy_pass http://funkwhale-front; + add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; - # compression settings - gzip on; - gzip_comp_level 5; - gzip_min_length 256; - gzip_proxied any; - gzip_vary on; + expires 1d; + } - gzip_types - application/javascript - application/vnd.geo+json - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - font/opentype - image/bmp - image/svg+xml - image/x-icon - text/cache-manifest - text/css - text/plain - text/vcard - text/vnd.rim.location.xloc - text/vtt - text/x-component - text/x-cross-domain-policy; - # end of compression settings + location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } - location /api/ { - include /etc/nginx/funkwhale_proxy.conf; - # This is needed if you have file import via upload enabled. - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api; - } + # You can comment this if you do not plan to use the Subsonic API. + location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; + } - location / { - proxy_pass http://funkwhale-front; - expires 1d; - } + location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } - location ~ "/(front/)?embed.html" { - add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; + # Allow direct access to only specific subdirectories in /media + location /media/__sized__/ { + alias ${MEDIA_ROOT}/__sized__/; + add_header Access-Control-Allow-Origin '*'; + } - proxy_pass http://funkwhale-front/embed.html; - expires 1d; - } + # Allow direct access to only specific subdirectories in /media + location /media/attachments/ { + alias ${MEDIA_ROOT}/attachments/; + add_header Access-Control-Allow-Origin '*'; + } - location /federation/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api; - } + # Allow direct access to only specific subdirectories in /media + location /media/dynamic_preferences/ { + alias ${MEDIA_ROOT}/dynamic_preferences/; + add_header Access-Control-Allow-Origin '*'; + } - # You can comment this if you do not plan to use the Subsonic API. - location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; - } - - location /media/__sized__/ { - alias /protected/media/__sized__/; - } - - location /media/attachments/ { - alias /protected/media/attachments/; - } - - location /.well-known/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api; - } - - # Allow direct access to only specific subdirectories in /media - location /media/__sized__/ { - alias /protected/media/__sized__/; - add_header Access-Control-Allow-Origin '*'; - } - - # Allow direct access to only specific subdirectories in /media - location /media/attachments/ { - alias /protected/media/attachments/; - add_header Access-Control-Allow-Origin '*'; - } - - # Allow direct access to only specific subdirectories in /media - location /media/dynamic_preferences/ { - alias ${MEDIA_ROOT}/dynamic_preferences/; - add_header Access-Control-Allow-Origin '*'; - } + # This is an internal location that is used to serve + # media (uploaded) files once correct permission / authentication + # has been checked on API side. + # Comment the "NON-S3" commented lines and uncomment "S3" commented lines + # if you're storing media files in a S3 bucket. + location ~ /_protected/media/(.+) { + internal; + alias ${MEDIA_ROOT}/$1; # NON-S3 + # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932. +# proxy_set_header Authorization ""; # S3 +# proxy_pass $1; # S3 + add_header Access-Control-Allow-Origin '*'; + } + location /_protected/music/ { # This is an internal location that is used to serve - # media (uploaded) files once correct permission / authentication + # local music files once correct permission / authentication # has been checked on API side. - # Comment the "NON-S3" commented lines and uncomment "S3" commented lines - # if you're storing media files in a S3 bucket. - location ~ /_protected/media/(.+) { - internal; - alias /protected/media/$1; # NON-S3 - # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932. -# proxy_set_header Authorization ""; # S3 -# proxy_pass $1; # S3 - add_header Access-Control-Allow-Origin '*'; - } + # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. + internal; + alias ${MUSIC_DIRECTORY_PATH}/; + add_header Access-Control-Allow-Origin '*'; + } - location /_protected/music/ { - # This is an internal location that is used to serve - # local music files once correct permission / authentication - # has been checked on API side. - # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. - internal; - alias /music/; - add_header Access-Control-Allow-Origin '*'; - } + location /manifest.json { + # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL + return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; + } - location /manifest.json { - # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL - return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; - } + location /staticfiles/ { + alias /usr/share/nginx/html/staticfiles/; } } diff --git a/docker/nginx/entrypoint.sh b/docker/nginx/entrypoint.sh deleted file mode 100755 index 225eac359..000000000 --- a/docker/nginx/entrypoint.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -set -eux - -TEMPLATE_PATH="/etc/nginx/nginx.conf.template" -CONFIG_PATH="/etc/nginx/nginx.conf" - -ALLOWED_VARS="$(env | cut -d '=' -f 1 | xargs printf "\${%s} ")" -envsubst "$ALLOWED_VARS" < "$TEMPLATE_PATH" | tee "$CONFIG_PATH" - -nginx-debug -g 'daemon off;' diff --git a/docker/traefik.yml b/docker/traefik.yml index f495a6b42..5856a620f 100644 --- a/docker/traefik.yml +++ b/docker/traefik.yml @@ -17,5 +17,5 @@ services: networks: federation: - external: - name: federation + name: federation + external: true diff --git a/docs/Dockerfile b/docs/Dockerfile deleted file mode 100644 index 370e0b7aa..000000000 --- a/docs/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM python:3.11 - -RUN apt-get update && apt-get install -y graphviz -RUN pip install sphinx livereload sphinx_rtd_theme django-environ django myst-parser sphinx-design sphinx-multiversion sphinxcontrib-mermaid sphinx-copybutton -WORKDIR /app/docs diff --git a/docs/Makefile b/docs/Makefile index 083dae580..055b8cbe2 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,20 +1,85 @@ -# Minimal makefile for Sphinx documentation -# +SHELL = bash +UNAME := $(shell uname) +ifeq ($(UNAME), Linux) +CPU_CORES = $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) +else +CPU_CORES = $(shell N=$$(sysctl -n hw.physicalcpu); echo $$(( $$N > 4 ? 4 : $$N ))) +endif -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = python3 -msphinx -SPHINXPROJ = funkwhale -SOURCEDIR = . -BUILDDIR = _build +# Install +VENV = .venv +export POETRY_VIRTUALENVS_IN_PROJECT=true -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +$(VENV): + $(MAKE) install -.PHONY: help Makefile +install: + poetry install + poetry run pip install --no-deps --editable ../api -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +clean: + git clean -xdf . + +# Sphinx +SPHINX_OPTS = -j $(CPU_CORES) +SOURCE_DIR = . +BUILD_DIR = _build + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +# Dev +dev: $(VENV) + poetry run sphinx-autobuild . /tmp/_build/ --port 8001 + +# I18n +LOCALES = en_GB en_US fr + +locale-generate: $(VENV) + poetry run sphinx-build -b gettext $(SOURCE_DIR) locales/gettext $(SPHINX_OPTS) + +locale-update: $(VENV) + poetry run sphinx-intl update -p locales/gettext $(foreach locale,$(LOCALES),-l $(locale)) + +locale-prune-untranslated: $(VENV) + poetry run _scripts/locale-prune-untranslated.py + +# Swagger +SWAGGER_VERSION = 5.1.2 +SWAGGER_RELEASE_URL = https://github.com/swagger-api/swagger-ui/archive/refs/tags/v$(SWAGGER_VERSION).tar.gz +SWAGGER_BUILD_DIR = swagger + +swagger: + mkdir "$(SWAGGER_BUILD_DIR)" + curl -sSL "$(SWAGGER_RELEASE_URL)" | \ + tar --extract \ + --gzip \ + --directory="$(SWAGGER_BUILD_DIR)" \ + --strip-components=2 \ + "swagger-ui-$(SWAGGER_VERSION)/dist" + + sed -i \ + "s#https://petstore.swagger.io/v2/swagger.json#schema.yml#g" \ + "$(SWAGGER_BUILD_DIR)/swagger-initializer.js" + + cp schema.yml "$(SWAGGER_BUILD_DIR)/schema.yml" + +# Releases +$(BUILD_DIR)/releases.json: $(BUILD_DIR) + ../scripts/releases.py > "$@" + +$(BUILD_DIR)/latest.txt: $(BUILD_DIR) + ../scripts/releases.py -r -q latest.id > "$@" + +releases: $(BUILD_DIR)/releases.json $(BUILD_DIR)/latest.txt + +# Build +build: $(VENV) + poetry run sphinx-build $(SOURCE_DIR) $(BUILD_DIR) $(SPHINX_OPTS) + +build-translated: $(VENV) locale-prune-untranslated + for locale in $(LOCALES); do \ + poetry run sphinx-build $(SOURCE_DIR) $(BUILD_DIR)/$$locale $(SPHINX_OPTS) -D language=$$locale; \ + done + +build-all: build build-translated releases swagger diff --git a/docs/_scripts/locale-prune-untranslated.py b/docs/_scripts/locale-prune-untranslated.py new file mode 100755 index 000000000..57b4d8c48 --- /dev/null +++ b/docs/_scripts/locale-prune-untranslated.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +import os +from subprocess import check_output + + +def main() -> int: + output = check_output(["poetry", "run", "sphinx-intl", "stat"], text=True) + for line in output.splitlines(): + path, _, comment = line.partition(":") + if "0 untranslated." in comment: + print(f"removing untranslated po file: {path}") + os.unlink(path) + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/docs/administrator/configuration/instance-settings.md b/docs/administrator/configuration/instance-settings.md index 51ef4dbda..085be5a04 100644 --- a/docs/administrator/configuration/instance-settings.md +++ b/docs/administrator/configuration/instance-settings.md @@ -111,6 +111,9 @@ Transcoding enabled Transcoding cache duration The number of minutes you want to store transcoded files on your server. Funkwhale removes transcoded tracks that haven't been downloaded within this duration to save space. +Only allow MusicBrainz tagged files + If enabled, only files tagged with a [MusicBrainz ID](https://musicbrainz.org/doc/MusicBrainz_Identifier) can be uploaded to the server. Users can use [MusicBrainz Picard](https://picard.musicbrainz.org/) to tag their content with a MBID. Enabling this setting **does not** remove files uploaded before the setting was enabled. + ``` ### Channels diff --git a/docs/administrator/installation/debian.md b/docs/administrator/installation/debian.md index 4a7f134b5..36a8116f6 100644 --- a/docs/administrator/installation/debian.md +++ b/docs/administrator/installation/debian.md @@ -266,7 +266,7 @@ You can create several superusers. To start using Funkwhale, you need to create a superuser for your pod. This user has all the permissions needed to administrate the pod. Follow these steps to create a superuser. ```{code-block} sh -sudo -u funkwhale venv/bin/funkwhale-manage createsuperuser +sudo -u funkwhale venv/bin/funkwhale-manage fw users create --superuser ``` That's it! You can log in as this user when you finish setting up Funkwhale. diff --git a/docs/administrator/installation/docker.md b/docs/administrator/installation/docker.md index c1534fe03..fde0907a5 100644 --- a/docs/administrator/installation/docker.md +++ b/docs/administrator/installation/docker.md @@ -154,7 +154,7 @@ Once you've filled in your environment file, you can set up Funkwhale. Follow th 4. Create your superuser. ```{code-block} sh - sudo docker compose run --rm api funkwhale-manage createsuperuser + sudo docker compose run --rm api funkwhale-manage fw users create --superuser ``` 5. Launch all the containers to bring up your pod. diff --git a/docs/administrator/installation/third-party.md b/docs/administrator/installation/third-party.md index 45c50fe4a..bc0460800 100644 --- a/docs/administrator/installation/third-party.md +++ b/docs/administrator/installation/third-party.md @@ -8,3 +8,4 @@ These installation methods are not provided by the Funkwhale project. If you hav - [Kubernetes helm chart](https://gitlab.com/ananace/charts/) - [HomelabOS](https://homelabos.com/docs/software/funkwhale/) - [Docker swarm](https://github.com/fedeb95/funkwhale-swarm) +- [MASH playbook](https://github.com/mother-of-all-self-hosting/mash-playbook): an Ansible playbook for self-hosting FOSS projects. Check [their Funkwhale documentation](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/services/funkwhale.md) for setup information. diff --git a/docs/administrator/manage-script/index.md b/docs/administrator/manage-script/index.md index caa299ed2..5b2aa9ebf 100644 --- a/docs/administrator/manage-script/index.md +++ b/docs/administrator/manage-script/index.md @@ -15,5 +15,6 @@ Clean database Add album and artist tags thumbnails fix-uploads +update-s3-links ``` diff --git a/docs/administrator/manage-script/update-s3-links.md b/docs/administrator/manage-script/update-s3-links.md new file mode 100644 index 000000000..4aceefbe1 --- /dev/null +++ b/docs/administrator/manage-script/update-s3-links.md @@ -0,0 +1,153 @@ +# Update in-place location reference for S3 + +If you've moved your content from a local disk to S3 storage, you need to update the location of any files you imported using `--in-place`. To ensure you don't update entries by accident, all commands run in dry run mode by default. Run commands with the `--no-dry-run` flag to update the references. + +:::{note} +This command doesn't move files. It only updates the location of the file to its S3 location based on [the S3 settings in your environment file](/administrator/configuration/object-storage). +::: + +:::{list-table} Arguments +:header-rows: 1 + +- - Argument + - Description +- - `source` + - The source directory of your in-place import. + + If no `source` is specified, all in-place imported tracks are updated. + +- - `target` + - The subdirectory in the S3 bucket where the files are now located. + + If no `target` is specified, the current path of the file is used. + +::: + +## Examples + +### Update all in-place imports + +::::{tab-set} + +:::{tab-item} Debian +:sync: debian + +1. SSH into your Funkwhale server. +2. Navigate to the Funkwhale directory. + + ```{code-block} console + $ cd /srv/funkwhale + ``` + +3. Run the `funkwhale-manage` command line interface to update your in-place imports. + + ```{code-block} console + $ venv/bin/funkwhale-manage fw inplace_to_s3 --no-dry-run + ``` + +::: + +:::{tab-item} Docker +:sync: docker + +1. SSH into your Funkwhale server. +2. Navigate to the Funkwhale directory. + + ```{code-block} console + $ cd /srv/funkwhale + ``` + +3. Run the `funkwhale-manage` command line interface to update your in-place imports. + + ```{code-block} console + $ sudo docker compose run --rm api funkwhale-manage inplace_to_s3 --no-dry-run + ``` + +::: +:::: + +### Update in-place imports from a specific directory + +::::{tab-set} + +:::{tab-item} Debian +:sync: debian + +1. SSH into your Funkwhale server. +2. Navigate to the Funkwhale directory. + + ```{code-block} console + $ cd /srv/funkwhale + ``` + +3. Run the `funkwhale-manage` command line interface to update your in-place imports. + + ```{code-block} console + $ venv/bin/funkwhale-manage fw inplace_to_s3 --source "/music" --no-dry-run + ``` + +::: + +:::{tab-item} Docker +:sync: docker + +1. SSH into your Funkwhale server. +2. Navigate to the Funkwhale directory. + + ```{code-block} console + $ cd /srv/funkwhale + ``` + +3. Run the `funkwhale-manage` command line interface to update your in-place imports. + + ```{code-block} console + $ sudo docker compose run --rm api funkwhale-manage inplace_to_s3 --source "/music" --no-dry-run + ``` + +::: +:::: + +All in-place imports in the `/music` folder are updated to reference the `/music` subdirectory in your S3 bucket. + +### Reference a different target subdirectory + +::::{tab-set} + +:::{tab-item} Debian +:sync: debian + +1. SSH into your Funkwhale server. +2. Navigate to the Funkwhale directory. + + ```{code-block} console + $ cd /srv/funkwhale + ``` + +3. Run the `funkwhale-manage` command line interface to update your in-place imports. + + ```{code-block} console + $ venv/bin/funkwhale-manage fw inplace_to_s3 --source "/music" --target "/new_import" --no-dry-run + ``` + +::: + +:::{tab-item} Docker +:sync: docker + +1. SSH into your Funkwhale server. +2. Navigate to the Funkwhale directory. + + ```{code-block} console + $ cd /srv/funkwhale + ``` + +3. Run the `funkwhale-manage` command line interface to update your in-place imports. + + ```{code-block} console + $ sudo docker compose run --rm api funkwhale-manage inplace_to_s3 --source "/music" --target "/new_import" --no-dry-run + ``` + +::: +:::: + +All in-place imports in the `/music` folder are updated to reference the `/new_import` subdirectory in your S3 bucket. diff --git a/docs/administrator/migration.md b/docs/administrator/migration.md index bed397286..b15d11b9a 100644 --- a/docs/administrator/migration.md +++ b/docs/administrator/migration.md @@ -126,6 +126,6 @@ Check the file and remove any duplicated settings after copying. Once you have imported your database and run migrations, you can start all containers. -```{code-block} sh -sudo docker compose up -d +```console +# docker compose up -d ``` diff --git a/docs/administrator/upgrade/backup.md b/docs/administrator/upgrade/backup.md index 6ef6eb0a7..bd5d72fbe 100644 --- a/docs/administrator/upgrade/backup.md +++ b/docs/administrator/upgrade/backup.md @@ -9,8 +9,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - sudo -u postgres -H pg_dumpall -c funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql + ```console + $ sudo -u postgres -H pg_dumpall -c funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql ``` ::: @@ -18,8 +18,16 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - sudo docker compose exec postgres pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql + 1. Stop the running containers: + + ```console + $ sudo docker compose down + ``` + + 2. Dump the database to a backup file: + + ```console + $ sudo docker compose run --rm postgres pg_dump -U postgres postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql ``` ::: @@ -32,9 +40,9 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media - rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music + ```console + $ rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media + $ rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music ``` ::: @@ -42,10 +50,9 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - - rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media - rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music + ```console + $ rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media + $ rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music ``` ::: @@ -58,8 +65,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env + ```console + $ rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env ``` ::: @@ -67,8 +74,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env + ```console + $ rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env ``` ::: @@ -84,16 +91,16 @@ To restart your files, do the following: 1. Rename your current file directories. - ```{code-block} sh - mv /srv/funkwhale/data/media /srv/funkwhale/data/media.bak - mv /srv/funkwhale/data/music /srv/funkwhale/data/music.bak + ```console + $ mv /srv/funkwhale/data/media /srv/funkwhale/data/media.bak + $ mv /srv/funkwhale/data/music /srv/funkwhale/data/music.bak ``` 2. Restore your backed-up files to the original directories. - ```{code-block} sh - mv /patht/to/your/backup/media /srv/funkwhale/data/media - mv /path/to/your/backup/music /srv/funkwhale/data/music + ```console + $ mv /path/to/your/backup/media /srv/funkwhale/data/media + $ mv /path/to/your/backup/music /srv/funkwhale/data/music ``` ### Restore the database @@ -107,15 +114,15 @@ To restore your database, do the following: 1. Restore your database backup: - ```{code-block} sh - sudo -u postgres psql -f /path/to/your/backup/dump.sql funkwhale + ```console + $ sudo -u postgres psql -f /path/to/your/backup/dump.sql funkwhale ``` 2. Run the `funkwhale-manage migrate` command to set up the database. - ```{code-block} sh - cd /srv/funkwhale - venv/bin/funkwhale-manage migrate + ```console + $ cd /srv/funkwhale + $ venv/bin/funkwhale-manage migrate ``` ::: @@ -125,14 +132,20 @@ To restore your database, do the following: 1. Restore your database backup. - ```{code-block} sh - sudo docker compose run --rm -T postgres psql -U postgres postgres < "/path/to/your/backup/dump.sql" + ```console + $ sudo docker compose run --rm -T postgres psql -U postgres postgres < "/path/to/your/backup/dump.sql" ``` 2. Run the `funkwhale-manage migrate` command to set up the database. - ```{code-block} sh - sudo docker compose run --rm api funkwhale-manage migrate + ```console + $ sudo docker compose run --rm api funkwhale-manage migrate + ``` + +3. Restart the services. + + ```console + $ sudo docker compose up -d ``` ::: diff --git a/docs/administrator/upgrade/docker.md b/docs/administrator/upgrade/docker.md index 0427aee44..d9ed5698d 100644 --- a/docs/administrator/upgrade/docker.md +++ b/docs/administrator/upgrade/docker.md @@ -92,7 +92,7 @@ To update your Postgres container, follow these steps: 2. Create a backup of your Funkwhale database. We will import this into the new postgres container later. ```console - # docker compose exec -i postgres pg_dump -U postgres postgres > db_dump.sql + # docker compose run --rm postgres pg_dump -U postgres postgres > db_dump.sql ``` 3. Move the {file}`data/postgres` directory to another location to back it up @@ -136,8 +136,8 @@ To update your Postgres container, follow these steps: Once you've updated your Postgres containers, you need to migrate your database. To do this: :::{include} /administrator/migration.md -:start-line: 112 -:end-line: 129 +:start-line: 105 +:end-line: 132 ::: :::{seealso} diff --git a/docs/build_docs.sh b/docs/build_docs.sh deleted file mode 100755 index 6aa719a76..000000000 --- a/docs/build_docs.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -set -eux - -# We clean up translations, only fully translated components are kept -IFS=$'\n' - -for i in $(poetry run sphinx-intl stat); do - echo "$i" - if [[ "$i" != *" 0 untranslated." ]]; then - file=$(echo "$i" | cut -d: -f1) - echo "delete $file" - rm "$file" - fi -done - -# Build sphinx -poetry run sphinx-build . "$BUILD_PATH" -for path in locales/*; do - lang="$(basename "$path")" - if [[ "$lang" != "gettext" ]]; then - poetry run sphinx-build -D language="$lang" . "$BUILD_PATH/$lang" - fi -done - -# Build swagger -TARGET_PATH="$BUILD_PATH/swagger" ./build_swagger.sh -python3 ./get-releases-json.py > "$BUILD_PATH/releases.json" -python3 ./get-releases-json.py --latest > "$BUILD_PATH/latest.txt" diff --git a/docs/build_swagger.sh b/docs/build_swagger.sh deleted file mode 100755 index 1dc8419e8..000000000 --- a/docs/build_swagger.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -eux - -SWAGGER_VERSION="4.15.5" -TARGET_PATH=${TARGET_PATH-"swagger"} - -rm -rf "$TARGET_PATH" -tmpdir="$(mktemp -d)" -trap 'rm -rf "$tmpdir"' EXIT - -pushd "$tmpdir" -wget "https://github.com/swagger-api/swagger-ui/archive/refs/tags/v$SWAGGER_VERSION.tar.gz" -O swagger-ui.tgz -tar -xzf swagger-ui.tgz -popd -mv "$tmpdir/"*/dist "$TARGET_PATH" -cp schema.yml "$TARGET_PATH" - -sed -i "s#https://petstore.swagger.io/v2/swagger.json#schema.yml#g" "$TARGET_PATH/swagger-initializer.js" diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 000000000..67c32d358 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,2 @@ +:::{include} ../CHANGELOG.md +::: diff --git a/docs/changelog.rst b/docs/changelog.rst deleted file mode 100644 index 491ea7340..000000000 --- a/docs/changelog.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../CHANGELOG diff --git a/CHANGELOG b/docs/changes/funkwhale-0-changelog.md similarity index 54% rename from CHANGELOG rename to docs/changes/funkwhale-0-changelog.md index 75f74ab54..6b19b452c 100644 --- a/CHANGELOG +++ b/docs/changes/funkwhale-0-changelog.md @@ -1,1663 +1,6 @@ -Changelog -========= +# Funkwhale 0.x changelog -You can subscribe to release announcements by: - -- Following `@funkwhale@fosstodon.org `_ on Mastodon -- Subscribing to the following Atom feed: https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag - -This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.html. - -.. towncrier - -1.3.4 (2023-11-16) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Remove dangling dependency howler - - -Documentation: - -- Fix a redirect loop on documentation for moderators - -Contributors to our Merge Requests: - -- Georg Krause -- Thomas - -Committers: - -- Georg Krause - - -1.3.3 (2023-09-07) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Revert changed logging to fix crashes - -Contributors to our Issues: - -- Alexandra Parker -- Aurelien Vaillant -- ChengChung -- Ciarán Ainsworth -- Georg Krause -- Johann Queuniet -- Kasper Seweryn -- Mathieu Jourdan -- Nicolas Derive -- Puniko Nyan -- Thomas -- petitminion -- philip ballinger - -Contributors to our Merge Requests: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Marcos Peña -- jooola -- petitminion - - -1.3.2 (2023-09-01) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Enable sourcemaps for production builds -- Use logger composable instead of window.console - - -Bugfixes: - -- Clear shuffled id list on queue clear (#2192) -- Fetch the nodeinfo endpoint from .well-known/nodeinfo when checking instance availability -- Fix instance checking its own availability (#2199) -- Fix multiarch docker builds #2211 -- Fix ordering when querystring contains `+` prefix - Resolve multiple updates to ordering fields -- Fix password reset via email -- Make podcast episode pagination reactive (#2205) -- Render HTML in podcast short description (#2206) -- Resolve race condition regarding axios when initializing the frontend - Prevent sending same language setting to backend multiple times - - -Documentation: - -- Fixed incorrect upgrade instructions link in docs. - -Contributors to our Issues: - -- Ciarán Ainsworth -- Georg Krause -- Kasper Seweryn -- Kay Borowski -- Marcos Peña -- Mathieu Jourdan -- Virgile Robles -- codl -- jooola -- petitminion -- tinglycraniumplacidly -- unkn0wwn52 - -Contributors to our Merge Requests: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Marcos Peña -- Virgile Robles -- codl -- jooola -- petitminion - -Committers: - -- Ciarán Ainsworth -- codl -- Georg Krause -- jo -- Kasper Seweryn -- petitminion - - -1.3.1 (2023-06-27) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Dynamically add report targets to the map to avoid missing keys (#2121) -- Fix location of the nginx config template for docker deployments (#2146) -- Fix pagination on search page (#2134) -- Fix Prune skipped uploads is OOM killed (#2136) -- Fixed Fomantic UI dropdown messing with Vue internals in radio builder (#2142) -- Fixed premature login redirect on podcast detail page (#2155) -- Fixed stale data in indexedDB after logout (#2133) -- Make sure dependency pins are working with pip install (Restores python3.7 support) -- Make sure embed codes generated before 1.3.0 are still working -- Make sure the SPA Manifest is fetched using the right protocol (#2151) -- Moved modals above all content (#2154) -- Raise SystemExit exception in API manage.py script -- Remove track from cache when it gets disposed outside of the cache handler (#2157) -- Standardize instanceUrl value in instance store (#2113) -- Fix for banner images not being served on pods. -- Fixed PWA Window theme color. - -Documentation: - -- Fix instructions for using custom nginx configurations in our documentation - -Other: - -- Don't run CI on branch containing stable or develop - -Contributors to our Issues: - -- AMoonRabbit -- Asier Iturralde Sarasola -- Bertille D. -- Casuallynoted -- Ciarán Ainsworth -- Daniel Jeller -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Mathieu Jourdan -- NaiveTub -- Ricardo -- Virgile Robles -- nouts -- petitminion - -Contributors to our Merge Requests: - -- AMoonRabbit -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- jooola -- petitminion - -Committers: - -- AMoonRabbit -- Georg Krause -- jo -- JuniorJPDJ -- Kasper Seweryn -- Moon Rabbit -- Petitminion - - -1.3.0 (2023-06-01) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Update instructions: - -- If you are running the docker deployment, make sure to update our compose file. - In this small example we show you how to save the old config and update it - correctly: - - .. code-block:: - - export FUNKWHALE_VERSION="1.3.0" - cd /srv/funkwhale - docker-compose down - mv docker-compose.yml docker-compose.bak - curl -L -o /srv/funkwhale/docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml" - - .. note:: - If you need to customize your nginx template, e.g. to work around `problems with - Docker's resolver `_, you can mount your - custom nginx configuration into the container. Uncomment the commented volumes in the ``nginx`` section of your ``docker-compose.yml``. - Additionally you need to update the paths in ``nginx/funkwhale.template``. - Replace all occurrences of ``/funkwhale`` by ``/usr/share/nginx/html``. - This loads the templates from your ``nginx`` folder and overrides the template files in the Docker container. - - .. code-block:: - - docker-compose up -d - -- The Docker instructions now use the updated Docker compose plugin. If you previously used the ``docker-compose`` standalone installation, do the following while upgrading: - - 1. Download the `Docker compose plugin `_ - 2. Stop your containers using the **docker-compose** syntax. - - .. code-block:: sh - - sudo docker-compose down - - 3. Bring the containers back up using the **docker compose** syntax. - - .. code-block:: sh - - sudo docker compose up -d - - After this you can continue to use the **docker compose** syntax for all Docker management tasks. -- Upgrade Postgres to version 15. `Make sure to migrate! `_ -- With this update Funkwhale starts using poetry to maintain its dependencies. We therefore recommend - removing the old virtualenv by running ``rm -rf /srv/funkwhale/virtualenv``. - - -Features: - -- Add a management command to create a new library for a user -- Add Gitpod configuration and guide -- Add Sentry SDK to collect #1479 -- Prepare API for the upcoming version 2 -- Rewrite player to be based on Web Audio API - - -Enhancements: - -- Add a celery task to scan remote library (#1712) -- Add coverage report for Frontend Tests -- Add hint which serializer is used for OembedView (#1901) -- Add music visualizer (#1135) -- Add playable tracks to gitpod instance -- Add playlists radio to search page (#1968) -- Add proper serialization for TextPreviewView (#1903) -- Add python debug and test support for gitpod -- Add Serializer for SpaManifest endpoint -- Add support for python 3.11 -- Added proper serializers for the rate-limit endpoint. -- Added type hints to the API. -- Adding support for play all radio in search result page (#1563) -- All administrator documentation has been rewritten to improve clarity and update outdated information. -- Allow arbitrary length names for artists, albums and tracks -- Allow installing the funkwhale_api package -- Allow using default browser dark mode and update UI dynamically on change -- Apply migrations on API container start (!1879) -- Automatically fetch next page of tracks (#1526) -- Build frontend natively for cross-arch docker images -- Change unmaintained PyMemoize library to django-cache-memoize - to enable Python 3.10 support -- Cleaned up frontend docker container -- Cleanup Gitlab CI and Dockerfiles (!1796) -- Create the funkwhale-manage entrypoint in the api package -- Created migration guide for the deprecated all-in-one docker container. -- Don't buffer python stdout/err in docker -- Don't compile python byte code in docker -- Don't use poetry in production deployments -- Drop direct dependency on pyopenssl (#1975) -- Exclude /api/v1/oauth/authorize from the specs since its not supported yet (#1899) -- Fix openapi specs for user endpoints (#1892, #1894) -- Fix Serializer for inline channel artists (#1833) -- Fix specs for ListenViewSet (#1898) -- Handle PWA correctly and provide better cache strategy for album covers (#1721) -- Improve docker caching -- Improve specification of LibraryFollowViewSet (#1896) -- Install API python package in docker image -- Make CI always run all tests on protected branches. -- Make mutations endpoint appear in openapi specs -- Make Python 3.10 tests in CI mandatory -- Make sure ChannelViewSet always has a serializer (#1895) -- Migrate to new queue system from old localStorage keys -- Migrate to Vue 3 -- Migrate to vue-i18n (#1831) - Fix locale changing (#1862) -- Migrated to sphinx-design. -- New task checking if remote instance is reachable to avoid playback latence (#1711) -- OAuth Application client secrets are now hashed before storing them to the DB. Those are only displayed once from now on! -- Parameterize the default S3 ACL when uploading objects. (#1319) -- Pin Alpine package versions in API Dockerfile (fixes part of CI build issues). -- Prefer using the funkwhale-manage entrypoint -- Prevent running two pipelines for MRs -- Random and less listened radio filter out un-owned content on library section (#2007) -- Refactor node info endpoint to use proper serializers -- Refactor SettingsView to use a proper serializer -- Remove unnecessary or wrong `is` keyword usage from backend -- Rename OpenAPI schema's operation ids for nicer API client method names. -- Replace django-channels package with web socket implementation from @vueuse/core (#1715) -- Retry fetching new radio track 5 times if error occurred before resetting radio session (#2022) -- Rewrite embedded player to petite-vue -- Split DATABASE_URL into multiple configuration variables -- The ListenBrainz plugin submits the track duration -- Update Django OAuth Toolkit to version 2, ref #1944 -- Update migration after django update (#1815) -- Update upload status when import fails (#1999) -- Updated the installation guides to make installation steps clearer. -- Upgrade docker base image to alpine 3.17 -- Use proper serializer for Search endpoint (#1902) - - -Refactoring: - -- Instead of requesting the right spa content from the API using a middleware we now serve the - Frontend directly with nginx and only proxy-forward for API endpoints -- Replace django-rest-auth with dj-rest-auth (#1877) - - -Bugfixes: - -- Allow enabling systemd funkwhale.target -- Allow playback of media from external frontend (#1937). -- Allow summary field of actors to be blank. This leaves actors valid that have a blank (`""`) summary field and allows follows from those. -- Catch ValueError on radio end (#1596) -- Channel overview was displaying foreign tracks (#1773) (1773) -- Docker setup: do not export the API port 5000 publicly -- Fix adding same track multiple times (#1933) -- Fix artist name submission in Maloja plugin -- Fix changing visualizer CORS error (#1934). -- Fix content form autofocus despite `autofocus` prop being set to `false` (#1924) -- Fix CSP header issues -- Fix CSP issue caused by django-channels package (#1752) -- Fix docker API image building with removing autobahn workaround version pin -- Fix docker builds on armv7 -- Fix docker nginx entrypoint -- Fix editing playlist tracks (#1362) -- Fix embedded player not working on social posts (1946) -- Fix favorite button in queue -- Fix fetching pages of albums in album detail view (#1927) -- Fix front album tracks count translation -- Fix global keyboard shortcuts firing when input is focused (#1876) -- Fix lots of problems in debian installation guide -- Fix media directory nginx routing error in front docker container introduced in !1897 -- Fix OAuth login (#1890) -- Fix play button in albums with multi-page volumes (#1928) -- Fix player closing when queue ends (#1931) -- Fix postgres connection details in docker setup -- Fix purging of dangling files #1929 -- Fix remote search (#1857) -- Fix search by text in affected views (#1858) -- Fix timeout on spa manifest requests -- Fix track table showing all tracks and double pagination in some cases (#1923) -- Fix user requests and reports filtering (#1924) -- Fix validity issues in openapi/swagger spec files (#1171) -- Fixed an issue which caused links in Markdown forms to not render correctly. (#2023) -- Fixed login redirect (1736) -- Fixed mobile player element widths (#2054) -- Fixed remote subscription form in Podcast and search views (#1708) -- Fixed upload form VUE errors (#1738) (1738) -- Fixes an issue which made it possible to download all media files without access control (#2101) -- Fixes channel page (#1729) (1729) -- Fixes development environment set-up with docker (1726) -- Fixes embed player (#1783) (1783) -- Fixes service worker (#1634) -- Fixes track listenings not being sent when tab is not focused -- Hide create custom radio to un-authenticated users (#1720) -- Improve signal handling for service and containers -- Move api docker hardcoded env vars in the settings module -- Prefer str over dict for the CACHE_URL api setting - - This fix the ability to reuse the CACHE_URL with other settings such as - CELERY_BROKER_URL. -- Remove trailing slash from reverse proxy configuration -- Remove unused Footer component (#1660) -- Remove usage of deprecated Model and Serializer fields (#1663) -- Resolved an issue where queue text with mouse over has dark text on dark background (#2058) (2058) -- Skip refreshing local actors in celery federation.refresh_actor_data task - fixes disappearing avatars (!1873) - - -Documentation: - -- Add ability to translate documentation into multiple languages -- Add generic upgrade instructions to Docker postgres documentation (#2049) -- Add restore instructions to backup docs (#1627). -- Add systemd update instructions to Debian upgrade instructions (#1966) -- Added Nginx regeneration instructions to Debian update guide (#2050) -- Added virtualenv upgrade instructions for Debian (#1562). -- Cleaned up documentation -- Document the new login flow of the CLI-tool (#1800) -- Documented LOGLEVEL command (#1541). -- Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624). -- Fix broken links in CHANGELOG (#1976) -- Harden security for debian install docs -- Remove unnecessary postgres variable in Docker migration guide (#2124). -- Rewrote documentation contributor guide. -- Rewrote the architecture file (#1908) -- Rewrote the federation developer documentation (#1911) -- Rewrote the plugins documentation (#1910) -- Rewrote translators file -- Updated API developer documentation (#1912, #1909) -- Updated CONTRIBUTING guide with up-to-date documentation. Created layout in documentation hub. - - -Other: - -- Add a CI job to check if changelog snippet is available -- Add CI broken links checker -- Add pre-commit hooks - - flake8 - - black - - isort - - pyupgrade - - prettier - - codespell -- Add pre-commit to development tools -- Align the openapi spec to the actual API wherever possible -- Cache lychee checked urls for 1 day in CI -- Fix api tests warnings by renaming fixtures -- Fix permissions for build artifacts -- Fix shell scripts lint errors -- Format api pyproject.toml -- Format or fix files using pre-commit - - - Upgrade code to >=python3.7 - - Fix flake8 warnings - - Fix spelling errors - - Format files using black - - Format files using isort - - Format files using prettier -- Move api tools config to pyproject.toml -- Move database url composition from custom script to django settings -- Remove docker_all_in_one_release ci job -- Rename api composer/django/ dir to docker/ -- Unpin asgiref in API dependencies -- Use vite for building the frontend, #1644 - - -Deprecation: - -- Deprecate the api manage.py script in favor of the funkwhale-manage entrypoint -- That's the last minor version series that supports python3.7. Funkwhale 1.4 will remove support for - it. #1693 -- The automatically generated 'DATABASE_URL' configuration in the docker setup is deprecated, please - configure either the 'DATABASE_URL' environment variable or the 'DATABASE_HOST', 'DATABASE_USER' and - 'DATABASE_PASSWORD' environment variables instead. - - -Removal: - -- This release removes support for Python 3.6. Please make sure you update your python version before - Updating Funkwhale! - -Committers: - -- Agate -- Aina Hernàndez Campaña -- AMoonRabbit -- Anton -- bruce diao -- Bruno Talanski -- ButterflyOfFire -- Çağla Pickaxe -- Ciarán Ainsworth -- Dignified Silence -- dignny -- Éilias McTalún -- EorlBruder -- Fedi Funkers -- Georg Krause -- ghose -- Henri Dickson -- Jacek Pruciak -- Jasper Bogers -- Jhoan Sebastian Espinosa Borrero -- jo -- jooola -- Julian Rademacher -- JuniorJPDJ -- Kasper Seweryn -- Keunes -- Kisel1337 -- Laurin W -- Marcos Peña -- Matyáš Caras -- Michael Long -- nztvar -- oki -- Petitminion -- Philipp Wolfer -- poeppe -- Porrumentzio -- ppom -- Reinhard Prechtl -- Sky -- Sporiff -- Stuart Begley-Miller -- @ta -- Thomas -- Till Robin Zickel -- tobifroe -- wvffle - -Contributors to our Issues: - -- AMoonRabbit -- Agate -- Artem Anufrij -- ChengChung -- Ciarán Ainsworth -- Creak -- Eric Mesa -- Georg Krause -- Hans Bauer -- HurricaneDancer -- Jakob Schürz -- Jucgshu -- Julian-Samuel Gebühr -- JuniorJPDJ -- Kasper Seweryn -- Keunes -- Laser Lesbian -- Laurin W -- Marco -- Marcos Peña -- Martin Giger -- Mathieu Jourdan -- MattDHarding -- Meliurwen -- Micha Gläß-Stöcker -- MichaelBechHansen -- Nathan Mih -- Nicolas Derive -- Nolan Darilek -- Philipp Wolfer -- Porrumentzio -- Rodion Borisov -- Sam Birch -- Sky Leite -- TheSunCat -- Thomas -- Tobias Frölich -- Tony Wasserka -- Vincent Riquer -- Virgile Robles -- dddddd-mmmmmm -- gerry_the_hat -- getzze -- heyarne -- jake -- jooola -- jovuit -- nouts -- petitminion -- ppom -- pullopen -- resister -- silksow -- troll - -Contributors to our Merge Requests: - -- AMoonRabbit -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Laurin W -- Marcos Peña -- Mathieu Jourdan -- Nicolas Derive -- Philipp Wolfer -- Rodion Borisov -- Thomas -- Tobias Frölich -- getzze -- jooola -- mqus -- petitminion -- poeppe - -1.2.10 (2023-03-17) -------------------- - -Bugfixes: - -- Fixes a security vulnerability that allows to download all media files without access control #2101 - -Contributors to our Issues: - -- Georg Krause -- JuniorJPDJ - -Special thanks to Conradowatz for reporting the vulnerability - -Committers: - -- JuniorJPDJ - -1.2.9 (2022-11-25) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Ensure index.html files get loaded with UTF-8 encoding -- Fixed invitation reuse after the invited user has been deleted (#1952) -- Fixed unplayable skipped upload (#1349) - - Committers: - -- Georg Krause -- Marcos Peña -- Philipp Wolfer -- Travis Briggs - -Contributors to our Issues: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Marcos Peña -- Mathieu Jourdan -- Micha Gläß-Stöcker -- fuomag9 -- gammelalf -- myOmikron -- petitminion - -Contributors to our Merge Requests: - -- Georg Krause -- JuniorJPDJ -- Marcos Peña -- Philipp Wolfer -- fuomag9 - - -1.2.8 (2022-09-12) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Features: - -- Add Sentry SDK to collect errors at the backend - - -Bugfixes: - -- Fix exponentially growing database when using in-place-imports on a regular base #1676 -- Fix navigating to registration request not showing anything (#1836) -- Fix player cover image overlapping queue list -- Fixed metadata handling for Various Artists albums (#1201) -- Fixed search behaviour in radio builder's filters (#733) -- Fixed unpredictable subsonic search3 results (#1782) - -Committers: - -- Ciarán Ainsworth -- Georg Krause -- Marcos Peña -- Mathias Koehler -- wvffle - -Contributors to our Issues: - -- AMoonRabbit -- Agate -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Kelvin Hammond -- Marcos Peña -- Meliurwen -- Micha Gläß-Stöcker -- Miv2nir -- Sam Birch -- Tolriq -- Tony Wasserka -- f1reflyyyylmao -- heyarne -- petitminion -- troll - -Contributors to our Merge Requests: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Marcos Peña -- interru - - -1.2.7 (2022-07-14) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Fixed libre.fm plugin not submitting scrobbles (#1817) - -Committers: - -- Georg Krause -- Marcos Peña - -Contributors to our Issues: - -- Ciarán Ainsworth -- Marcos Peña - -Contributors to our Merge Requests: - -- Georg Krause -- Marcos Peña - -1.2.6 (2022-07-04) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Channel overview was displaying foreign tracks (#1773) -- Fixed login form focusing reset password link instead of next input (#1373) -- Fixed missing album contextual menu (#1791) -- Fixed single listening submission when repeating a song (#1312) -- Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263) -- Resolve timeouts if nodeinfo and service actor is not known (#1714) - - -Other: - -- Replaced references to #funkwhale-troubleshooting with #funkwhale-support - -Committers: - -- Georg Krause -- Marcos Peña -- Petitminion -- wvffle - -Contributors to our Issues: - -- jeweet -- wvffle -- Georg Krause -- Marcos Peña -- AMoonRabbit -- Micha Gläß-Stöcker -- Ciarán Ainsworth -- heyarne -- Agate -- JuniorJPDJ -- MichaelBechHansen -- ooZberg -- Esras . -- PhieF -- Petitminion - -Contributors to our Merge Requests: - -- wvffle -- Georg Krause -- Marcos Peña -- Petitminion - -1.2.5 (2022-05-07) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Parameterize the default S3 ACL when uploading objects. (#1319) - - -Bugfixes: - -- Fix stopped player to not show 00:00 when loading a track (#1432) -- Fixes channel page (#1729) (1729) - -Committers: - -- Georg Krause -- Marcos -- MattDHarding -- Stuart Begley-Miller - -Contributors to our Issues: - -- Agate -- Beto Dealmeida -- Cam Sweeney -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Marcos Peña -- Mathieu Jourdan -- MattDHarding -- Micha Gläß-Stöcker -- Stuart Begley-Miller -- Tony Wasserka -- jovuit -- petitminion -- pullopen - -Contributors to our Merge Requests: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Marcos Peña -- MattDHarding -- PhieF -- Stuart Begley-Miller -- petitminion - -1.2.4 (2022-04-23) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Hand cursor now displayed over artist and album cards - - -Bugfixes: - -- Fixes docs' SMTP URI configuration (#1749) (1749) - - -Documentation: - -- The documentation is now available in two versions: Develop and Stable - -Contributors to our Issues: - -- Beto Dealmeida -- Cam Sweeney -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Marcos Peña -- Mathieu Jourdan -- Micha Gläß-Stöcker -- petitminion - -Contributors to our Merge Requests: - -- Georg Krause -- JuniorJPDJ -- Marcos Peña -- petitminion - -Committers: - -- Georg Krause -- Marcos Peña -- MattDHarding - - -1.2.3 (2022-03-18) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Added support for all cover sources in the embedded player (#1697). -- Change unmaintained PyMemoize library to django-cache-memoize - to enable Python 3.10 support - -Bugfixes: - -- Catch ValueError on radio end (#1596) -- Fix bug that prevents users from creating a new oauth application (#1706) -- Fix failed track adding to playlist being silent (#1020) -- Fix recently added radio not working has expected (#1674) -- Fixed an issue where you couldn't load the details page for tracks with no associated album (#1703) -- Fixed library visibility dropdown (#1384) -- In playlist editor can now click outside the trashcan but inside the button to delete entry (#1348) - -Contributors to our Issues: - -- Agate -- Baudouin Feildel -- Christoph Pomaska -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Marcos Peña -- Mathieu Jourdan -- MattDHarding -- Micha Gläß-Stöcker -- dnikolov -- jovuit -- petitminion - -Contributors to our Merge Requests: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Kasper Seweryn -- Marcos Peña -- MattDHarding -- petitminion - -Committers - -- Ciaran Ainsworth -- Georg Krause -- JuniorJPDJ -- MattDHarding -- Petitminion -- Reinhard Prechtl - - -1.2.2 (2022-02-04) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Fix an issue where the tracks tab in a library doesn't show any tracks (#1683) -- Fix an issue with the embedded player not showing any content (#1675) -- Fix broken instance description if it contains a line break #1673 - -Dependency Updates: - -Update dependency vue-template-compiler to 2.6.14 -Update dependency vue to ^2.6.14 -Update dependency vuex-persistedstate to ^2.7.1 -Update dependency vuedraggable to ^2.24.3 -Update dependency vue-lazyload to ^1.3.3 -Update dependency vue-plyr to ^5.1.3 -Update dependency vue-upload-component to ^2.8.22 -Update dependency vue-gettext to ^2.1.12 -Update dependency showdown to ^1.9.1 -Update dependency js-logger to ^1.6.1 -Update dependency register-service-worker to ^1.7.2 -Update dependency howler to ^2.2.3 -Update dependency fomantic-ui-css to ^2.8.8 -Update dependency diff to ^4.0.2 -Update dependency axios-auth-refresh to ^2.2.8 - -Contributors to our Issues: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Marcos Peña -- Mathieu Jourdan -- Micha Gläß-Stöcker -- Ricardo -- petitminion - -Contributors to our Merge Requests: - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Marcos Peña - -Committers - -- Ciarán Ainsworth -- Georg Krause -- JuniorJPDJ -- Keunes -- Marcos Peña - - -1.2.1 (2022-01-06) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Fix Pipeline for stable release builds (#1652) -- Fix remote content page (#1655) - -Contributors to our Issues: - -Ciarán Ainsworth -Georg Krause -Jakob Schürz -Mathieu Jourdan -Micha Gläß-Stöcker -petitminion - -Contributors to our Merge Requests: - -Georg Krause - -Committers: -Dignified Silence -Georg Krause -JuniorJPDJ -nztvar - - -1.2.0 (2021-12-27) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Due to a bug in our CI Pipeline, you need to download the frontend artifact here: https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download - -If you are running the All-in-One-Container since a longer time, you probably need to manually migrate your database information. If that's the case, you will get a message like this: - -`DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 13.5.` - -Make sure the Funkwhale version is set to `1.1.4` in `docker-compose.yml`. Now you can run this command to dump the database into a file: - -`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > "db.dump"` - -Now you can update the Funkwhale version in `docker-compose.yml` to `1.2.0`. Additionally you should save your `data` directory, eg by running `mv data data.bak && mkdir data`. Stop Funkwhale and start it again with the new version, by using `docker-compose down && docker-compose up -d`. This will initialize a fresh DB and applies all migrations. Now you can restore your database with the following command: `cat db.dump | docker-compose exec -T funkwhale psql -U funkwhale`. That's it, enjoy! - -Features: - -- Implemented awesome recently added radio (part of #1390) -- Rework the instance about page (#1376) -- Made changes to the track table to make it more visibly pleasing - - -Enhancements: - -- Add linting for Frontend code (#1602) -- Add xmlns:content to feed schemas fixes #1535 -- Add a Maloja plugin to submit listenings -- Add artist cover art in subsonic API response (#1528) -- Allow listen activities privacy level to be set public -- Allow running multi-container setup on non-root user inside docker (!1375) (fixes #1334) -- Change volume dynamic range from 60dB to 40dB (fixes #1544) -- Change Start Radio to Play Radio (#1400) -- Display toast when subsonic password is copied (#1496) -- Expose more metadata in Subsonic's getAlbumList endpoint (#623) -- ListenBrainz: Submit media player and submission client information -- Make "play in list" the default when interacting with individual tracks (#1274) -- Prevent an uncontrolled exception when uploading a file without tags, and prints user friendly message (1275) -- Remove deprecated JWT Authentication (#1108) (1108) -- Remove Raven SDK to report errors to Sentry (#1425) (1425) -- Replace psycopg2-binary with psycopg2 (#1513) - - -Bugfixes: - -- Add worker-src to nginx header to prevent issues (#1489) -- Enable stepless adjustment of the volume slider (!1294) -- Fix an error in a Subsonic methods that return lists of numbers/strings like getUser -- Fix showing too long radio descriptions (#1556) -- Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN value for other pages (fix #1022) -- Fix before last track starts playing when last track removed (#1485) -- Fix delete account button is not disabled when missing password (#1591) -- Fix omputed properties already defined in components data (#1649) -- Fix the all in one docker image building process, related to #1503 -- Fix crash in album moderation interface when missing cover (#1474) -- Fix subsonic scrobble not triggering plugin hook (#1416) -- Improve formatting of RSS episode descriptions (#1405) -- Only suggest typed tag once if it already exists -- Partially fixed playing two tracks at same time (#1213) -- Revert changes that break mobile browser playback (#1509) -- Sanitize remote tracks' saving locations with slashes on their names (#1435) -- Show embed option for channel tracks (#1278) -- Store volume in logarithmic scale and convert when setting it to audio (fixes #1543) -- Use global Howler volume instead of setting it separately for each track (fixes #1542) - - -Documentation: - -- Add email configuration to the documentation (#1481) -- Add server uninstallation documentation (\!1314) -- Document location of cli env file on macOS (\!1354) -- Fix broken backup documentation (#1345) -- Refactore installation documentation and other small documentation adjustments (\!1314) -- Add User documentation for built-in plugins - - -Other: - -- Create stable branch, master is now deprecated and will be removed in 1.3 (#1476) - -Committers: - -Alexandra Parker -Alyssa Ross -appzer0 -Arthur Brugière -Asier Iturralde Sarasola -bittin -Blopware -Brian McMillen -Christoph Pomaska -Ciaran Ainsworth -Ciarán Ainsworth -Classified -Connor Hay -Damian Szetela -David Marzal -Deleted User -Dignified Silence -Dominik Danelski -egon0 -Erik Präntare -Georg Abenthung -Georgios B -Georgios Brellas -Georg Krause -ghose -greengekota -heyarne -ian Vatega -Janek -jovuit -JuniorJPDJ -Konstantinos G -manuelviens -Manuel Viens -Marcos -Marcos Peña -Martin Giger -Matthew J -Micha Gläß-Stöcker -petitminion -Petitminion -Philipp Wolfer -Porrumentzio -Quentin PAGÈS -Raphael Lullis -Riccardo Sacchetto -Romain Failliot -Rubén Cabrera -Ryan Harg -Sergio Varela -SpcCw -Stefano Pigozzi -Thomas -Tony Simoes -Tony Wasserka -vachan-maker -Virgile Robles - -Contributors to our Issues: - -AMoonRabbit -Agate -Antoine POPINEAU -Arthur Brugière -Ciarán Ainsworth -Connor Hay -Creak -David Marzal -Georg Krause -Gerhard Beck -Greg Poole -JuniorJPDJ -Kuba Orlik -Lunar Control -Marcos Peña -Mateusz Korzeniewski -Mathieu Jourdan -Micha Gläß-Stöcker -Philipp Wolfer -Porrumentzio -Thomas -Tony Wasserka -Ville Ranki -arkhi -heyarne -interfect -jovuit -mal -petitminion -vachan-maker - -Contributors to our Merge Requests: - -Agate -Arthur Brugière -Ciarán Ainsworth -Connor Hay -David Marzal -Distopico -Fanyx -Georg Abenthung -Georg Krause -Janek -JuniorJPDJ -Kasper Seweryn -Marcos Peña -Mathieu Jourdan -Matthew J. -Micha Gläß-Stöcker -Philipp Wolfer -Thomas -Tony Wasserka -heyarne -jovuit -petitminion -thanksd - - -1.1.4 (2021-08-02) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -- Pinned version of asgiref to avoid trouble with latest release. For further information, see #1516 - -1.1.3 (2021-08-02) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Test better tagging of Docker Images (#1505) - -Bugfixes: - -- Fix the scrobbler plugin submitting literal "None" as MusicBrainz ID (#1498) -- Add worker-src to nginx header to prevent issues (#1489) -- Only suggest typed tag once if it already exists -- Implement access control on the moderation views (#1494) -- Prevent open redirect on login (#1492) - - -1.1.2 (2021-05-19) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Added modal to prompt users to log in when subscribing to channels (#1296) - - -Bugfixes: - -- Added missing is_playable serializer for the tracks endpoint. -- Fixed minor graphical bug where loaders would appear white in dark theme (#1442) -- Fixed systemd unit for funkwhale-worker (#1160) -- Several minor fixes for the Frontend - - -1.1.1 (2021-04-13) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Improve UI consistency in artist tracks (#1286) -- Adds year to album's card and album's base UI - -Bugfixes: - -- Fix playback issues when pausing close the the end of a track (#1324) -- Fix tracks playing in the background without the ability to control them (#1213) (#1387) -- Fixed track playback indicator to reset on queue end (#1380) -- Frontend build tooling is less dependent on `npm` or `yarn` being used (!1285) -- Fixed a small discrepancy to the subsonic api 1374 - - -1.1 (2021-03-10) ----------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Add number of tracks and discs of an album to API (#1238) -- Add spacing after "Play all" button in playlist view (!1271) -- Added a ListenBrainz plugin to submit listenings -- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294) -- Added new search functions to allow users to more easily search for podcasts in the UI. -- Added padding to volume slider to ease mouse control (#1241) -- Logarithmic scale for volume slider (#1222) -- More user-friendly subsonic tokens (#1269) -- Remove manual entry of Import Reference on front-end import (#1284) -- Support AIFF file format (#1243) - - -Bugfixes: - -- "Add check for empty/null covers (#1281)" -- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282) -- Avoid broken Faker version (#1323) -- Changed audio format detection to happen via sniffing and not file extensions (#1274) -- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289) -- Fix delete library modal closing immediately (#1272) -- Fix public shared remote library radio button being disabled (#1292) -- Fixed an issue that prevented disabling plugins -- Fixed an issue where channel albums don't show up in the album search (#1300) -- Fixed an issue where modals would prevent users being able to interact with channels (#1295) -- Update MediaSession metadata for initially loaded track (#1252) -- Update playback position slider also when track is paused (#1266) -- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342 -- Update pleroma JSON-LD Schema (#1341) -- Pin twisted version to 20.3.0 - -Contributors to this release (development, documentation, reviews): - -Adam Novak -Agate -alemairebe -Alicia Blasco Leon -anonymous -Amaranthe -appzer0 -Arne -Asier Iturralde Sarasola -Christian Paul -Ciarán Ainsworth -Daniel -David -Dominik Danelski -Eorn le goéland -Eleos -Erik Duxstad -Esteban -Fred Uggla -Freyja Wildes -Georg Krause -ghose -hellekin -heyarne -interfect -Jess Jing -Johannes H. -jovuit -marzzzello -Meliurwen -Mehdi -Nitai Bezerra da Silva -Philipp Wolfer -Pierre Couy -Porrumentzio -Reg -Robert Kaye -Rubén Cabrera -Silver Fox -Snack Capt -SpcCw -Strom Lin -vicdorke -x - - -1.1-rc2 (2021-03-01) --------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Bugfixes: - -- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342 -- Update pleroma JSON-LD Schema (#1341) -- Revert fork replacement of http-signature since official package breaks federation -- Pin twisted version to 20.3.0 - - -1.1-rc1 (2021-02-24) --------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Add number of tracks and discs of an album to API (#1238) -- Add spacing after "Play all" button in playlist view (!1271) -- Added a ListenBrainz plugin to submit listenings -- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294) -- Added new search functions to allow users to more easily search for podcasts in the UI. -- Added padding to volume slider to ease mouse control (#1241) -- Logarithmic scale for volume slider (#1222) -- More user-friendly subsonic tokens (#1269) -- Remove manual entry of Import Reference on front-end import (#1284) -- Replaced forked http-signature dependency with official package (#876) -- Support AIFF file format (#1243) - - -Bugfixes: - -- "Add check for empty/null covers (#1281)" -- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282) -- Avoid broken Faker version (#1323) -- Changed audio format detection to happen via sniffing and not file extensions (#1274) -- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289) -- Fix delete library modal closing immediately (#1272) -- Fix public shared remote library radio button being disabled (#1292) -- Fixed an issue that prevented disabling plugins -- Fixed an issue where channel albums don't show up in the album search (#1300) -- Fixed an issue where modals would prevent users being able to interact with channels (#1295) -- Update MediaSession metadata for initially loaded track (#1252) -- Update playback position slider also when track is paused (#1266) - -Contributors to this release (development, documentation, reviews): - -- Reg -- hellekin -- Esteban -- Freyja Wildes -- Amaranthe -- Eleos -- Johannes H. -- Mehdi -- Adam Novak -- Agate -- Christian Paul -- Ciarán Ainsworth -- Erik Duxstad -- Fred Uggla -- Georg Krause -- heyarne -- interfect -- jovuit -- Nitai Bezerra da Silva -- Philipp Wolfer -- Pierre Couy -- Robert Kaye -- Strom Lin - -1.0.1 (2020-10-31) ------------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Added controls to play volume of an album (#1226) -- Allow genre tags to be updated when rescanning files in-place (#1246) - - -Bugfixes: - -- Fixed broken install because of upgraded dependencies -- Fixed duplication of discs for multi-disc albums in album views (#1228) -- Make the generated RSS feed more conformant with w3c specification (#1250) - -Contributors to this release (development, documentation, reviews): - -- Agate -- Cédric Schieli -- Ciarán Ainsworth -- Kuba Orlik - -1.0 (2020-09-09) ----------------- - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - - -Dropped python 3.5 support [manual action required, non-docker only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -With Funkwhale 1.0, we're dropping support for Python 3.5. Before upgrading, -ensure ``python3 --version`` returns ``3.6`` or higher. - -If it returns ``3.6`` or higher, you have nothing to do. - -If it returns ``3.5``, you will need to upgrade your Python version/Host, then recreate your virtual environment:: - - rm -rf /srv/funkwhale/virtualenv - python3 -m venv /srv/funkwhale/virtualenv - - -Increased quality of JPEG thumbnails [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Default quality for JPEG thumbnails was increased from 70 to 95, as 70 was producing visible artifacts in resized images. - -Because of this change, existing thumbnails will not load, and you will need to: - -1. delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory -2. run ``python manage.py fw media generate-thumbnails`` to regenerate thumbnails with the enhanced quality - -If you don't want to regenerate thumbnails, you can keep the old ones by adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70`` to your .env file. - -Small API breaking change in ``/api/v1/libraries`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To allow easier crawling of public libraries on a pod,we had to make a slight breaking change -to the behaviour of ``GET /api/v1/libraries``. - -Before, it returned only libraries owned by the current user. - -Now, it returns all the accessible libraries (including ones from other users and pods). - -If you are consuming the API via a third-party client and need to retrieve your libraries, -use the ``scope`` parameter, like this: ``GET /api/v1/libraries?scope=me`` - -API breaking change in ``/api/v1/albums`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To increase performance, querying ``/api/v1/albums`` doesn't return album tracks anymore. This caused -some performance issues, especially as some albums and series have dozens or even hundreds of tracks. - -If you want to retrieve tracks for an album, you can query ``/api/v1/tracks/?album=``. - -JWT deprecation -^^^^^^^^^^^^^^^ - -API Authentication using JWT is deprecated and will be removed in Funkwhale 1.0. Please use OAuth or application tokens -and refer to our API documentation at https://docs.funkwhale.audio/swagger/ for guidance. - -Full list of changes -^^^^^^^^^^^^^^^^^^^^ - -Features: - -- Allow users to hide compilation artists on the artist search page (#1053) -- Can now launch server import from the UI (#1105) -- Dedicated, advanced search page (#370) -- Persist theme and language settings across sessions (#996) - - -Enhancements: - -- Add support for unauthenticated users hitting the logout page -- Added support for Licence Art Libre (#1088) -- Broadcast/handle rejected follows (#858) -- Confirm email without requiring the user to validate the form manually (#407) -- Display channel and track downloads count (#1178) -- Do not include tracks in album API representation (#1102) -- Dropped python 3.5 support. Python 3.6 is the minimum required version (#1099) -- Improved keyboard accessibility (#1125) -- Improved naming of pages for accessibility (#1127) -- Improved shuffle behaviour (#1190) -- Increased quality of JPEG thumbnails -- Lock focus in modals to improve accessibility (#1128) -- More consistent search UX on /albums, /artists, /radios and /playlists (#1131) -- Play button now replace current queue instead of appending to it (#1083) -- Set proper lang attribute on HTML document (#1130) -- Use semantic headers for accessibility (#1121) -- Users can now update their email address (#292) -- [plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and secret are provided -- Added a new, large thumbnail size for cover images (#1205 -- Enforce authentication when viewing remote channels, profiles and libraries (#1210) - - - -Bugfixes: - -- Fix broken media support detection (#1180) -- Fix layout issue with playbar on landscape tablets (#1144) -- Fix random radio so that podcast content is not picked up (#1140) -- Fixed an issue with search pages where results would not appear after navigating to another page -- Fixed crash with negative track position in file tags (#1193) -- Handle access errors scanning directories when importing files -- Make channel card updated times more humanly readable, add internationalization (#1089) -- Ensure search page reloads if another search is submitted in the sidebar (#1197) -- Fixed "scope=subscribed" on albums, artists, uploads and libraries API (#1217) -- Fixed broken federation with pods using allow-listing (#1999) -- Fixed broken search when using (, " or & chars (#1196) -- Fixed domains table hidden controls when no domains are found (#1198) - - -Documentation: - -- Simplify Docker mono-container installation and upgrade documentation - - -Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects): - -- Agate -- Andy Craze -- anonymous -- appzer0 -- Arne -- Ciarán Ainsworth -- Daniele Lira Mereb -- dulz -- Francesc Galí -- ghose -- Kalle Anka -- mekind -- Meliurwen -- Puri -- Quentin PAGÈS -- Raphaël Ventura -- Slimane Selyan Amiri -- SpcCw -- Stefano Pigozzi -- Sébastien de Melo -- Ventura Pérez García -- vicdorke -- Xosé M - - -0.21.2 (2020-07-27) -------------------- +## 0.21.2 (2020-07-27) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html @@ -1669,7 +12,6 @@ Enhancements: - Support ordering=random for artists, albums, tracks and channels endpoints (#1145) - Use role=alert on forms/toast message to improve accessibility (#1134) - Bugfixes: - Fix embedded player not working on channel series/album (#1175) @@ -1687,17 +29,14 @@ Contributors to this release (development, documentation, reviews): - Bheesham Persaud - Ciarán Ainsworth - -0.21.1 (2020-06-11) -------------------- +## 0.21.1 (2020-06-11) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - Features: -- Support a --watch mode with ``import_files`` to automatically add, update and remove files when filesystem is updated (#721) +- Support a --watch mode with `import_files` to automatically add, update and remove files when filesystem is updated (#721) Enhancements: @@ -1708,7 +47,6 @@ Enhancements: - Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154) - Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151) - Bugfixes: - Added safeguard to ensure local uploads are never purged from cache (#1086) @@ -1719,25 +57,23 @@ Bugfixes: - Fixed a wording issue on artist channel page (#1117) - Fixed crash on python 3.5 with cli importer (#1155) - Fixed issue when displaying starred tracks on subsonic (#1082) -- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run ``python manage.py fix_uploads --mimetype`` to set proper mimetypes on existing uploads. +- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run `python manage.py fix_uploads --mimetype` to set proper mimetypes on existing uploads. - Fixed page not refreshing when switching between My Library and Explore sections (#1091) - Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147) - Fixed wrong album and track count in admin artist API (#1096) - Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078) -Small API breaking change in ``/api/v1/libraries`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Small API breaking change in `/api/v1/libraries` To allow easier crawling of public libraries on a pod,we had to make a slight breaking change -to the behaviour of ``GET /api/v1/libraries``. +to the behaviour of `GET /api/v1/libraries`. Before, it returned only libraries owned by the current user. Now, it returns all the accessible libraries (including ones from other users and pods). If you are consuming the API via a third-party client and need to retrieve your libraries, -use the ``scope`` parameter, like this: ``GET /api/v1/libraries?scope=me`` - +use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me` Contributors to this release (development, documentation, reviews, testing): @@ -1748,9 +84,7 @@ Contributors to this release (development, documentation, reviews, testing): - Siren - Tony Wasserka - -0.21 "Agate" (2020-04-24) -------------------------- +## 0.21 "Agate" (2020-04-24) This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3 @@ -1759,8 +93,7 @@ We are truly grateful as well to the dozens of people who contributed to this re Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html, there are also additional operations you need to execute, listed in the changelog below (search "Manual action"). -Channels and podcasts -^^^^^^^^^^^^^^^^^^^^^ +### Channels and podcasts Funkwhale 0.21 includes a brand new feature: Channels! @@ -1776,15 +109,13 @@ Many, many thanks to the numerous people who helped with the feature design, dev to the members of the working group who met every week for months in order to get this done, and the members of other third-party projects who took the time to work with us to ensure compatibility. -Redesigned navigation, player and queue -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Redesigned navigation, player and queue This release includes a full redesign of our navigation, player and queue. Overall, it should provide a better, less confusing experience, especially on mobile devices. This redesign was suggested 14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done! -Improved search bar for searching remote objects -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Improved search bar for searching remote objects The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly: @@ -1792,8 +123,7 @@ The search bar now support fetching arbitrary objects using a URL. In particular - Listen a public track from another pod - Subscribe to a channel -Screening for sign-ups and custom sign-up form -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Screening for sign-ups and custom sign-up form Instance admins can now configure their pod so that registrations required manual approval from a moderator. This is especially useful on private or semi-private pods where you don't want to close registrations completely, @@ -1807,15 +137,13 @@ In addition, it's also possible to customize the sign-up form by: - Providing a custom help text, in markdown format - Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods -Federated reports -^^^^^^^^^^^^^^^^^ +### Federated reports It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed. This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers. -Improved search performance -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Improved search performance Our search engine went through a full rewrite to make it faster. This new engine is enabled by default when using the search bar, or when searching for artists, albums and tracks. It leverages @@ -1826,36 +154,37 @@ magnitude. This should be especially perceptible on pods with large databases, m or hard drives. We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, -you can switch back by setting ``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` file. +you can switch back by setting `USE_FULL_TEXT_SEARCH=false` in your `.env` file. -Enforced email verification -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Enforced email verification -The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE`` setting can be used to make email verification -mandatory for your users. It defaults to ``false``, and doesn't apply to superuser accounts created through +The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to make email verification +mandatory for your users. It defaults to `false`, and doesn't apply to superuser accounts created through the CLI. If you enable this, ensure you have a SMTP server configured too. -More reliable CLI importer [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### More reliable CLI importer [manual action required] Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger) We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly. -If you use the ``import_files`` command, this means you should replace scripts that look like this:: +If you use the `import_files` command, this means you should replace scripts that look like this: - python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput +```sh +python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput +``` -By this:: +By this: - python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput +```sh +python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput +``` And Funkwhale will happily import any supported audio file from the specified directory. -User management through the server CLI -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### User management through the server CLI We now support user creation (incl. non-admin accounts), update and removal directly from the server CLI. Typical use cases include: @@ -1865,76 +194,77 @@ from the server CLI. Typical use cases include: - Removing or granting permissions or upload quota to multiple users at once - Marking multiple users as inactive -All user-related commands are available under the ``python manage.py fw users`` namespace. -Please refer to the `Admin documentation `_ for +All user-related commands are available under the `python manage.py fw users` namespace. +Please refer to the [Admin documentation](https://docs.funkwhale.audio/admin/commands.html#user-management) for more information and instructions. -Progressive web app [Manual action sugFull list of changes -^^^^^^^^^^^^^^^^^^^^gested, non-docker only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Progressive web app [Manual action suggested, non-docker only] We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience during offline use, and on mobile devices. In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure -the following instruction is present in your nginx configuration:: +the following instruction is present in your nginx configuration: - location /front/ { - # Add the following line in the /front/ location - add_header Service-Worker-Allowed "/"; - } +```nginx +location /front/ { + # Add the following line in the /front/ location + add_header Service-Worker-Allowed "/"; +} +``` -Postgres docker changed environment variable [manual action required, docker multi-container only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Postgres docker changed environment variable [manual action required, docker multi-container only] If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658) -You need to add this to your .env file: ``POSTGRES_HOST_AUTH_METHOD=trust`` +You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust` Newer deployments aren't affected. -Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] -With our upgrade to Alpine 3.10, the ``funkwhale/all-in-one`` image now includes PostgreSQL 11. +With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now includes PostgreSQL 11. -In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below:: +In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below: - # open a shell as the Funkwhale user - sudo -u funkwhale -H bash +```sh +# open a shell as the Funkwhale user +sudo -u funkwhale -H bash - # move to the funkwhale data directory - # (replace this with your own if you used a different path) - cd /srv/funkwhale/data +# move to the funkwhale data directory +# (replace this with your own if you used a different path) +cd /srv/funkwhale/data - # stop the funkwhale container - docker stop funkwhale +# stop the funkwhale container +docker stop funkwhale - # backup the database files - cp -r data/ ../postgres.bak +# backup the database files +cp -r data/ ../postgres.bak - # Upgrade the database - docker run --rm \ - -v $(pwd)/data:/var/lib/postgresql/10/data \ - -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ - -e PGUSER=funkwhale \ - -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ - tianon/postgres-upgrade:10-to-11 +# Upgrade the database +docker run --rm \ + -v $(pwd)/data:/var/lib/postgresql/10/data \ + -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ + -e PGUSER=funkwhale \ + -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ + tianon/postgres-upgrade:10-to-11 - # replace the Postgres 10 files with Postgres 11 files - mv data/ postgres-10 - mv upgraded-postgresql/ data +# replace the Postgres 10 files with Postgres 11 files +mv data/ postgres-10 +mv upgraded-postgresql/ data +``` Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, -you can remove the backups/old files:: +you can remove the backups/old files: - sudo -u funkwhale -H bash - cd /srv/funkwhale/data - rm -rf ../postgres.bak - rm -rf postgres-10 +```sh +sudo -u funkwhale -H bash +cd /srv/funkwhale/data +rm -rf ../postgres.bak +rm -rf postgres-10 +``` -Full list of changes -^^^^^^^^^^^^^^^^^^^^ +### Full list of changes Features: @@ -1958,7 +288,7 @@ Enhancements: - Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012) - Favor local uploads when playing a track with multiple uploads (#1036) - Include only local content in nodeinfo stats, added downloads count -- Make media and static files serving more reliable when reverse proxy X_FORWARDED_* headers are incorrect (#947) +- Make media and static files serving more reliable when reverse proxy `X_FORWARDED_*` headers are incorrect (#947) - Order the playlist columns by modification date in the Browse tab (#775) - Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042) - Remember display settings in Album, Artist, Radio and Playlist views (#391) @@ -2064,15 +394,12 @@ Contributors to this release (translation, development, documentation, reviews, - Xaloc - Xosé M -0.20.1 (2019-10-28) -------------------- +## 0.20.1 (2019-10-28) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Denormalized audio permission logic in a separate table to enhance performance -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Denormalized audio permission logic in a separate table to enhance performance With this release, we're introducing a performance enhancement that should reduce the load on the database and API servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939). @@ -2081,14 +408,15 @@ Under the hood, we now maintain a separate table to link users to the tracks the by default, but should be enabled by default starting in Funkwhale 0.21. If you want to try it now, add -``MUSIC_USE_DENORMALIZATION=True`` to your ``.env`` file, restart Funkwhale, and run the following command:: +`MUSIC_USE_DENORMALIZATION=True` to your `.env` file, restart Funkwhale, and run the following command: - python manage.py rebuild_music_permissions +```sh +python manage.py rebuild_music_permissions +``` This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual behaviour regarding tracks, albums and artists visibility. - Enhancements: - Added a retry option for failed uploads (#942) @@ -2098,7 +426,6 @@ Enhancements: - Reduce the number of simultaneous DB connections under some deployment scenario - Support byYear filtering in Subsonic API (#936) - Bugfixes: - Ensure password input doesn't overflow outside of container (#933) @@ -2110,12 +437,10 @@ Bugfixes: - Fixed pagination in subsonic getSongsByGenre endpoint (#954) - Fixed style glitches in dropdowns - Documentation: - Documented how to create DB extension by hand in case of permission error during migrations (#934) - Contributors to this release (translation, development, documentation, reviews, design): - Ciarán Ainsworth @@ -2128,23 +453,21 @@ Contributors to this release (translation, development, documentation, reviews, - Mateus Mattei Garcia - Quentin PAGÈS +## 0.20 (2019-10-04) -0.20 (2019-10-04) ------------------ +Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html + +### Support for genres via tags Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Support for genres via tags -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - One of our most requested missing features is now available! Starting with Funkwhale 0.20, Funkwhale will automatically extract genre information from uploaded files and associate it with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). -Please refer to `our tagging documentation `_ +Please refer to [our tagging documentation](https://docs.funkwhale.audio/users/upload.html#tagging-files) for more information regarding the tagging process. Tags can also be associated with artists and albums, and updated after upload through the UI using @@ -2158,11 +481,10 @@ Tags are used in various places to enhance user experience: - The custom radio builder now supports using tags - Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well -If you are a pod admin and want to extract tags from already uploaded content, you run `this snippet `__ -and `this snippet `__ in a ``python manage.py shell``. +If you are a pod admin and want to extract tags from already uploaded content, you run [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) +and [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in a `python manage.py shell`. -Content and account reports -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Content and account reports It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, who can review it and delete reported content, block accounts or take any other action they deem necessary. @@ -2175,11 +497,10 @@ Federation of the reports will be supported in a future release. For more information about this feature, please check out our documentation: -- `User documentation `__ -- `Moderator documentation `__ +- [User documentation](https://docs.funkwhale.audio/moderator/reports.html) +- [Moderator documentation](https://docs.funkwhale.audio/users/reports.html) -Account deletion -^^^^^^^^^^^^^^^^ +### Account deletion Users can now delete their account themselves, without involving an administrator. @@ -2189,10 +510,9 @@ to other known servers on the federation. For more information about this feature, please check out our documentation: -- `User documentation `__ +- [User documentation](https://docs.funkwhale.audio/users/account.html) -Landing and about page redesign [Manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Landing and about page redesign [Manual action suggested] In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod configuration. Among other things, the landing page will now include: @@ -2222,10 +542,9 @@ With this redesign, we've added a handful of additional pod settings: - Rules - Terms of service -We recommend taking a few moments to fill these accordingly to your needs, by visiting ``/manage/settings``. +We recommend taking a few moments to fill these accordingly to your needs, by visiting `/manage/settings`. -Allow-list to restrict federation to trusted domains -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Allow-list to restrict federation to trusted domains The Allow-Listing feature grants pod moderators and administrators greater control over federation @@ -2240,10 +559,9 @@ allow-list will not have access to your pod's content or messages and will not be able to send anything to your pod. -If you want to enable this feature on your pod, or learn more, please refer to `our documentation `_! +If you want to enable this feature on your pod, or learn more, please refer to [our documentation](https://docs.funkwhale.audio/moderator/listing.html)! -Periodic message to incite people to support their pod and Funkwhale -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Periodic message to incite people to support their pod and Funkwhale Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing. @@ -2251,9 +569,7 @@ If specified by the pod admin, a separate and custom message will also be displa Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely. - -Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] To improve the performance, stability and reliability of Funkwhale's web processes, we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as: @@ -2263,79 +579,81 @@ we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne. -To benefit from this enhancement on existing instances, you need to add ``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` file +To benefit from this enhancement on existing instances, you need to add `FUNKWHALE_WEB_WORKERS=1` in your `.env` file (use a higher number if you want to have more web worker processes). -Then, edit your ``/etc/systemd/system/funkwhale-server.service`` and replace the ``ExecStart=`` line with -``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}`` +Then, edit your `/etc/systemd/system/funkwhale-server.service` and replace the `ExecStart=` line with +`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}` -Then reload the configuration change with ``sudo systemctl daemon-reload`` and ``sudo systemctl restart funkwhale-server``. +Then reload the configuration change with `sudo systemctl daemon-reload` and `sudo systemctl restart funkwhale-server`. - -Content-Security-Policy and additional security headers [manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Content-Security-Policy and additional security headers [manual action suggested] To improve the security and reduce the attack surface in case of a successful exploit, we suggest you add the following Content-Security-Policy to your nginx configuration. -..note:: +````{note} +If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers - If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers +```nginx +add_header Content-Security-Policy "...img-src 'self' https:// data:;...media-src https:// 'self' data:"; +``` +```` - .. code-block:: +**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`: - add_header Content-Security-Policy "...img-src 'self' https:// data:;...media-src https:// 'self' data:"; +```nginx +server { -**On non-docker setups**, in ``/etc/nginx/sites-available/funkwhale.conf``:: - - server { + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + location /front/ { add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # … existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; - } + add_header X-Frame-Options "SAMEORIGIN"; + # … existing content here } -Then reload nginx with ``systemctl reload nginx``. + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; + } +} +``` -**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``:: +Then reload nginx with `systemctl reload nginx`. - server { +**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`: +```nginx +server { + + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + location /front/ { add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # … existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias /frontend/embed.html; - } + add_header X-Frame-Options "SAMEORIGIN"; + # … existing content here } -Then reload nginx with ``docker-compose restart nginx``. + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias /frontend/embed.html; + } +} -Rate limiting -^^^^^^^^^^^^^ +``` + +Then reload nginx with `docker-compose restart nginx`. + +### Rate limiting With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error. @@ -2343,23 +661,23 @@ regular users of the app aren't affected. Requests beyond allowed limits are ans For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests. -You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your ``.env`` file and restarting the +You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your `.env` file and restarting the services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/. -Broken audio streaming when using S3/Minio and DSub [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Broken audio streaming when using S3/Minio and DSub [manual action required] Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage -such as Minio, please add the following in your nginx ``~ /_protected/media/(.+)`` location:: +such as Minio, please add the following in your nginx `~ /_protected/media/(.+)` location: - # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 - proxy_set_header Authorization ""; +```nginx +# Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 +proxy_set_header Authorization ""; +``` And reload your nginx process. -Detail -^^^^^^ +### Detail Features: @@ -2373,7 +691,6 @@ Features: - Support for genres, via tags (#432) - Users can now delete their account without admin intervention (#852) - Enhancements: - Added a info message on embed wizard when anonymous access to content is disabled (#878) @@ -2403,7 +720,6 @@ Enhancements: - Display placeholder on homepage when there are no playlists (#892) - Make album cards height independent (#710) - Bugfixes: - Added context strings to en_GB translations so that picking the language changes the interface as expected @@ -2453,9 +769,7 @@ Contributors to this release (translation, development, documentation, reviews, - Xaloc - Xosé M - -0.19.1 (2019-06-28) -------------------- +## 0.19.1 (2019-06-28) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html @@ -2473,7 +787,6 @@ Enhancements: - Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) - Favorites radio will not be visible if the user does not have any favorites (#419) - Bugfixes: - Ensure empty but optional fields in file metadata don't error during import (#850) @@ -2488,7 +801,6 @@ Bugfixes: - Hide pod statistics on about page if those are disabled (#835) - Use ASCII filename before upload to S3 to avoid playback issues (#847) - Contributors to this release (committers and reviewers): - Ciarán Ainsworth @@ -2502,16 +814,12 @@ Contributors to this release (committers and reviewers): - Mehdi - Reg - -0.19.0 (2019-05-16) -------------------- +## 0.19.0 (2019-05-16) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Edits on tracks, albums and artists -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Edits on tracks, albums and artists Funkwhale was a bit annoying when it camed to metadata. Tracks, albums and artists profiles were created from audio file tags, but basically immutable after that (unless you had @@ -2528,8 +836,7 @@ Not all fields are currently modifiable using this feature. Especially, it's not to suggest a new album cover, or reassign a track to a different album or artist. Those will be implemented in a future release. -Admin UI for tracks, albums, artists, libraries and uploads -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Admin UI for tracks, albums, artists, libraries and uploads As part of our ongoing effort to make Funkwhale easier to manage for instance owners, this release includes a brand new administration interface to deal with: @@ -2544,8 +851,7 @@ You can use this UI to quickly search for any object, delete objects in batch, u where they are coming from etc. This new UI should remove the need to go through Django's admin in the vast majority of cases (but also includes a link to Django's admin when needed). -Artist hiding in the interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Artist hiding in the interface It's now possible for users to hide artists they don't want to see. @@ -2559,8 +865,7 @@ Content linked to hidden artists will not show up in the interface anymore. Espe Results linked to hidden artists will continue to show up in search results and their profile page remains accessible. -OAuth2 authorization for better integration with third-party apps -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### OAuth2 authorization for better integration with third-party apps Funkwhale now support the OAuth2 authorization and authentication protocol which will allow third-party apps to interact with Funkwhale on behalf of users. @@ -2573,8 +878,7 @@ enabled in a future release). If you want to start building an app on top of Funkwhale's API, please check-out https://docs.funkwhale.audio/api.html and https://docs.funkwhale.audio/developers/authentication.html. -Better error handling and display during import -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Better error handling and display during import Funkwhale should now be more resilient to missing tags in imported files, and give you more insights when something goes wrong, including the specific tags that were missing @@ -2582,8 +886,7 @@ or invalid, and additional debug information to share in your support requests. This information is available in all pages that list uploads, when clicking on the button next to the upload status. -Support for S3-compatible storages to store media files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Support for S3-compatible storages to store media files Storing all media files on the Funkwhale server itself may not be possible or desirable in all scenarios. You can now configure Funkwhale to store those files in a S3 @@ -2592,27 +895,22 @@ bucket instead. Check-out https://docs.funkwhale.audio/admin/external-storages.html if you want to use this feature. -Prune library command -^^^^^^^^^^^^^^^^^^^^^ +### Prune library command Users are often surprised by Funkwhale's tendency to keep track, album and artist metadata even if no associated files exist. -To help with that, we now offer a ``prune_library`` management command you can run -to purge your database from obsolete entries. `Please refer to our documentation -for usage instructions `__. +To help with that, we now offer a `prune_library` management command you can run +to purge your database from obsolete entries. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-library). -Check in-place files command -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Check in-place files command When using in-place import with a living audio library, you'll quite often rename or remove files from the file system. Unfortunately, Funkwhale keeps a reference to those files in the database, which results in unplayable tracks. -To help with that, we now offer a ``check_inplace_files`` management command you can run -to purge your database from obsolete files. `Please refer to our documentation -for usage instructions `__. - +To help with that, we now offer a `check_inplace_files` management command you can run +to purge your database from obsolete files. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database). Features: @@ -2626,7 +924,6 @@ Features: - Support OAuth2 authorization for better integration with third-party apps (#752) - Support S3-compatible storages for media files (#565) - Enhancements: - [Experimental] Added a new "Similar" radio based on users history (suggested by @gordon) @@ -2635,13 +932,14 @@ Enhancements: - Added a prune_library management command to remove obsolete metadata from the database (#777) - Added admin options to disable login for users, ensure related content is deleted when deleting a user account (#809) - Added standardized translation context for all strings in the frontend to give accurate hints to translators. -- Added twitter:* meta tags to detect tracks and albums players automatically on more sites (#578) +- Added twitter:\* meta tags to detect tracks and albums players automatically on more sites (#578) Improved responsiveness of embedded player - Advertise the list of supported upload extensions in the Nodeinfo endpoint (#808) - Better handling of follow/accept messages to avoid and recover from desync between instances (#830) - Better workflow for connecting to another instance (#715) Changing the instance used is now better integrated in the App, and it is checked that the chosen instance and the suggested instances are valid and running Funkwhale servers. + - Bumped dependencies to latest versions (#815) - Descriptions will now be shown underneath user libraries (#768) - Don't store unhandled ActivityPub messages in database (#776) @@ -2661,7 +959,6 @@ Enhancements: - Use attributedTo instead of actor in library ActivityPub payload (#619) - Use network/depends_on instead of links in docker-compose.yml (!716) - Bugfixes: - Add missing command from contributing file (#754) @@ -2687,7 +984,6 @@ Bugfixes: - Use proper site name/domain in emails (#806) - Width of filter menus for radios has been set to stop text from overlapping the borders - Documentation: - Document how to use Redis over unix sockets (#770) @@ -2723,25 +1019,21 @@ Contributors to this release (committers and translators): - Von - Zach Halasz -0.18.3 (2019-03-21) -------------------- +## 0.18.3 (2019-03-21) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html +### Avoid mixed content when deploying mono-container behind proxy [Manual action required] -Avoid mixed content when deploying mono-container behind proxy [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +_You are only concerned if you use the mono-container docker deployment behind a reverse proxy_ -*You are only concerned if you use the mono-container docker deployment behind a reverse proxy* - -Because of `an issue in our mono-container configuration `_, users deploying Funkwhale via docker +Because of [an issue in our mono-container configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), users deploying Funkwhale via docker using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) when browsing the Web UI. -This is fixed in this release, but on existing deployments, you'll need to add ``NESTED_PROXY=1`` in your container -environment (either in your ``.env`` file, or via your container management tool), then recreate your funkwhale container. - +This is fixed in this release, but on existing deployments, you'll need to add `NESTED_PROXY=1` in your container +environment (either in your `.env` file, or via your container management tool), then recreate your funkwhale container. Enhancements: @@ -2750,7 +1042,6 @@ Enhancements: - Exclude in-place imported files from quota computation (#570) - Truncate filename in library file table to ensure correct display of the table. (#735) - Bugfixes: - Avoid mixed content when deploying mono-container behind HTTPS proxy (thetarkus/docker-funkwhale#19) @@ -2767,15 +1058,12 @@ Bugfixes: - Include disc number in Subsonic responses (#765) - Do not send notification when rejecting a follow on a local library (#743) - Documentation: - Added documentation on mono-container docker upgrade (#713) - Added documentation to set up let's encrypt certificate (#745) - -0.18.2 (2019-02-13) -------------------- +## 0.18.2 (2019-02-13) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html @@ -2786,7 +1074,6 @@ Enhancements: IDs after deployments (#706) - Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705) - Bugfixes: - Downgraded channels dependency to 2.1.6 to fix denied uploads (#697) @@ -2794,16 +1081,12 @@ Bugfixes: - Fixed Embed component name that could lead to issue when developing on OSX (#696) - Fixed resizing issues for album cards on artist pages (#694) - -0.18.1 (2019-01-29) -------------------- +## 0.18.1 (2019-01-29) Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html - -Fix Gzip compression to avoid BREACH exploit [security] [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Fix Gzip compression to avoid BREACH exploit [security] [manual action required] In the 0.18 release, we've enabled Gzip compression by default for various content types, including HTML and JSON. Unfortunately, enabling Gzip compression @@ -2812,74 +1095,82 @@ on such content types could make BREACH-type exploits possible. We've removed the risky content-types from our nginx template files, to ensure new instances are safe, however, if you already have an instance, you need to double check that your host nginx virtualhost do not include the following -values for the ``gzip_types`` settings:: +values for the `gzip_types` settings: - application/atom+xml - application/json - application/ld+json - application/activity+json - application/manifest+json - application/rss+xml - application/xhtml+xml - application/xml +``` +application/atom+xml +application/json +application/ld+json +application/activity+json +application/manifest+json +application/rss+xml +application/xhtml+xml +application/xml +``` -For convenience, you can also replace the whole setting with the following snippet:: +For convenience, you can also replace the whole setting with the following snippet: - gzip_types - application/javascript - application/vnd.geo+json - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - font/opentype - image/bmp - image/svg+xml - image/x-icon - text/cache-manifest - text/css - text/plain - text/vcard - text/vnd.rim.location.xloc - text/vtt - text/x-component - text/x-cross-domain-policy; +``` +gzip_types +application/javascript +application/vnd.geo+json +application/vnd.ms-fontobject +application/x-font-ttf +application/x-web-app-manifest+json +font/opentype +image/bmp +image/svg+xml +image/x-icon +text/cache-manifest +text/css +text/plain +text/vcard +text/vnd.rim.location.xloc +text/vtt +text/x-component +text/x-cross-domain-policy; +``` Many thanks to @jibec for the report! -Fix Apache configuration file for 0.18 [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Fix Apache configuration file for 0.18 [manual action required] The way front is served has changed since 0.18. The Apache configuration can't serve 0.18 properly, leading to blank screens. -If you are on an Apache setup, you will have to replace the `` block with the following:: +If you are on an Apache setup, you will have to replace the `` block with the following: - - # similar to nginx 'client_max_body_size 100M;' - LimitRequestBody 104857600 +```apache + + # similar to nginx 'client_max_body_size 100M;' + LimitRequestBody 104857600 - ProxyPass ${funkwhale-api}/ - ProxyPassReverse ${funkwhale-api}/ - + ProxyPass ${funkwhale-api}/ + ProxyPassReverse ${funkwhale-api}/ + +``` -And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way:: +And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way: - ProxyPass "/front" "!" - Alias /front /srv/funkwhale/front/dist +```apache + ProxyPass "/front" "!" + Alias /front /srv/funkwhale/front/dist - ProxyPass "/media" "!" - Alias /media /srv/funkwhale/data/media + ProxyPass "/media" "!" + Alias /media /srv/funkwhale/data/media - ProxyPass "/staticfiles" "!" - Alias /staticfiles /srv/funkwhale/data/static + ProxyPass "/staticfiles" "!" + Alias /staticfiles /srv/funkwhale/data/static +``` -In case you are using custom css and theming, you also need to match this block:: +In case you are using custom css and theming, you also need to match this block: - ProxyPass "/settings.json" "!" - Alias /settings.json /srv/funkwhale/custom/settings.json - - ProxyPass "/custom" "!" - Alias /custom /srv/funkwhale/custom +```apache2 + ProxyPass "/settings.json" "!" + Alias /settings.json /srv/funkwhale/custom/settings.json + ProxyPass "/custom" "!" + Alias /custom /srv/funkwhale/custom +``` Enhancements: @@ -2890,7 +1181,6 @@ Enhancements: - Include shared/public playlists in Subsonic API responses (#684) - Use proper locale for date-related/duration strings (#670) - Bugfixes: - Fix transcoding of in-place imported tracks (#688) @@ -2904,14 +1194,11 @@ Bugfixes: - Removed potential BREACH exploit because of Gzip compression (#678) - Upgraded kombu to fix an incompatibility with redis>=3 - Documentation: - Added user upload documentation at https://docs.funkwhale.audio/users/upload.html - -0.18 "Naomi" (2019-01-22) -------------------------- +## 0.18 "Naomi" (2019-01-22) This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale. Her positivity, love and support have been incredibly helpful and helped shape the project @@ -2922,12 +1209,11 @@ bug hunters, admins and backers. You made it possible! Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html, ensure you also execute the instructions -marked with ``[manual action required]`` and ``[manual action suggested]``. +marked with `[manual action required]` and `[manual action suggested]`. -See ``Full changelog`` below for an exhaustive list of changes! +See `Full changelog` below for an exhaustive list of changes! -Audio transcoding is back! -^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Audio transcoding is back! After removal of our first, buggy transcoding implementation, we're proud to announce that this feature is back. It is enabled by default, and can be configured/disabled @@ -2937,9 +1223,7 @@ This feature works in the browser, with federated/non-federated tracks and using Transcoded tracks are generated on the fly, and cached for a configurable amount of time, to reduce the load on the server. - -Licensing and copyright information -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Licensing and copyright information Funkwhale is now able to parse copyright and license data from file and store this information. Apart from displaying it on each track detail page, @@ -2948,8 +1232,8 @@ will change in future releases. License and copyright data is also broadcasted over federation. -License matching is done on the content of the ``License`` tag in the files, -with a fallback on the ``Copyright`` tag. +License matching is done on the content of the `License` tag in the files, +with a fallback on the `Copyright` tag. Funkwhale will successfully extract licensing data for the following licenses: @@ -2962,9 +1246,7 @@ Funkwhale will successfully extract licensing data for the following licenses: Support for other licenses such as Art Libre or WTFPL will be added in future releases. - -Instance-level moderation tools -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Instance-level moderation tools This release includes a first set of moderation tools that will give more control to admins about the way their instance federates with other instance and accounts on the network. @@ -2980,9 +1262,7 @@ you can appoint one or multiple moderators to help with this task. I'd like to thank all Mastodon contributors, because some of the these tools are heavily inspired from what's being done in Mastodon. Thank you so much! - -Iframe widget to embed public tracks and albums [manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Iframe widget to embed public tracks and albums [manual action required] Funkwhale now supports embedding a lightweight audio player on external websites for album and tracks that are available in public libraries. Important pages, @@ -2993,44 +1273,45 @@ or Twitter). To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have to modify your nginx configuration when upgrading to keep your instance working. -**On docker setups**, edit your ``/srv/funkwhale/nginx/funkwhale.template`` and replace -the ``location /api/`` and `location /` blocks by the following snippets:: +**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template` and replace +the `location /api/` and `location /` blocks by the following snippets: - location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; - } +```nginx +location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; +} - location /front/ { - alias /frontend/; - } +location /front/ { + alias /frontend/; +} +``` The change of configuration will be picked when restarting your nginx container. -**On non-docker setups**, edit your ``/etc/nginx/sites-available/funkwhale.conf`` file, -and replace the ``location /api/`` and `location /` blocks by the following snippets:: +**On non-docker setups**, edit your `/etc/nginx/sites-available/funkwhale.conf` file, +and replace the `location /api/` and `location /` blocks by the following snippets: +```nginx +location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; +} - location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; - } +location /front/ { + alias ${FUNKWHALE_FRONTEND_PATH}/; +} +``` - location /front/ { - alias ${FUNKWHALE_FRONTEND_PATH}/; - } +Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from your .env file, +which should be `/srv/funkwhale/front/dist` by default, then reload your nginx process with +`sudo systemctl reload nginx`. -Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from your .env file, -which should be ``/srv/funkwhale/front/dist`` by default, then reload your nginx process with -``sudo systemctl reload nginx``. - - -Alternative docker deployment method -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Alternative docker deployment method Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale, we're now able to provide an alternative and easier Docker deployment method! @@ -3041,76 +1322,76 @@ all Funkwhale processes and services (database, redis, etc.) into a single, easi Both methods will coexist in parallel, as each one has pros and cons. You can learn more about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html! -Automatically load .env file -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Automatically load .env file On non-docker deployments, earlier versions required you to source -the config/.env file before launching any Funkwhale command, with ``export $(cat config/.env | grep -v ^# | xargs)`` +the config/.env file before launching any Funkwhale command, with `export $(cat config/.env | grep -v ^# | xargs)` This led to more complex and error prone deployment / setup. This is not the case anymore, and Funkwhale will automatically load this file if it's available. - -Delete pre 0.17 federated tracks [manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Delete pre 0.17 federated tracks [manual action suggested] If you were using Funkwhale before the 0.17 release and federated with other instances, it's possible that you still have some unplayable federated files in the database. To purge the database of those entries, you can run the following command: -On docker setups:: +On docker setups: - docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input +```sh +docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input +``` -On non-docker setups:: +On non-docker setups: - python manage.py script delete_pre_017_federated_uploads --no-input +```sh +python manage.py script delete_pre_017_federated_uploads --no-input +``` - -Enable gzip compression [manual action suggested] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Enable gzip compression [manual action suggested] Gzip compression will be enabled on new instances by default and will reduce the amount of bandwidth consumed by your instance. If you want to benefit from gzip compression on your instance, -edit your reverse proxy virtualhost file (located at ``/etc/nginx/sites-available/funkwhale.conf``) and add the following snippet -in the server block, then reload your nginx server:: +edit your reverse proxy virtualhost file (located at `/etc/nginx/sites-available/funkwhale.conf`) and add the following snippet +in the server block, then reload your nginx server: - server { - # ... exiting configuration +```nginx +server { + # ... - # compression settings - gzip on; - gzip_comp_level 5; - gzip_min_length 256; - gzip_proxied any; - gzip_vary on; + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; - gzip_types - application/javascript - application/vnd.geo+json - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - font/opentype - image/bmp - image/svg+xml - image/x-icon - text/cache-manifest - text/css - text/plain - text/vcard - text/vnd.rim.location.xloc - text/vtt - text/x-component - text/x-cross-domain-policy; - # end of compression settings - } + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings +} +``` -Full changelog -^^^^^^^^^^^^^^ +### Full changelog Features: @@ -3119,7 +1400,6 @@ Features: - First set of instance level moderation tools (#580, !521) - Store licensing and copyright information from file metadata, if available (#308) - Enhancements: - Add UI elements for multi-disc albums (#631) @@ -3157,7 +1437,6 @@ Enhancements: - Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657) - Improved test suite speed by reducing / disabling expensive operations (#648) - Bugfixes: - Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469) @@ -3188,32 +1467,26 @@ Bugfixes: - Refresh profile after user settings update to avoid cache issues (#606) - Use role=button instead of empty links for player controls (#610) - Documentation: - Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642) - Document how to find and use library id when importing files in CLI (#562) - Fix documentation typos (#645) +## 0.17 (2018-10-07) -0.17 (2018-10-07) ------------------ - -Per user libraries -^^^^^^^^^^^^^^^^^^ +### Per user libraries This release contains a big change in music management. This has a lot of impact on how Funkwhale behaves, and you should have a look at https://docs.funkwhale.audio/upgrading/0.17.html for information about what changed and how to migrate. - Features: - Per user libraries (#463, also fixes #160 and #147) - Authentication using a LDAP directory (#194) - Enhancements: - Add configuration option to set Musicbrainz hostname @@ -3238,19 +1511,15 @@ Bugfixes: - Set sane width default for ui cards and center play button (#530) - Updated wrong icon and copy in play button dropdown (#436) - Documentation: - Fixed wrong URLs for docker / nginx files in documentation (#537) - Other: - Added a merge request template and more documentation about the changelog - -Using a LDAP directory to authenticate to your Funkwhale instance -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Using a LDAP directory to authenticate to your Funkwhale instance Funkwhale now support LDAP as an authentication source: you can configure your instance to delegate login to a LDAP directory, which is especially @@ -3262,9 +1531,7 @@ You can use this authentication backend side by side with the classic one. Have a look at https://docs.funkwhale.audio/installation/ldap.html for detailed instructions on how to set this up. - -Simplified nginx setup [Docker: Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Simplified nginx setup [Docker: Manual action required] We've received a lot of user feedback regarding our installation process, and it seems the proxy part is the one which is the most confusing and difficult. @@ -3279,119 +1546,129 @@ On non-docker instances, you have nothing to do. If you have a dockerized instance, here is the upgrade path. -First, tweak your .env file:: +First, tweak your .env file: - # remove the FUNKWHALE_URL variable - # and add the next variables - FUNKWHALE_HOSTNAME=yourdomain.funkwhale - FUNKWHALE_PROTOCOL=https +```sh +# remove the FUNKWHALE_URL variable +# and add the next variables +FUNKWHALE_HOSTNAME=yourdomain.funkwhale +FUNKWHALE_PROTOCOL=https - # add the following variable, matching the path your app is deployed - # leaving the default should work fine if you deployed using the same - # paths as the documentation - FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist +# add the following variable, matching the path your app is deployed +# leaving the default should work fine if you deployed using the same +# paths as the documentation +FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist +``` -Then, add the following block at the end of your docker-compose.yml file:: +Then, add the following block at the end of your docker-compose.yml file: - # existing services - api: - ... - celeryworker: - ... +```yaml +services: + # existing services + api: + # ... + celeryworker: + # ... - # new service - nginx: - image: nginx - env_file: - - .env - environment: - # Override those variables in your .env file if needed - - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" - volumes: - - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" - - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" - - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" - - "${STATIC_ROOT}:${STATIC_ROOT}:ro" - - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" - ports: - # override those variables in your .env file if needed - - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" - command: > - sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" - < /etc/nginx/conf.d/funkwhale.template - > /etc/nginx/conf.d/default.conf - && cat /etc/nginx/conf.d/default.conf - && nginx -g 'daemon off;'" - links: - - api + # new service + nginx: + image: nginx + env_file: + - .env + environment: + # Override those variables in your .env file if needed + - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" + volumes: + - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" + - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" + - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" + - "${STATIC_ROOT}:${STATIC_ROOT}:ro" + - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" + ports: + # override those variables in your .env file if needed + - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" + command: > + sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" + < /etc/nginx/conf.d/funkwhale.template + > /etc/nginx/conf.d/default.conf + && cat /etc/nginx/conf.d/default.conf + && nginx -g 'daemon off;'" + links: + - api +``` By doing that, you'll enable a dockerized nginx that will automatically be configured to serve your Funkwhale instance. Download the required configuration files for the nginx container: -.. parsed-literal:: +```{parsed-literal} +cd /srv/funkwhale +mkdir nginx +curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" +curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" +``` - cd /srv/funkwhale - mkdir nginx - curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" - curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" +Update the funkwhale.conf configuration of your server's reverse-proxy: -Update the funkwhale.conf configuration of your server's reverse-proxy:: +```sh +# the file should match something like that, upgrade all variables +# between ${} to match the ones in your .env file, +# and your SSL configuration if you're not using let's encrypt +# The important thing is that you only have a single location block +# that proxies everything to your dockerized nginx. - # the file should match something like that, upgrade all variables - # between ${} to match the ones in your .env file, - # and your SSL configuration if you're not using let's encrypt - # The important thing is that you only have a single location block - # that proxies everything to your dockerized nginx. +sudo nano /etc/nginx/sites-enabled/funkwhale.conf +``` - sudo nano /etc/nginx/sites-enabled/funkwhale.conf - upstream fw { - # depending on your setup, you may want to update this - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; - } - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - server { - listen 80; - listen [::]:80; - server_name ${FUNKWHALE_HOSTNAME}; - location / { return 301 https://$host$request_uri; } - } - server { - listen 443 ssl; - listen [::]:443 ssl; - server_name ${FUNKWHALE_HOSTNAME}; - - # TLS - ssl_protocols TLSv1.2; - ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; - ssl_prefer_server_ciphers on; - ssl_session_cache shared:SSL:10m; - ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; - - # HSTS - add_header Strict-Transport-Security "max-age=31536000"; - - location / { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://fw/; - } +```nginx +upstream fw { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + listen [::]:80; + server_name ${FUNKWHALE_HOSTNAME}; + location / { return 301 https://$host$request_uri; } +} +server { + listen 443 ssl; + listen [::]:443 ssl; + server_name ${FUNKWHALE_HOSTNAME}; + + # TLS + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; + + # HSTS + add_header Strict-Transport-Security "max-age=31536000"; + + location / { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://fw/; } +} +``` Check that your configuration is valid then reload: - sudo nginx -t - sudo systemctl reload nginx +```sh +sudo nginx -t +sudo systemctl reload nginx +``` - -0.16.3 (2018-08-21) -------------------- +## 0.16.3 (2018-08-21) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -3400,14 +1677,11 @@ Bugfixes: - Fixed front-end not contacting the proper path on the API (!385) +## 0.16.2 (2018-08-21) -0.16.2 (2018-08-21) -------------------- - -.. warning:: - - **This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** - +```{warning} +**This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** +``` Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -3419,9 +1693,7 @@ Bugfixes: - Fixed CLI importer syntax error because of async reserved keyword usage (#494) - -0.16.1 (2018-08-19) -------------------- +## 0.16.1 (2018-08-19) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -3439,7 +1711,6 @@ Enhancements: - Simpler configuration and toolchain for the front-end using vue-cli (!375) - Use Howler to manage audio instead of our own dirty/untested code (#392) - Bugfixes: - Fix alignment issue on top bar in Admin tabs (#395) @@ -3463,40 +1734,39 @@ Bugfixes: - Smarter date parsing during import by replacing arrow with pendulum (#376) - Display public playlists properly for anonymous users (#488) - i18n: - Added portuguese, spanish and german translations - -Custom themes for Funkwhale -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Custom themes for Funkwhale If you ever wanted to give a custom look and feel to your instance, this is now possible. Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more! - -Fix Apache2 configuration file for media block [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Fix Apache2 configuration file for media block [Manual action required] The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served. -On Apache2 setups, you have to replace the following line:: +On Apache2 setups, you have to replace the following line: - +```apache + +``` -with:: +with: - +```apache + +``` -You can now restart your server:: +You can now restart your server: - sudo systemctl restart apache2 +```sh +sudo systemctl restart apache2 +``` - -0.16 (2018-07-22) ------------------ +## 0.16 (2018-07-22) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -3511,7 +1781,6 @@ Features: Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167) - Users can now upload an avatar in their settings page (#257) - Enhancements: - Added feedback when creating/updating radio (#302) @@ -3529,7 +1798,6 @@ Enhancements: - The navigation bar of Library is now fixed (#375) - Use thumbnails for avatars and covers to reduce bandwidth - Bugfixes: - Ensure 750 permissions on CI artifacts (#332) @@ -3546,7 +1814,6 @@ Bugfixes: - Subsonic API login is now case insensitive (#339) - Validate Date header in HTTP Signatures (#328) - Documentation: - Added troubleshotting and technical overview documentation (#256) @@ -3555,15 +1822,12 @@ Documentation: - Fixed a couple of typos - Some cosmetic improvements to the doc - i18n: - Arabic translation (!302) - Polish translation (!304) - -Library home and playlist page overhaul -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Library home and playlist page overhaul The library home page have been completely redesigned to include: @@ -3575,9 +1839,7 @@ what you think about it! The playlist page have been updated as well. - -Internationalized interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Internationalized interface After months of work, we're proud to announce our interface is now ready for internationalization. @@ -3587,9 +1849,7 @@ and we're ready to add more as needed. You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/ - -Better handling of tracks with a different artist than the album artist -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Better handling of tracks with a different artist than the album artist Some tracks involve a different artist than the album artist (e.g. a featuring) and Funkwhale has been known to do weird things when importing such tracks, resulting @@ -3598,9 +1858,7 @@ in albums that contained a single track, for instance. The situation should be improved with this release, as Funkwhale is now able to store separately the track and album artist, and display it properly in the interface. - -Users now have an ActivityPub Actor [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Users now have an ActivityPub Actor [Manual action required] In the process of implementing federation for user activity such as listening history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation. @@ -3610,19 +1868,21 @@ This does not means the federation is working, but this is a needed step to impl Those profiles will be created automatically for new users, but you have to run a command to create them for existing users. -On docker setups:: +On docker setups: - docker-compose run --rm api python manage.py script create_actors --no-input +```sh +docker-compose run --rm api python manage.py script create_actors --no-input +``` -On non-docker setups:: +On non-docker setups: - python manage.py script create_actors --no-input +```sh +python manage.py script create_actors --no-input +``` This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times. - -Image thumbnails [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Image thumbnails [Manual action required] To reduce bandwidth usage on slow or limited connexions and improve performance in general, we now use smaller images in the front-end. For instance, if you have @@ -3633,20 +1893,22 @@ when we don't actually need the original image. Thumbnail will be created automatically for new objects, however, you have to launch a manual command to deal with existing ones. -On docker setups:: +On docker setups: - docker-compose run --rm api python manage.py script create_image_variations --no-input +```sh +docker-compose run --rm api python manage.py script create_image_variations --no-input +``` -On non-docker setups:: +On non-docker setups: - python manage.py script create_image_variations --no-input +```sh +python manage.py script create_image_variations --no-input +``` This should be quite fast but may take up to a few minutes depending on the number of albums you have in database. It is safe to interrupt the process or rerun it multiple times. - -Improved search on federated tracks list -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Improved search on federated tracks list Having a powerful but easy-to-use search is important but difficult to achieve, especially if you do not want to have a real complex search interface. @@ -3659,15 +1921,13 @@ tracks list (/manage/federation/tracks) at the moment, but depending on feedback This is the type of query you can run: -- ``hello world``: search for "hello" and "world" in all the available fields -- ``hello in:artist`` search for results where artist name is "hello" -- ``spring in:artist,album`` search for results where artist name or album title contain "spring" -- ``artist:hello`` search for results where artist name equals "hello" -- ``artist:"System of a Down" domain:instance.funkwhale`` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library +- `hello world`: search for "hello" and "world" in all the available fields +- `hello in:artist` search for results where artist name is "hello" +- `spring in:artist,album` search for results where artist name or album title contain "spring" +- `artist:hello` search for results where artist name equals "hello" +- `artist:"System of a Down" domain:instance.funkwhale` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library - -Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitly [Manual action required] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set explicitly [Manual action required] In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing some deployment issues on non-docker setups when people forgot to uncomment them. @@ -3681,55 +1941,54 @@ This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SE whose values are now used directly to set up the proper Docker volumes. This will only affect new deployments though. If you want to benefit from this on an -existing instance, do a backup of your ``.env`` and ``docker-compose.yml`` files and apply the following changes: +existing instance, do a backup of your `.env` and `docker-compose.yml` files and apply the following changes: -- Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the absolute path where media files are stored - on your host (``/srv/funkwhale/data/media`` by default) -- Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the absolute path where static files are stored - on your host (``/srv/funkwhale/data/static`` by default) +- Ensure `MEDIA_ROOT` is uncommented in your .env file and match the absolute path where media files are stored + on your host (`/srv/funkwhale/data/media` by default) +- Ensure `STATIC_ROOT` is uncommented in your .env file and match the absolute path where static files are stored + on your host (`/srv/funkwhale/data/static` by default) - If you use in-place import: - - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music`` - - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files - are stored (``/srv/funkwhale/data/music`` by default) + - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music` + - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files + are stored (`/srv/funkwhale/data/music` by default) - Edit your docker-compose.yml file to reflect the changes: - - Search for volumes (there should be two occurrences) that contains ``/app/funkwhale_api/media`` on the right side, and - replace the whole line with ``- "${MEDIA_ROOT}:${MEDIA_ROOT}"`` - - Search for a volume that contains ``/app/staticfiles`` on the right side, and - replace the whole line with ``- "${STATIC_ROOT}:${STATIC_ROOT}"`` - - If you use in-place import, search for volumes (there should be two occurrences) that contains ``/music:ro`` on the right side, and - replace the whole line with ``- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"`` + - Search for volumes (there should be two occurrences) that contains `/app/funkwhale_api/media` on the right side, and + replace the whole line with `- "${MEDIA_ROOT}:${MEDIA_ROOT}"` + - Search for a volume that contains `/app/staticfiles` on the right side, and + replace the whole line with `- "${STATIC_ROOT}:${STATIC_ROOT}"` + - If you use in-place import, search for volumes (there should be two occurrences) that contains `/music:ro` on the right side, and + replace the whole line with `- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"` -In the end, the ``volumes`` directives of your containers should look like that:: +In the end, the `volumes` directives of your containers should look like that: - ... - celeryworker - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - ... - api: - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - - "${STATIC_ROOT}:${STATIC_ROOT}" - - ./front/dist:/frontend - ... +```yaml +services: + # ... + celeryworker: + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + # ... + api: + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + - "${STATIC_ROOT}:${STATIC_ROOT}" + - ./front/dist:/frontend + # ... +``` - -Removed Cacheops dependency -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Removed Cacheops dependency We removed one of our dependency named django-cacheops. It was unly used in a few places, and not playing nice with other dependencies. -You can safely remove this dependency in your environment with ``pip uninstall django-cacheops`` if you're +You can safely remove this dependency in your environment with `pip uninstall django-cacheops` if you're not using docker. -You can also safely remove any ``CACHEOPS_ENABLED`` setting from your environment file. +You can also safely remove any `CACHEOPS_ENABLED` setting from your environment file. - -0.15 (2018-06-24) ------------------ +## 0.15 (2018-06-24) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -3744,13 +2003,11 @@ Features: - Management interface for users (#212) - New invite system (#248) New invite system - Enhancements: - Added "TV" to the list of highlighted words during YouTube import (#154) - Command line import now accepts unlimited args (#242) - Bugfixes: - Expose track files date in manage API (#307) @@ -3759,16 +2016,13 @@ Bugfixes: - Include user's current private playlists on playlist list (#302) - Remove link to generic radios, since they don't have detail pages (#324) - Documentation: - Document that Funkwhale may be installed with YunoHost (#325) - Documented a saner layout with symlinks for in-place imports (#254) - Upgrade documentation now use the correct user on non-docker setups (#265) - -Invite system -^^^^^^^^^^^^^ +### Invite system On closed instances, it has always been a little bit painful to create accounts by hand for new users. This release solve that by adding invitations. @@ -3782,9 +2036,7 @@ if you need to print them or make them fancier ;) Invitations generation and management requires the "settings" permission. - -Removed front-end and back-end coupling -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Removed front-end and back-end coupling Even though Funkwhale's front-end has always been a Single Page Application, talking to an API, it was only able to talk to an API on the same domain. @@ -3804,14 +2056,12 @@ by leveraging Gitlab CI and review apps, we are now able to deploy automatically a merge request, making it possible for anyone to review front-end changes easily, without the need to install a local environment. +## 0.14.2 (2018-06-16) -0.14.2 (2018-06-16) -------------------- - -.. warning:: - - This release contains a fix for a permission issue. You should upgrade - as soon as possible. Read the changelog below for more details. +```{warning} +This release contains a fix for a permission issue. You should upgrade +as soon as possible. Read the changelog below for more details. +``` Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -3834,21 +2084,17 @@ Bugfixes: - Fixed broken pagination in Subsonic API (#295) - Fixed duplicated websocket connection on timeline (#287) - Documentation: - Improved documentation about in-place imports setup (#298) - Other: - Added Black and flake8 checks in CI to ensure consistent code styling and formatting (#297) - Added bug and feature issue templates (#299) - -Permission issues on radios -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Permission issues on radios Because of an error in the way we checked user permissions on radios, public radios could be deleted by any logged-in user, even if they were not @@ -3857,9 +2103,7 @@ the owner of the radio. We recommend instances owners to upgrade as fast as possible to avoid any abuse and data loss. - -Funkwhale is now licenced under AGPL-3 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Funkwhale is now licenced under AGPL-3 Following the recent switch made by PixelFed (https://github.com/dansup/pixelfed/issues/143), we decided along with @@ -3872,25 +2116,25 @@ switch for various reasons: As end users and instance owners, this does not change anything. You can continue to use Funkwhale exactly as you did before :) - -Apache support for websocket -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Apache support for websocket Up until now, our Apache2 configuration was not working with websockets. This is now -solved by adding this at the beginning of your Apache2 configuration file:: +solved by adding this at the beginning of your Apache2 configuration file: - Define funkwhale-api-ws ws://localhost:5000 +```apache +Define funkwhale-api-ws ws://localhost:5000 +``` -And this, before the "/api" block:: +And this, before the "/api" block: - # Activating WebSockets - ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity +```apache +# Activating WebSockets +ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity +``` Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available. - -Serving album covers in https (Apache2 proxy) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Serving album covers in https (Apache2 proxy) Two issues are addressed here. The first one was about Django replying with mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` @@ -3901,39 +2145,38 @@ Second issue was a problem of permission causing Apache a denied access to album cover folder. It is solved by adding another block for this path in the Apache configuration file for funkwhale. -Here is how to modify your `funkwhale.conf` apache2 configuration:: +Here is how to modify your `funkwhale.conf` apache2 configuration: - +```apache + + # ... + #Add this new line + RequestHeader set X-Forwarded-Proto "https" + # ... + # Add this new block below the other blocks + # replace /srv/funkwhale/data/media with the path to your media directory + # if you're not using the standard layout. + + Options FollowSymLinks + AllowOverride None + Require all granted + + # ... + +``` - ... - #Add this new line - RequestHeader set X-Forwarded-Proto "https" - ... - # Add this new block below the other blocks - # replace /srv/funkwhale/data/media with the path to your media directory - # if you're not using the standard layout. - - Options FollowSymLinks - AllowOverride None - Require all granted - - ... - +### About the makemigrations warning +You may sometimes get the following warning while applying migrations: -About the makemigrations warning -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You may sometimes get the following warning while applying migrations:: - - "Your models have changes that are not yet reflected in a migration, and so won't be applied." +``` +"Your models have changes that are not yet reflected in a migration, and so won't be applied." +``` This is a warning, not an error, and it can be safely ignored. -Never run the ``makemigrations`` command yourself. +Never run the `makemigrations` command yourself. - -0.14.1 (2018-06-06) -------------------- +## 0.14.1 (2018-06-06) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -3958,14 +2201,11 @@ Bugfixes: - Fixed broken track download modal (overflow and wrong URL) (#239) - Removed hardcoded size limit in file upload widget (#275) - Documentation: -- Added warning about _protected/music location in nginx configuration (#247) +- Added warning about \_protected/music location in nginx configuration (#247) - -Removed alpha-state transcoding (#271) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Removed alpha-state transcoding (#271) A few months ago, a basic transcoding feature was implemented. Due to the way this feature was designed, it was slow, CPU intensive on the server side, @@ -3977,54 +2217,54 @@ Based on that, we're currently removing support for transcoding can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272. You don't have to do anything on your side, but you may want to remove -the now obsolete configuration from your reverse proxy file (nginx only):: +the now obsolete configuration from your reverse proxy file (nginx only): - # Remove those blocks: +```nginx +# Remove those blocks: - # transcode cache - proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; +# transcode cache +proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; - # Transcoding logic and caching - location = /transcode-auth { - include /etc/nginx/funkwhale_proxy.conf; - # needed so we can authenticate transcode requests, but still - # cache the result - internal; - set $query ''; - # ensure we actually pass the jwt to the underlytin auth url - if ($request_uri ~* "[^\?]+\?(.*)$") { - set $query $1; - } - proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; - proxy_pass_request_body off; - proxy_set_header Content-Length ""; +# Transcoding logic and caching +location = /transcode-auth { + include /etc/nginx/funkwhale_proxy.conf; + # needed so we can authenticate transcode requests, but still + # cache the result + internal; + set $query ''; + # ensure we actually pass the jwt to the underlytin auth url + if ($request_uri ~* "[^\?]+\?(.*)$") { + set $query $1; } + proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; +} - location /api/v1/trackfiles/transcode/ { - include /etc/nginx/funkwhale_proxy.conf; - # this block deals with authenticating and caching transcoding - # requests. Caching is heavily recommended as transcoding - # is a CPU intensive process. - auth_request /transcode-auth; - if ($args ~ (.*)jwt=[^&]*(.*)) { - set $cleaned_args $1$2; - } - proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; - proxy_cache transcode; - proxy_cache_valid 200 7d; - proxy_ignore_headers "Set-Cookie"; - proxy_hide_header "Set-Cookie"; - add_header X-Cache-Status $upstream_cache_status; - proxy_pass http://funkwhale-api; +location /api/v1/trackfiles/transcode/ { + include /etc/nginx/funkwhale_proxy.conf; + # this block deals with authenticating and caching transcoding + # requests. Caching is heavily recommended as transcoding + # is a CPU intensive process. + auth_request /transcode-auth; + if ($args ~ (.*)jwt=[^&]*(.*)) { + set $cleaned_args $1$2; } - # end of transcoding logic + proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; + proxy_cache transcode; + proxy_cache_valid 200 7d; + proxy_ignore_headers "Set-Cookie"; + proxy_hide_header "Set-Cookie"; + add_header X-Cache-Status $upstream_cache_status; + proxy_pass http://funkwhale-api; +} +# end of transcoding logic +``` - -0.14 (2018-06-02) ------------------ +## 0.14 (2018-06-02) Upgrade instructions are available at - https://docs.funkwhale.audio/upgrading.html +https://docs.funkwhale.audio/upgrading.html Features: @@ -4035,7 +2275,6 @@ Features: is implemented on the federated tracks pages, but will be included in other pages as well depending on the feedback. - Enhancements: - Added a new "upload" permission that allows user to launch import and view @@ -4052,7 +2291,6 @@ Enhancements: - Retructured music API to increase performance and remove useless endpoints (#224) - Bugfixes: - Consistent constraints/checks for URL size (#207) @@ -4077,14 +2315,11 @@ Documentation: - Added missing subsonic configuration block in deployment vhost files (#249) - Moved upgrade doc under install doc in TOC (#251) - Other: - Removed acoustid support, as the integration was buggy and error-prone (#106) - -Files management interface -^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Files management interface This is the first bit of an ongoing work that will span several releases, to bring more powerful library management features to Funkwhale. This iteration @@ -4092,8 +2327,7 @@ includes a basic file management interface where users with the "library" permission can list and search available files, order them using various criteria (size, bitrate, duration...) and delete them. -New "upload" permission -^^^^^^^^^^^^^^^^^^^^^^^ +### New "upload" permission This new permission is helpful if you want to give upload/import rights to some users, but don't want them to be able to manage the library as a whole: @@ -4112,8 +2346,7 @@ On public/open instances, this will play well with the "upload" permission since everyone will be able to contribute to the instance library without an admin giving the permission to every single user. -Smarter album cover importer -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Smarter album cover importer In earlier versions, covers where only imported when launching a YouTube import. Starting from this release, covers will be imported regardless of the import mode @@ -4128,78 +2361,77 @@ This will only work for newly imported tracks and albums though. In the future, we may offer an option to refetch album covers from the interface, but in the meantime, you can use the following snippet: -.. code-block:: python +```python +# Store this in /tmp/update_albums.py +from funkwhale_api.music.models import Album, TrackFile +from funkwhale_api.music.tasks import update_album_cover - # Store this in /tmp/update_albums.py - from funkwhale_api.music.models import Album, TrackFile - from funkwhale_api.music.tasks import update_album_cover +albums_without_covers = Album.objects.filter(cover='') +total = albums_without_covers.count() +print('Found {} albums without cover'.format(total)) +for i, album in enumerate(albums_without_covers.iterator()): + print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) + f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() + update_album_cover(album, track_file=f) +``` - albums_without_covers = Album.objects.filter(cover='') - total = albums_without_covers.count() - print('Found {} albums without cover'.format(total)) - for i, album in enumerate(albums_without_covers.iterator()): - print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) - f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() - update_album_cover(album, track_file=f) +Then launch it: -Then launch it:: +```sh +# docker setups +cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python - # docker setups - cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python +# non-docker setups +source /srv/funkwhale/load_env +source /srv/funkwhale/virtualenv/bin/activate +cat /tmp/update_albums.py | python manage.py shell -i python - # non-docker setups - source /srv/funkwhale/load_env - source /srv/funkwhale/virtualenv/bin/activate - cat /tmp/update_albums.py | python manage.py shell -i python +# cleanup +rm /tmp/update_albums.py +``` - # cleanup - rm /tmp/update_albums.py +```{note} +Depending on your number of albums, the previous snippet may take some time +to execute. You can interrupt it at any time using ctrl-c and relaunch it later, +as it's idempotent. +``` -.. note:: - - Depending on your number of albums, the previous snippet may take some time - to execute. You can interrupt it at any time using ctrl-c and relaunch it later, - as it's idempotent. - -Music API changes -^^^^^^^^^^^^^^^^^ +### Music API changes This release includes an API break. Even though the API is advertised as unstable, and not documented, here is a brief explanation of the change in case you are using the API in a client or in a script. Summary of the changes: -- ``/api/v1/artists`` does not includes a list of tracks anymore. It was to heavy +- `/api/v1/artists` does not includes a list of tracks anymore. It was to heavy to return all of this data all the time. You can get all tracks for an - artist using ``/api/v1/tracks?artist=artist_id`` -- Additionally, ``/api/v1/tracks`` now support an ``album`` filter to filter + artist using `/api/v1/tracks?artist=artist_id` +- Additionally, `/api/v1/tracks` now support an `album` filter to filter tracks matching an album -- ``/api/v1/artists/search``, ``/api/v1/albums/search`` and ``/api/v1/tracks/search`` - endpoints are removed. Use ``/api/v1/{artists|albums|tracks}/?q=yourquery`` +- `/api/v1/artists/search`, `/api/v1/albums/search` and `/api/v1/tracks/search` + endpoints are removed. Use `/api/v1/{artists|albums|tracks}/?q=yourquery` instead. It's also more powerful, since you can combine search with other filters and ordering options. -- ``/api/v1/requests/import-requests/search`` endpoint is removed as well. - Use ``/api/v1/requests/import-requests/?q=yourquery`` +- `/api/v1/requests/import-requests/search` endpoint is removed as well. + Use `/api/v1/requests/import-requests/?q=yourquery` instead. It's also more powerful, since you can combine search with other filters and ordering options. Of course, the front-end was updated to work with the new API, so this should not impact end-users in any way, apart from slight performance gains. -.. note:: +```{note} +The API is still not stable and may evolve again in the future. API freeze +will come at a later point. +``` - The API is still not stable and may evolve again in the future. API freeze - will come at a later point. - -Flac files imports via upload -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Flac files imports via upload You have nothing to do to benefit from this, however, since Flac files tend to be a lot bigger than other files, you may want to increase the -``client_max_body_size`` value in your Nginx configuration if you plan +`client_max_body_size` value in your Nginx configuration if you plan to upload flac files. -Missing subsonic configuration block in vhost files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Missing subsonic configuration block in vhost files Because of a missing block in the sample Nginx and Apache configurations, instances that were deployed after the 0.13 release are likely to be unable @@ -4209,26 +2441,28 @@ in the changelog). Ensure you have the following snippets in your Nginx or Apache configuration if you plan to use the Subsonic API. -Nginx:: +Nginx: - location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; - } +```nginx +location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; +} +``` -Apache2:: +Apache2: - - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest - +```apache + + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest + +``` - -0.13 (2018-05-19) ------------------ +## 0.13 (2018-05-19) Upgrade instructions are available at - https://docs.funkwhale.audio/upgrading.html +https://docs.funkwhale.audio/upgrading.html Features: @@ -4237,14 +2471,12 @@ Features: - Store file length, size and bitrate (#195) - We now have a brand new instance settings interface in the front-end (#206) - Enhancements: - Disabled browsable HTML API in production (#205) - Instances can now indicate on the nodeinfo endpoint if they want to remain private (#200) - Bugfixes: - .well-known/nodeinfo endpoint can now answer to request with Accept: @@ -4256,9 +2488,7 @@ Bugfixes: - Removed Python 3.6 dependency (secrets module) (#198) - Uplayable tracks are now properly disabled in the interface (#199) - -Instance settings interface -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Instance settings interface Prior to this release, the only way to update instance settings (such as instance description, signup policy, federation configuration, etc.) was using @@ -4270,11 +2500,9 @@ Starting from this release, we now offer a dedicated interface directly in the front-end. You can view and edit all your instance settings from here, assuming you have the required permissions. -This interface is available at ``/manage/settings`` and via link in the sidebar. +This interface is available at `/manage/settings` and via link in the sidebar. - -Storage of bitrate, size and length in database -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Storage of bitrate, size and length in database Starting with this release, when importing files, Funkwhale will store additional information about audio files: @@ -4289,33 +2517,30 @@ we offer a command to deal with legacy files and populate the missing values. On docker setups: -.. code-block:: shell - - docker-compose run --rm api python manage.py fix_track_files - +```sh +docker-compose run --rm api python manage.py fix_track_files +``` On non-docker setups: -.. code-block:: shell +```sh +# from your activated virtualenv +python manage.py fix_track_files +``` - # from your activated virtualenv - python manage.py fix_track_files +```{note} +The execution time for this command is proportional to the number of +audio files stored on your instance. This is because we need to read the +files from disk to fetch the data. You can run it in the background +while Funkwhale is up. -.. note:: +It's also safe to interrupt this command and rerun it at a later point, or run +it multiple times. - The execution time for this command is proportional to the number of - audio files stored on your instance. This is because we need to read the - files from disk to fetch the data. You can run it in the background - while Funkwhale is up. +Use the --dry-run flag to check how many files would be impacted. +``` - It's also safe to interrupt this command and rerun it at a later point, or run - it multiple times. - - Use the --dry-run flag to check how many files would be impacted. - - -Simpler permission system -^^^^^^^^^^^^^^^^^^^^^^^^^ +### Simpler permission system Starting from this release, the permission system is much simpler. Up until now, we were using Django's built-in permission system, which was working, but also @@ -4329,27 +2554,25 @@ you can migrate those to the new system. On docker setups: -.. code-block:: shell - - docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input +```sh +docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input +``` On non-docker setups: -.. code-block:: shell - - # in your virtualenv - python api/manage.py script django_permissions_to_user_permissions --no-input +```sh +# in your virtualenv +python api/manage.py script django_permissions_to_user_permissions --no-input +``` There is still no dedicated interface to manage user permissions, but you -can use the admin interface at ``/api/admin/users/user/`` for that purpose in +can use the admin interface at `/api/admin/users/user/` for that purpose in the meantime. - -0.12 (2018-05-09) ------------------ +## 0.12 (2018-05-09) Upgrade instructions are available at - https://docs.funkwhale.audio/upgrading.html +https://docs.funkwhale.audio/upgrading.html Features: @@ -4357,25 +2580,20 @@ Features: as DSub (#75) - Use nodeinfo standard for publishing instance information (#192) - Enhancements: - Play button now play tracks immediately instead of appending them to the queue (#99, #156) - Bugfixes: - Fix broken federated import (#193) - Documentation: - Up-to-date documentation for upgrading front-end files on docker setup (#132) - -Subsonic API -^^^^^^^^^^^^ +### Subsonic API This release implements some core parts of the Subsonic API, which is widely deployed in various projects and supported by numerous clients. @@ -4387,44 +2605,46 @@ without developing our own alternative clients for each and every platform. Most advanced Subsonic clients support offline caching of music files, playlist management and search, which makes them well-suited for nomadic use. -Please see `our list of supported apps `_ +Please see [our list of supported apps](https://funkwhale.audio/apps) for more information about supported clients and user instructions. At the instance-level, the Subsonic API is enabled by default, but require and additional endpoint to be added in you reverse-proxy configuration. -On nginx, add the following block:: +On nginx, add the following block: - location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; - } +```nginx +location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; +} +``` -On Apache, add the following block:: +On Apache, add the following block: - - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest - +```apache + + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest + +``` The Subsonic can be disabled at the instance level from the django admin. -.. note:: +```{note} +Because of Subsonic's API design which assumes cleartext storing of +user passwords, we chose to have a dedicated, separate password +for that purpose. Users can generate this password from their +settings page in the web client. +``` - Because of Subsonic's API design which assumes cleartext storing of - user passwords, we chose to have a dedicated, separate password - for that purpose. Users can generate this password from their - settings page in the web client. +### Nodeinfo standard for instance information and stats - -Nodeinfo standard for instance information and stats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. warning:: - - The ``/api/v1/instance/stats/`` endpoint which was used to display - instance data in the about page is removed in favor of the new - ``/api/v1/instance/nodeinfo/2.0/`` endpoint. +```{warning} +The ``/api/v1/instance/stats/`` endpoint which was used to display +instance data in the about page is removed in favor of the new +``/api/v1/instance/nodeinfo/2.0/`` endpoint. +``` In earlier version, we where using a custom endpoint and format for our instance information and statistics. While this was working, @@ -4445,41 +2665,45 @@ We offer two settings to manage nodeinfo in your Funkwhale instance: and user activity. To make your instance fully compatible with the nodeinfo protocol, you need to -to edit your nginx configuration file:: +to edit your nginx configuration file: - # before - ... - location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; - } - ... +```nginx +# before +# ... +location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; +} +# ... - # after - ... - location /.well-known/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/; - } - ... +# after +# ... +location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/; +} +# ... +``` -You can do the same if you use apache:: +You can do the same if you use apache: - # before - ... - - ProxyPass ${funkwhale-api}/.well-known/webfinger - ProxyPassReverse ${funkwhale-api}/.well-known/webfinger - - ... +```apache +# before +# ... + + ProxyPass ${funkwhale-api}/.well-known/webfinger + ProxyPassReverse ${funkwhale-api}/.well-known/webfinger + +# ... - # after - ... - - ProxyPass ${funkwhale-api}/.well-known/ - ProxyPassReverse ${funkwhale-api}/.well-known/ - - ... +# after +# ... + + ProxyPass ${funkwhale-api}/.well-known/ + ProxyPassReverse ${funkwhale-api}/.well-known/ + +# ... +``` This will ensure all well-known endpoints are proxied to funkwhale, and not just webfinger one. @@ -4488,9 +2712,7 @@ Links: - About nodeinfo: https://github.com/jhass/nodeinfo - -0.11 (2018-05-06) ------------------ +## 0.11 (2018-05-06) Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html @@ -4518,7 +2740,6 @@ Enhancements: - Store high-level settings (such as federation or auth-related ones) in database (#186) - Bugfixes: - Ensure in place imported files get a proper mimetype (#183) @@ -4527,7 +2748,6 @@ Bugfixes: - Fixed small UI glitches/bugs in federation tabs (#184) - X-sendfile not working with in place import (#182) - Documentation: - Added a documentation area for third-party projects (#180) @@ -4535,9 +2755,7 @@ Documentation: - Document that the database should use an utf-8 encoding (#185) - Foundations for API documentation with Swagger (#178) - -Database storage for high-level settings -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Database storage for high-level settings Due to the work done in #186, the following environment variables have been deprecated: @@ -4560,9 +2778,7 @@ announcement when the variables won't be used anymore. Please browse https://docs.funkwhale.audio/configuration.html#instance-settings for more information about instance configuration using the web interface. - -System emails -^^^^^^^^^^^^^ +### System emails Starting from this release, Funkwhale will send two types of emails: @@ -4574,34 +2790,29 @@ Email sending is disabled by default, as it requires additional configuration. In this mode, emails are simply outputted on stdout. If you want to actually send those emails to your users, you should edit your -.env file and tweak the ``EMAIL_CONFIG`` variable. See :data:`EMAIL_CONFIG ` +.env file and tweak the `EMAIL_CONFIG` variable. See :data:`EMAIL_CONFIG ` for more details. -.. note:: +```{note} +As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, +which was not documented, has no effect anymore. You can safely remove it from +your .env file if it is set. +``` - As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, - which was not documented, has no effect anymore. You can safely remove it from - your .env file if it is set. +### Proxy headers for non-docker deployments - -Proxy headers for non-docker deployments -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For non-docker deployments, add ``--proxy-headers`` at the end of the ``daphne`` +For non-docker deployments, add `--proxy-headers` at the end of the `daphne` command in :file:`/etc/systemd/system/funkwhale-server.service`. This will ensure the application receive the correct IP address from the client and not the proxy's one. - -0.10 (2018-04-23) ------------------ +## 0.10 (2018-04-23) Features: - Can now import files in-place from the CLI importer (#155) - Enhancements: - Avoid downloading audio files multiple times from remote libraries (#163) @@ -4612,7 +2823,6 @@ Enhancements: with a really long path (#142) - Player is back in Queue tab (#150) - Bugfixes: - Fail graciously when AP representation includes a null_value for mediaType @@ -4625,59 +2835,62 @@ Bugfixes: - Reset all sensitive front-end data on logout (#124) - Typos/not showing text due to i18n work (#175) - Documentation: - Better documentation for hardware requirements and memory usage (#165) - -In-place import -^^^^^^^^^^^^^^^ +### In-place import This release includes in-place imports for the CLI import. This means you can load gigabytes of music into funkwhale without worrying about about Funkwhale copying those music files in its internal storage and eating your disk space. -`This new feature is documented here `_ +[This new feature is documented here](https://docs.funkwhale.audio/importing-music.html#in-place-import) and require additional configuration to ensure funkwhale and your webserver can serve those files properly. **Non-docker users:** -Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following -block to your nginx configuration:: +Assuming your music is stored in `/srv/funkwhale/data/music`, add the following +block to your nginx configuration: - location /_protected/music { - internal; - alias /srv/funkwhale/data/music; - } +```nginx +location /_protected/music { + internal; + alias /srv/funkwhale/data/music; +} +``` -And the following to your .env file:: +And the following to your .env file: - MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +```sh +MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +``` **Docker users:** -Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following -block to your nginx configuration:: +Assuming your music is stored in `/srv/funkwhale/data/music`, add the following +block to your nginx configuration: - location /_protected/music { - internal; - alias /srv/funkwhale/data/music; - } +```nginx +location /_protected/music { + internal; + alias /srv/funkwhale/data/music; +} +``` -Assuming you have the following volume directive in your ``docker-compose.yml`` -(it's the default): ``/srv/funkwhale/data/music:/music:ro``, then add -the following to your .env file:: +Assuming you have the following volume directive in your `docker-compose.yml` +(it's the default): `/srv/funkwhale/data/music:/music:ro`, then add +the following to your .env file: - # this is the path in the container - MUSIC_DIRECTORY_PATH=/music - # this is the path on the host - MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music +```sh +# this is the path in the container +MUSIC_DIRECTORY_PATH=/music +# this is the path on the host +MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music +``` - -0.9.1 (2018-04-17) ------------------- +## 0.9.1 (2018-04-17) Bugfixes: @@ -4685,16 +2898,13 @@ Bugfixes: - Fixed broken permission check on library scanning and too aggressive page validation - -0.9 (2018-04-17) ----------------- +## 0.9 (2018-04-17) Features: - Add internationalization support (#5) - Can now follow and import music from remote libraries (#136, #137) - Enhancements: - Added a i18n-extract yarn script to extract strings to PO files (#162) @@ -4702,9 +2912,7 @@ Enhancements: - We now use a proper user agent including instance version and url during outgoing requests - -Federation is here! -^^^^^^^^^^^^^^^^^^^ +### Federation is here! This is for real this time, and includes: @@ -4719,8 +2927,7 @@ those requests. You can also revoke the access at any time. Documentation was updated with relevant instructions to use and benefit from this new feature: https://docs.funkwhale.audio/federation.html -Preparing internationalization -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Preparing internationalization Funkwhale's front-end as always been english-only, and this is a barrier to new users. The work make Funkwhale's interface translatable was started @@ -4731,8 +2938,7 @@ the near future. Many thank to Baptiste for the hard work and for figuring out a proper solution to this difficult problem. -Upgrade path -^^^^^^^^^^^^ +### Upgrade path In addition to the usual instructions from https://docs.funkwhale.audio/upgrading.html, non-docker users will have @@ -4746,21 +2952,21 @@ and keep disk usage to a minimum. In the future, they will also be needed to refetch music metadata or federated information periodically. -Celery beat can be enabled easily:: +Celery beat can be enabled easily: - curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" - # Also edit /etc/systemd/system/funkwhale.target - # and ensure the Wants= line contains the following: - # Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service - nano /etc/systemd/system/funkwhale.target - # reload configuration - systemctl daemon-reload +```sh +curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" +# Also edit /etc/systemd/system/funkwhale.target +# and ensure the Wants= line contains the following: +# Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service +nano /etc/systemd/system/funkwhale.target +# reload configuration +systemctl daemon-reload +``` Docker users already have celerybeat enabled. - -0.8 (2018-04-02) ----------------- +## 0.8 (2018-04-02) Features: @@ -4768,7 +2974,6 @@ Features: - Implemented page title binding (#1) - Previous Track button restart playback after 3 seconds (#146) - Enhancements: - Added credits to Francis Gading for the logotype (#101) @@ -4782,7 +2987,6 @@ Enhancements: (#131) - We now restrict some usernames from being used during signup (#139) - Bugfixes: - Better error handling during file import (#120) @@ -4791,14 +2995,11 @@ Bugfixes: - Upgraded to Python 3.6 to fix weird but harmless weakref error on django task (#121) - Documentation: - Documented the upgrade process (#127) - -Preparing for federation -^^^^^^^^^^^^^^^^^^^^^^^^ +### Preparing for federation Federation of music libraries is one of the most asked feature. While there is still a lot of work to do, this version includes @@ -4812,38 +3013,36 @@ In order to prepare for federation (see #136 and #137), new API endpoints have been added under /federation and /.well-known/webfinger. For these endpoints to work, you will need to update your nginx configuration, -and add the following snippets:: +and add the following snippets: - location /federation/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/federation/; - } - - location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; - } +```nginx +location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/federation/; +} +location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; +} +``` This will ensure federation endpoints will be reachable in the future. You can of course skip this part if you know you will not federate your instance. -A new ``FEDERATION_ENABLED`` env var have also been added to control whether +A new `FEDERATION_ENABLED` env var have also been added to control whether federation is enabled or not on the application side. This settings defaults to True, which should have no consequences at the moment, since actual federation is not implemented and the only available endpoints are for testing purposes. -Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation +Add `FEDERATION_ENABLED=false` to your .env file to disable federation on the application side. To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain, and sending it "/ping", for example, via Mastodon, should trigger a response. - - -0.7 (2018-03-21) ----------------- +## 0.7 (2018-03-21) Features: @@ -4854,7 +3053,6 @@ Features: - Playlists are here \o/ :tada: (#3, #93, #94) - Use django-cacheops to cache common ORM requests (#117) - Bugfixes: - Fixed broken import request admin (#115) @@ -4865,50 +3063,41 @@ Bugfixes: - Fixed synchronized start/stop radio buttons for all custom radios (#103) - Fixed typo and missing icon on homepage (#96) - Documentation: - Up-to-date and complete development and contribution instructions in README.rst (#123) - -0.6.1 (2018-03-06) ------------------- +## 0.6.1 (2018-03-06) Features: - Can now skip acoustid on file import with the --no-acoustid flag (#111) - Bugfixes: - Added missing batch id in output during import (#112) - Added some feedback on the play button (#100) - Smarter pagination which takes a fixed size (#84) - Other: - Completely removed django-cachalot from the codebase (#110). You can safely remove the CACHALOT_ENABLED setting from your .env file - -0.6 (2018-03-04) ----------------- +## 0.6 (2018-03-04) Features: - Basic activity stream for listening and favorites (#23) - Switched to django-channels and daphne for serving HTTP and websocket (#34) -Upgrades notes -^^^^^^^^^^^^^^ +### Upgrades notes This version contains breaking changes in the way funkwhale is deployed, please read the notes carefully. -Instance timeline -^^^^^^^^^^^^^^^^^ +### Instance timeline A new "Activity" page is now available from the sidebar, where you can browse your instance activity. At the moment, this includes other users @@ -4925,8 +3114,7 @@ but you can switch to a full private mode where nothing is shared. The setting form is available in your profile. -Switch from gunicorn to daphne -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +### Switch from gunicorn to daphne This release include an important change in the way we serve the HTTP API. To prepare for new realtime features and enable websocket support in Funkwhale, @@ -4939,26 +3127,27 @@ If you are using docker, please remove the command instruction inside the api service, as the up-to-date command is now included directly in the image as the default entry point: -.. code-block:: yaml +```yaml +services: + api: + restart: unless-stopped + image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} + command: ./compose/django/gunicorn.sh # You can remove this line +``` - api: - restart: unless-stopped - image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} - command: ./compose/django/gunicorn.sh # You can remove this line - -On non docker setups, you'll have to update the [Service] block of your +On non docker setups, you'll have to update the `[Service]` block of your funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn. The new configuration should be similar to this: -.. code-block:: ini - - [Service] - User=funkwhale - # adapt this depending on the path of your funkwhale installation - WorkingDirectory=/srv/funkwhale/api - EnvironmentFile=/srv/funkwhale/config/.env - ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application +```ini +[Service] +User=funkwhale +# adapt this depending on the path of your funkwhale installation +WorkingDirectory=/srv/funkwhale/api +EnvironmentFile=/srv/funkwhale/config/.env +ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application +``` Ensure you update funkwhale's dependencies as usual to install the required packages. @@ -4967,25 +3156,23 @@ On both docker and non-docker setup, you'll also have to update your nginx configuration for websocket support. Ensure you have the following blocks included in your virtualhost file: -.. code-block:: text +```nginx +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - server { - ... - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - } +server { + # ... + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; +} +``` Remember to reload your nginx server after the edit. - -0.5.4 (2018-02-28) ------------------- +## 0.5.4 (2018-02-28) Features: @@ -4996,9 +3183,7 @@ Bugfixes: - Fixed queue skipping tracks (#91) - Now loop properly on queue when we only have one track (#95) - -0.5.3 (2018-02-27) ------------------- +## 0.5.3 (2018-02-27) Features: @@ -5006,7 +3191,6 @@ Features: - Added basic instance stats on /about (#82) - Search now unaccent letters for queries like "The Dø" or "Björk" yielding more results (#81) - Bugfixes: - Always use username in sidebar (#89) @@ -5016,14 +3200,11 @@ Bugfixes: - Now exclude tracks without file from radio candidates (#88) - skip to next track properly on 40X errors (#86) - Other: - Switched to towncrier for changelog management and compilation - -0.5.2 (2018-02-26) ------------------- +## 0.5.2 (2018-02-26) - Fixed broken file import due to wrong url (#73) - More accurate mimetype detection @@ -5032,17 +3213,13 @@ Other: - We now have a favicon! - Fixed truncated play icon (#65) - -0.5.1 (2018-02-24) ------------------- +## 0.5.1 (2018-02-24) - Front: Fixed broken ajax call on radio builder (#69) - Front: Shuffle now restart next track from beginning (#70) - Front: volume slider should now have the same style everywhere (#72) - -0.5 (2018-02-24) ----------------- +## 0.5 (2018-02-24) - Front: Now reset player colors when track has no cover (#46) - Front: play button now disabled for unplayable tracks @@ -5060,7 +3237,7 @@ Transcoding: Basic transcoding is now available to/from the following formats : ogg and mp3. -*This is still an alpha feature at the moment, please report any bug.* +_This is still an alpha feature at the moment, please report any bug._ This relies internally on FFMPEG and can put some load on your server. It's definitely recommended you setup some caching for the transcoded files @@ -5076,8 +3253,7 @@ to request music they'd like to see imported. Admins can browse those requests and mark them as completed when an import is made. -0.4 (2018-02-18) ----------------- +## 0.4 (2018-02-18) - Front: ambiant colors in player based on current track cover (#59) - Front: simplified front dev setup thanks to webpack proxy (#59) @@ -5090,43 +3266,31 @@ an import is made. This is disabled by default, but feel free to enable it if you want to help us by sending your error reports :) (#8) - -0.3.5 (2018-01-07) ------------------- +## 0.3.5 (2018-01-07) - Smarter BACKEND_URL in frontend - -0.3.4 (2018-01-07) ------------------- +## 0.3.4 (2018-01-07) - Fixed wrong URL construction in ajax call - -0.3.3 (2018-01-07) ------------------- +## 0.3.3 (2018-01-07) - Users can now create their own dynamic radios (#51) - -0.3.2 ------------------- +## 0.3.2 - Fixed an issue in the main dockerfile - -0.3.1 ------------------- +## 0.3.1 - Revamped all import logic, everything is more tested and consistent - Can now use Acoustid in file imports to automatically grab metadata from musicbrainz - Brand new file import wizard +## 0.2.7 -0.2.7 ------------------- - -- Shortcuts: can now use the ``f`` shortcut to toggle the currently playing track +- Shortcuts: can now use the `f` shortcut to toggle the currently playing track as a favorite (#53) - Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53) - Player: Added looping controls and shortcuts (#52) @@ -5146,15 +3310,11 @@ an import is made. - Now use vuex to manage state for authentication - Now use vuex to manage state for player/queue/radios - -0.2.6 (2017-12-15) ------------------- +## 0.2.6 (2017-12-15) - Fixed broken Dockerfile - -0.2.5 (2017-12-15) ------------------- +## 0.2.5 (2017-12-15) Features: @@ -5171,9 +3331,7 @@ Tech: - Django 2 compatibility, lot of packages upgrades (#47) - -0.2.4 (2017-12-14) ------------------- +## 0.2.4 (2017-12-14) Features: diff --git a/docs/conf.py b/docs/conf.py old mode 100755 new mode 100644 index e1c2d17ef..59c467392 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,58 +1,71 @@ -#!/usr/bin/env python3 -# -# funkwhale documentation build configuration file, created by -# sphinx-quickstart on Sun Jun 25 18:49:23 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# # All configuration values have a default; values that are commented out # serve to show the default. - -import datetime - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. # +# https://www.sphinx-doc.org/en/master/usage/configuration.html + import os -import sys +from datetime import datetime +from pathlib import Path -sys.path.insert(0, os.path.abspath("../api")) -sys.path.insert(0, os.path.abspath("../api/config")) +from sphinx.application import Sphinx +from sphinx.util import logging + +import funkwhale_api + +logger = logging.getLogger(__name__) -import funkwhale_api # NOQA FUNKWHALE_CONFIG = { - "FUNKWHALE_URL": "mypod.funkwhale", - "FUNKWHAL_PROTOCOL": "https", - "DATABASE_URL": "postgres://localhost:5432/db", + "FUNKWHALE_URL": "https://pod.funkwhale", + "DATABASE_URL": "postgres://localhost:5432/funkwhale", "AWS_ACCESS_KEY_ID": "my_access_key", "AWS_SECRET_ACCESS_KEY": "my_secret_key", "AWS_STORAGE_BUCKET_NAME": "my_bucket", } -for key, value in FUNKWHALE_CONFIG.items(): - os.environ[key] = value +os.environ.update(**FUNKWHALE_CONFIG) + # -- General configuration ------------------------------------------------ -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' +# General information about the project. +year = datetime.now().year +project = "funkwhale" +copyright = f"{year}, The Funkwhale Collective" +author = "The Funkwhale Collective" +version = funkwhale_api.__version__ +release = version -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. extensions = [ - "sphinx.ext.graphviz", - "sphinx.ext.autodoc", - "myst_parser", - "sphinx_design", - "sphinxcontrib.mermaid", "sphinx_copybutton", + "sphinx_design", + "sphinx.ext.autodoc", + "sphinx.ext.graphviz", + "sphinxcontrib.mermaid", + "myst_parser", ] + +source_suffix = ".md" +include_patterns = [ + "_static/**", + "*_documentation/**", + "*.md", + "**/*.md", + "*.rst", + "logo.svg", +] +exclude_patterns = [ + "_build", + "_scripts", + ".venv", + ".DS_Store", + "Thumbs.db", + "*.py", + "*.sh", +] +templates_path = ["_templates"] + +root_doc = "index" + +# autodoc autodoc_mock_imports = [ "celery", "django_auth_ldap", @@ -61,69 +74,35 @@ autodoc_mock_imports = [ "rest_framework", "drf_spectacular", ] + +# sphinx +pygments_style = "sphinx" add_module_names = False -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".rst" - -# The root toctree document. -root_doc = "index" - -# Enable colon fences -myst_enable_extensions = ["colon_fence", "attrs_block"] - -# Autogenerate anchors +todo_include_todos = False +# myst +myst_enable_extensions = [ + "colon_fence", + "attrs_block", + "tasklist", + "fieldlist", + "deflist", +] myst_heading_anchors = 3 -# General information about the project. -year = datetime.datetime.now().year -project = "funkwhale" -copyright = f"{year}, The Funkwhale Collective" -author = "The Funkwhale Collective" -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# Read version from the API -version = funkwhale_api.__version__ -release = version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. +# internationalization +locale_dirs = ["locales/"] +gettext_compact = False language = "en" -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] +# copybutton +copybutton_exclude = ".linenos, .gp" -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False # -- Options for HTML output ---------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# html_theme = "sphinx_rtd_theme" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} html_context = { "display_gitlab": True, "gitlab_host": "dev.funkwhale.audio", @@ -135,61 +114,37 @@ html_context = { } html_logo = "logo.svg" html_favicon = "../front/public/favicon.ico" - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] -html_css_files = [ - "css/translation-hint.css", -] -html_js_files = [ - "js/translation-hint.js", -] +html_css_files = ["css/translation-hint.css"] +html_js_files = ["js/translation-hint.js"] # -- Options for HTMLHelp output ------------------------------------------ -# Output file base name for HTML help builder. htmlhelp_basename = "funkwhaledoc" - # -- Options for LaTeX output --------------------------------------------- -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). latex_documents = [ ( root_doc, "funkwhale.tex", - "funkwhale Documentation", + "Funkwhale Documentation", "The Funkwhale Collective", "manual", ) ] - # -- Options for manual page output --------------------------------------- -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(root_doc, "funkwhale", "funkwhale Documentation", [author], 1)] - +man_pages = [ + ( + root_doc, + "funkwhale", + "Funkwhale Documentation", + [author], + 1, + ) +] # -- Options for Texinfo output ------------------------------------------- @@ -200,7 +155,7 @@ texinfo_documents = [ ( root_doc, "funkwhale", - "funkwhale Documentation", + "Funkwhale Documentation", author, "funkwhale", "One line description of project.", @@ -208,39 +163,34 @@ texinfo_documents = [ ) ] -# -- Build legacy redirect files ------------------------------------------- +# -- Setup legacy redirects ----------------------------------------------- -# Define list of redirect files to be build in the Sphinx build process - -redirect_list = [] -with open("redirects.txt") as fp: - data_list = [tuple(line.strip().split(",")) for line in fp] - -# Generate redirect template - -redirect_template = """\ +REDIRECT_TEMPLATE = """\ - + """ -# Tell Sphinx to copy the files +redirects_file = Path("redirects.txt") +redirects = [ + tuple(line.strip().split(", ")) + for line in redirects_file.read_text(encoding="utf-8").splitlines() +] -def copy_legacy_redirects(app, docname): +def copy_legacy_redirects(app: Sphinx, docname): if app.builder.name == "html": - for html_src_path, new in data_list: - page = redirect_template.format(new=new) - target_path = app.outdir + "/" + html_src_path - if not os.path.exists(os.path.dirname(target_path)): - os.makedirs(os.path.dirname(target_path)) - with open(target_path, "w") as f: - f.write(page) + for src_path, dest_url in redirects: + content = REDIRECT_TEMPLATE.format(url=dest_url) + + redirect_path = Path(app.outdir) / src_path + redirect_path.parent.mkdir(parents=True, exist_ok=True) + redirect_path.write_text(content, encoding="utf-8") def setup(app): diff --git a/docs/contributor/documentation.md b/docs/contributor/documentation.md index 16c4b3f22..923df1257 100644 --- a/docs/contributor/documentation.md +++ b/docs/contributor/documentation.md @@ -15,7 +15,7 @@ We try to document Funkwhale as thoroughly as possible to make it easy for users To work on Funkwhale's documentation, you need the following: - [Git](https://git-scm.com): our version control system -- [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/): used to run our development environment +- [Poetry](https://python-poetry.org/): A python packaging tool and dependency manager - A text editor of your choice ## Tooling @@ -36,31 +36,7 @@ Here are some basic rules to follow: ## Local setup -We provide a docker container for our documentation to make it easy to work on docs with a real-time preview. Once you install [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/), do the following to get a live preview: - -1. Create a dummy `.env` file - - ```{code-block} sh - touch .env - ``` - -2. Create a dummy federation network - - ```{code-block} sh - sudo docker network create federation - ``` - -3. Build the container - - ```{code-block} sh - sudo docker compose -f dev.yml build docs - ``` - -4. Run the container - - ```{code-block} sh - sudo docker compose -f dev.yml up docs - ``` +We provide a fully automated setup for a local live-preview of your changes. Make sure you meet the requirements outlined above and run `make dev`. A real-time preview of the documentation is available on `http://0.0.0.1:8001` diff --git a/docs/developer/setup/docker.md b/docs/developer/setup/docker.md index b6fd48edd..9ebf86c18 100644 --- a/docs/developer/setup/docker.md +++ b/docs/developer/setup/docker.md @@ -84,7 +84,7 @@ You need to create some local data to mimic a production environment. 1. Create a superuser so you can log in to your local app: ```sh - sudo docker compose -f dev.yml run --rm api funkwhale-manage createsuperuser + sudo docker compose -f dev.yml run --rm api funkwhale-manage fw users create --superuser ``` 2. Add some fake data to populate the database. The following command creates 25 artists with random albums, tracks, and metadata. @@ -97,19 +97,11 @@ You need to create some local data to mimic a production environment. ## Manage services -Once you have set up your containers, bring them up to start working on them. +Once you have set up your containers, launch all services to start working on them: -1. Compile the translations: - - ```sh - sudo docker compose -f dev.yml run --rm front yarn run i18n-compile - ``` - -2. Launch all services: - - ```sh - sudo docker compose -f dev.yml up front api nginx celeryworker - ``` +```sh +sudo docker compose -f dev.yml up front api nginx celeryworker +``` This gives you access to the following: @@ -195,7 +187,7 @@ To run a reverse proxy for your app: export COMPOSE_PROJECT_NAME=node2 export VUE_PORT=1234 # this has to be unique for each instance sudo docker compose -f dev.yml run --rm api funkwhale-manage migrate - sudo docker compose -f dev.yml run --rm api funkwhale-manage createsuperuser + sudo docker compose -f dev.yml run --rm api funkwhale-manage fw users create --superuser sudo docker compose -f dev.yml up nginx api front nginx api celeryworker ``` diff --git a/docs/developer/setup/vite.md b/docs/developer/setup/vite.md index c56e803e7..45dfc8741 100644 --- a/docs/developer/setup/vite.md +++ b/docs/developer/setup/vite.md @@ -33,13 +33,7 @@ If you want to make changes to the frontend, you can use Vite to run a developme yarn install ``` -4. Compile the translations: - - ```sh - yarn i18n-compile - ``` - -5. Launch the development server: +4. Launch the development server: ```sh yarn dev diff --git a/docs/developer/workflows/release.md b/docs/developer/workflows/release.md index 56af9da62..9e519d763 100644 --- a/docs/developer/workflows/release.md +++ b/docs/developer/workflows/release.md @@ -52,13 +52,15 @@ Once we're ready to release a new version of the software, we can use the follow ```sh python3 scripts/get-contributions-stats.py $NEXT_RELEASE # Output a list of contributors git log $PREVIOUS_RELEASE.. --format="- %aN" --reverse | sort | uniq # Get a list of all commit authors - nano CHANGELOG # Add these lists to the CHANGELOG + nano CHANGELOG.md # Add these lists to the CHANGELOG.md ``` -7. Update the `__version__` variable to the next release version +7. Update the next release version ```sh - nano api/funkwhale_api/__init__.py + cd api + poetry version "$NEXT_RELEASE" + cd .. ``` 8. Commit all changes diff --git a/docs/get-releases-json.py b/docs/get-releases-json.py deleted file mode 100755 index a668dc104..000000000 --- a/docs/get-releases-json.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import json -import subprocess -from distutils.version import StrictVersion - - -def get_versions(): - output = subprocess.check_output( - ["git", "tag", "-l", "--format=%(creatordate:iso-strict)|%(refname:short)"] - ) - tags = [] - - for line in output.decode().splitlines(): - try: - date, tag = line.split("|") - except ValueError: - continue - - if not date or not tag: - continue - - tags.append({"id": tag, "date": date}) - valid = [] - for tag in tags: - try: - StrictVersion(tag["id"]) - valid.append(tag) - except ValueError: - continue - - return sorted(valid, key=lambda tag: StrictVersion(tag["id"]), reverse=True) - - -def main(latest=False): - versions = get_versions() - if latest: - print(versions[0]["id"]) - else: - data = {"count": len(versions), "releases": versions} - print(json.dumps(data, sort_keys=True, indent=2)) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - """ - Compile release data and output in in JSON format - """ - ) - parser.add_argument( - "-l", - "--latest", - action="store_true", - help="Only print the latest version then exit", - ) - args = parser.parse_args() - main(latest=args.latest) diff --git a/docs/i18n_generate.sh b/docs/i18n_generate.sh deleted file mode 100755 index e80f64fe9..000000000 --- a/docs/i18n_generate.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -poetry run make -e BUILDDIR=locales gettext - -for path in locales/*; do - lang="$(basename "$path")" - if [[ "$lang" != "gettext" ]]; then - poetry run sphinx-intl update -p locales/gettext -l "$lang" - fi -done diff --git a/docs/index.md b/docs/index.md index 99f2fc0eb..cff692516 100644 --- a/docs/index.md +++ b/docs/index.md @@ -94,6 +94,22 @@ contributor/translation ``` +```{toctree} +--- +maxdepth: 1 +caption: Specifications +hidden: true +--- + +specs/collections/index +specs/nodeinfo21/index +specs/offline-mode/index +specs/quality-filter/index +specs/multi-artist/index +specs/user-follow/index + +``` + ```{toctree} --- caption: Reference @@ -113,6 +129,7 @@ hidden: true --- changelog +0.x Changelog ``` diff --git a/docs/locales/en_GB/LC_MESSAGES/administrator/configuration/frontend.po b/docs/locales/en_GB/LC_MESSAGES/administrator/configuration/frontend.po index ba554ccbe..89cb8fdbe 100644 --- a/docs/locales/en_GB/LC_MESSAGES/administrator/configuration/frontend.po +++ b/docs/locales/en_GB/LC_MESSAGES/administrator/configuration/frontend.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth \n" +"Language-Team: English (United Kingdom) \n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/configuration_docs/frontend.md:1 msgid "Customize the Funkwhale frontend" -msgstr "" +msgstr "Customise the Funkwhale frontend" #: ../../administrator_documentation/configuration_docs/frontend.md:3 msgid "" @@ -27,14 +30,17 @@ msgid "" "configuration file. This file enables you to make very basic changes to " "the Funkwhale web app." msgstr "" +"You can customise the look and behavior of the Funkwhale UI using a JSON " +"configuration file. This file enables you to make very basic changes to the " +"Funkwhale web app." #: ../../administrator_documentation/configuration_docs/frontend.md:5 msgid "Set up your custom configuration" -msgstr "" +msgstr "Set up your custom configuration" #: ../../administrator_documentation/configuration_docs/frontend.md:7 msgid "Create your configuration file" -msgstr "" +msgstr "Create your configuration file" #: ../../administrator_documentation/configuration_docs/frontend.md:9 msgid "" @@ -42,152 +48,167 @@ msgid "" "{file}`settings.json` file at `https://yourinstanceurl/settings.json`. " "Follow these steps to set up your configuration file:" msgstr "" +"To customise your Funkwhale pod, you need to serve a {file}`settings.json` " +"file at `https://yourinstanceurl/settings.json`. Follow these steps to set " +"up your configuration file:" #: ../../administrator_documentation/configuration_docs/frontend.md:11 msgid "SSH into your Funkwhale server." -msgstr "" +msgstr "SSH into your Funkwhale server." #: ../../administrator_documentation/configuration_docs/frontend.md:12 msgid "Navigate to your `/srv/funkwhale` folder" -msgstr "" +msgstr "Navigate to your `/srv/funkwhale` folder" #: ../../administrator_documentation/configuration_docs/frontend.md:18 msgid "Create a new `custom` directory for your file." -msgstr "" +msgstr "Create a new `custom` directory for your file." #: ../../administrator_documentation/configuration_docs/frontend.md:24 msgid "Create a new config file and populate it with placeholder settings." -msgstr "" +msgstr "Create a new config file and populate it with placeholder settings." #: ../../administrator_documentation/configuration_docs/frontend.md msgid "Supported parameters" -msgstr "" +msgstr "Supported parameters" #: ../../administrator_documentation/configuration_docs/frontend.md:41 msgid "Parameter" -msgstr "" +msgstr "Parameter" #: ../../administrator_documentation/configuration_docs/frontend.md:42 msgid "Data type" -msgstr "" +msgstr "Data type" #: ../../administrator_documentation/configuration_docs/frontend.md:43 msgid "Description" -msgstr "" +msgstr "Description" #: ../../administrator_documentation/configuration_docs/frontend.md:44 msgid "Example" -msgstr "" +msgstr "Example" #: ../../administrator_documentation/configuration_docs/frontend.md:46 msgid "`additionalStylesheets`" -msgstr "" +msgstr "`additionalStylesheets`" #: ../../administrator_documentation/configuration_docs/frontend.md:47 msgid "Array" -msgstr "" +msgstr "Array" #: ../../administrator_documentation/configuration_docs/frontend.md:48 msgid "A list of URLs (relative or absolute) pointing to stylesheets." -msgstr "" +msgstr "A list of URLs (relative or absolute) pointing to stylesheets." #: ../../administrator_documentation/configuration_docs/frontend.md:49 msgid "`[\"https://test/theme.css\"]`" -msgstr "" +msgstr "`[\"https://test/theme.css\"]`" #: ../../administrator_documentation/configuration_docs/frontend.md:51 msgid "`defaultServerUrl`" -msgstr "" +msgstr "`defaultServerUrl`" #: ../../administrator_documentation/configuration_docs/frontend.md:52 msgid "URL" -msgstr "" +msgstr "URL" #: ../../administrator_documentation/configuration_docs/frontend.md:53 msgid "" "The URL of the API server you want to connect the frontend to. Defaults " "to the current domain." msgstr "" +"The URL of the API server you want to connect the frontend to. Defaults to " +"the current domain." #: ../../administrator_documentation/configuration_docs/frontend.md:54 msgid "`\"https://api.yourdomain.com\"`" -msgstr "" +msgstr "`\"https://api.yourdomain.com\"`" #: ../../administrator_documentation/configuration_docs/frontend.md:59 msgid "Configure your reverse proxy" -msgstr "" +msgstr "Configure your reverse proxy" #: ../../administrator_documentation/configuration_docs/frontend.md:61 msgid "" "Once you've created your {file}`settings.json` file you need to configure" " your reverse proxy to serve it." msgstr "" +"Once you've created your {file}`settings.json` file you need to configure " +"your reverse proxy to serve it." #: ../../administrator_documentation/configuration_docs/frontend.md msgid "Nginx" -msgstr "" +msgstr "Nginx" #: ../../administrator_documentation/configuration_docs/frontend.md:69 msgid "" "Add the following snippet to your {file}`/etc/nginx/sites-" "available/funkwhale.conf` config file:" msgstr "" +"Add the following snippet to your {file}`/etc/nginx/sites-available/funkwhale" +".conf` config file:" #: ../../administrator_documentation/configuration_docs/frontend.md msgid "Apache" -msgstr "" +msgstr "Apache" #: ../../administrator_documentation/configuration_docs/frontend.md:82 msgid "Add the following snippet to your webserver configuration:" -msgstr "" +msgstr "Add the following snippet to your webserver configuration:" #: ../../administrator_documentation/configuration_docs/frontend.md:90 msgid "" "Reload your webserver. You should be able to see the contents of your " "configuration file at `https://yourinstanceurl/settings.json`." msgstr "" +"Reload your webserver. You should be able to see the contents of your " +"configuration file at `https://yourinstanceurl/settings.json`." #: ../../administrator_documentation/configuration_docs/frontend.md:92 msgid "Add a custom theme" -msgstr "" +msgstr "Add a custom theme" #: ../../administrator_documentation/configuration_docs/frontend.md:94 msgid "You can use a custom stylesheet to theme your Funkwhale pod. To do this:" msgstr "" +"You can use a custom stylesheet to theme your Funkwhale pod. To do this:" #: ../../administrator_documentation/configuration_docs/frontend.md:96 msgid "Navigate to your {file}`/srv/funkwhale/custom` directory." -msgstr "" +msgstr "Navigate to your {file}`/srv/funkwhale/custom` directory." #: ../../administrator_documentation/configuration_docs/frontend.md:102 msgid "Copy your CSS file to this directory, or create a new one." -msgstr "" +msgstr "Copy your CSS file to this directory, or create a new one." #: ../../administrator_documentation/configuration_docs/frontend.md:114 msgid "" "Add the location of your CSS file to the `additionalStylesheets` " "parameter in your {file}`settings.json` file." msgstr "" +"Add the location of your CSS file to the `additionalStylesheets` parameter " +"in your {file}`settings.json` file." #: ../../administrator_documentation/configuration_docs/frontend.md:127 msgid "Add the whole {file}`custom` dir to your webserver configuration." -msgstr "" +msgstr "Add the whole {file}`custom` dir to your webserver configuration." #: ../../administrator_documentation/configuration_docs/frontend.md:135 msgid "" "Add the following to your {file}`/etc/nginx/sites-" "available/funkwhale.conf` file:" msgstr "" +"Add the following to your {file}`/etc/nginx/sites-available/funkwhale.conf` " +"file:" #: ../../administrator_documentation/configuration_docs/frontend.md:148 msgid "Add the following to your webserver configuration file." -msgstr "" +msgstr "Add the following to your webserver configuration file." #: ../../administrator_documentation/configuration_docs/frontend.md:162 msgid "Restart your webserver." -msgstr "" +msgstr "Restart your webserver." #: ../../administrator_documentation/configuration_docs/frontend.md:164 msgid "Refresh your Funkwhale app. The background should now be red." -msgstr "" - +msgstr "Refresh your Funkwhale app. The background should now be red." diff --git a/docs/locales/en_GB/LC_MESSAGES/administrator/troubleshooting/backend.po b/docs/locales/en_GB/LC_MESSAGES/administrator/troubleshooting/backend.po index 68ecf4387..ad87cd157 100644 --- a/docs/locales/en_GB/LC_MESSAGES/administrator/troubleshooting/backend.po +++ b/docs/locales/en_GB/LC_MESSAGES/administrator/troubleshooting/backend.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth \n" +"Language-Team: English (United Kingdom) \n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/troubleshooting/backend.md:1 @@ -44,7 +47,7 @@ msgstr "" #: ../../administrator/troubleshooting/backend.md msgid "Nginx" -msgstr "" +msgstr "Nginx" #: ../../administrator/troubleshooting/backend.md msgid "Apache2" @@ -252,4 +255,3 @@ msgstr "" #~ "ask your question and what details " #~ "to provide." #~ msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/debian.po b/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/debian.po index f2a8d577e..caef239b8 100644 --- a/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/debian.po +++ b/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/debian.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth \n" +"Language-Team: English (United Kingdom) \n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/debian.md:1 @@ -71,7 +74,7 @@ msgstr "" #: ../../administrator/uninstall/debian.md msgid "Nginx" -msgstr "" +msgstr "Nginx" #: ../../administrator/uninstall/debian.md:58 #: ../../administrator/uninstall/debian.md:77 @@ -176,4 +179,3 @@ msgstr "" #~ " up any data](../upgrade_docs/backup.md) you " #~ "want to keep." #~ msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/docker.po b/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/docker.po index 29a244b87..bcc8a6e77 100644 --- a/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/docker.po +++ b/docs/locales/en_GB/LC_MESSAGES/administrator/uninstall/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR , 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth \n" +"Language-Team: English (United Kingdom) \n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/docker.md:1 @@ -61,7 +64,7 @@ msgstr "" #: ../../administrator/uninstall/docker.md msgid "Nginx" -msgstr "" +msgstr "Nginx" #: ../../administrator/uninstall/docker.md:40 #: ../../administrator/uninstall/docker.md:59 @@ -121,4 +124,3 @@ msgstr "" #~ "sure you have [backed up your " #~ "data](../upgrade_docs/backup.md) before proceeding." #~ msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/changelog.po b/docs/locales/en_GB/LC_MESSAGES/changelog.po index 571c020b5..ee95129a1 100644 --- a/docs/locales/en_GB/LC_MESSAGES/changelog.po +++ b/docs/locales/en_GB/LC_MESSAGES/changelog.po @@ -8,1397 +8,1534 @@ msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:05+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" -#: ../../../CHANGELOG:2 +#: ../../../CHANGELOG.md:2 msgid "Changelog" msgstr "" -#: ../../../CHANGELOG:4 +#: ../../../CHANGELOG.md:4 msgid "You can subscribe to release announcements by:" msgstr "" -#: ../../../CHANGELOG:6 +#: ../../../CHANGELOG.md:6 msgid "" -"Following `@funkwhale@fosstodon.org `_ " -"on Mastodon" +"Following [@funkwhale@fosstodon.org](https://fosstodon.org/@funkwhale) on" +" Mastodon" msgstr "" -#: ../../../CHANGELOG:7 +#: ../../../CHANGELOG.md:7 msgid "" "Subscribing to the following Atom feed: " "https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag" msgstr "" -#: ../../../CHANGELOG:9 +#: ../../../CHANGELOG.md:9 msgid "" "This changelog is viewable on the web at " "https://docs.funkwhale.audio/changelog.html." msgstr "" -#: ../../../CHANGELOG:14 -msgid "1.3.0-rc3 (2023-01-23)" +#: ../../../CHANGELOG.md:13 +msgid "1.3.0-rc4 (2023-03-24)" msgstr "" -#: ../../../CHANGELOG:16 +#: ../../../CHANGELOG.md:15 ../../../CHANGELOG.md:22 msgid "Update since 1.3.0-rc2:" msgstr "" -#: ../../../CHANGELOG:18 +#: ../../../CHANGELOG.md:16 +msgid "" +"Resolved an issue where queue text with mouse over has dark text on dark " +"background (#2058) (2058)" +msgstr "" + +#: ../../../CHANGELOG.md:17 +msgid "Improve signal handling for service and containers" +msgstr "" + +#: ../../../CHANGELOG.md:18 +msgid "" +"Fixes an issue which made it possible to download all media files without" +" access control (#2101)" +msgstr "" + +#: ../../../CHANGELOG.md:20 +msgid "1.3.0-rc3 (2023-01-23)" +msgstr "" + +#: ../../../CHANGELOG.md:24 msgid "Fix pipeline execution for tags" msgstr "" -#: ../../../CHANGELOG:21 +#: ../../../CHANGELOG.md:26 msgid "1.3.0-rc2 (2023-01-23)" msgstr "" -#: ../../../CHANGELOG:23 +#: ../../../CHANGELOG.md:28 msgid "Update since 1.3.0-rc1:" msgstr "" -#: ../../../CHANGELOG:25 ../../../CHANGELOG:101 ../../../CHANGELOG:465 -#: ../../../CHANGELOG:517 ../../../CHANGELOG:563 ../../../CHANGELOG:731 -#: ../../../CHANGELOG:922 ../../../CHANGELOG:941 ../../../CHANGELOG:960 -#: ../../../CHANGELOG:980 ../../../CHANGELOG:1080 ../../../CHANGELOG:1142 -#: ../../../CHANGELOG:1232 ../../../CHANGELOG:1311 ../../../CHANGELOG:1348 -#: ../../../CHANGELOG:1596 ../../../CHANGELOG:1738 ../../../CHANGELOG:2023 -#: ../../../CHANGELOG:2109 ../../../CHANGELOG:2276 ../../../CHANGELOG:2392 -#: ../../../CHANGELOG:2429 ../../../CHANGELOG:2530 ../../../CHANGELOG:2769 -#: ../../../CHANGELOG:2863 ../../../CHANGELOG:3079 ../../../CHANGELOG:3161 -#: ../../../CHANGELOG:3394 ../../../CHANGELOG:3465 ../../../CHANGELOG:3586 -#: ../../../CHANGELOG:3685 ../../../CHANGELOG:3887 ../../../CHANGELOG:4007 -#: ../../../CHANGELOG:4155 ../../../CHANGELOG:4251 ../../../CHANGELOG:4344 -#: ../../../CHANGELOG:4418 +#: ../../../CHANGELOG.md:30 ../../../CHANGELOG.md:107 ../../../CHANGELOG.md:453 +#: ../../../CHANGELOG.md:502 ../../../CHANGELOG.md:543 +#: ../../../CHANGELOG.md:702 ../../../CHANGELOG.md:885 +#: ../../../CHANGELOG.md:901 ../../../CHANGELOG.md:916 +#: ../../../CHANGELOG.md:933 ../../../CHANGELOG.md:1026 +#: ../../../CHANGELOG.md:1085 ../../../CHANGELOG.md:1165 +#: ../../../CHANGELOG.md:1237 ../../../CHANGELOG.md:1269 +#: ../../../CHANGELOG.md:1507 ../../../CHANGELOG.md:1646 +#: ../../../CHANGELOG.md:1917 ../../../CHANGELOG.md:1999 +#: ../../../CHANGELOG.md:2148 ../../../CHANGELOG.md:2258 +#: ../../../CHANGELOG.md:2290 ../../../CHANGELOG.md:2393 +#: ../../../CHANGELOG.md:2620 ../../../CHANGELOG.md:2707 +#: ../../../CHANGELOG.md:2922 ../../../CHANGELOG.md:3001 +#: ../../../CHANGELOG.md:3223 ../../../CHANGELOG.md:3286 +#: ../../../CHANGELOG.md:3400 ../../../CHANGELOG.md:3495 +#: ../../../CHANGELOG.md:3691 ../../../CHANGELOG.md:3800 +#: ../../../CHANGELOG.md:3948 ../../../CHANGELOG.md:4033 +#: ../../../CHANGELOG.md:4125 ../../../CHANGELOG.md:4194 msgid "Enhancements:" msgstr "" -#: ../../../CHANGELOG:27 +#: ../../../CHANGELOG.md:32 msgid "" "Retry fetching new radio track 5 times if error occurred before resetting" " radio session (#2022)" msgstr "" -#: ../../../CHANGELOG:29 ../../../CHANGELOG:177 ../../../CHANGELOG:287 -#: ../../../CHANGELOG:334 ../../../CHANGELOG:388 ../../../CHANGELOG:413 -#: ../../../CHANGELOG:470 ../../../CHANGELOG:522 ../../../CHANGELOG:569 -#: ../../../CHANGELOG:622 ../../../CHANGELOG:679 ../../../CHANGELOG:751 -#: ../../../CHANGELOG:926 ../../../CHANGELOG:946 ../../../CHANGELOG:965 -#: ../../../CHANGELOG:994 ../../../CHANGELOG:1066 ../../../CHANGELOG:1095 -#: ../../../CHANGELOG:1148 ../../../CHANGELOG:1257 ../../../CHANGELOG:1319 -#: ../../../CHANGELOG:1358 ../../../CHANGELOG:1624 ../../../CHANGELOG:1748 -#: ../../../CHANGELOG:2053 ../../../CHANGELOG:2123 ../../../CHANGELOG:2311 -#: ../../../CHANGELOG:2400 ../../../CHANGELOG:2436 ../../../CHANGELOG:2540 -#: ../../../CHANGELOG:2807 ../../../CHANGELOG:2873 ../../../CHANGELOG:3045 -#: ../../../CHANGELOG:3061 ../../../CHANGELOG:3089 ../../../CHANGELOG:3179 -#: ../../../CHANGELOG:3400 ../../../CHANGELOG:3476 ../../../CHANGELOG:3595 -#: ../../../CHANGELOG:3702 ../../../CHANGELOG:3894 ../../../CHANGELOG:4013 -#: ../../../CHANGELOG:4168 ../../../CHANGELOG:4262 ../../../CHANGELOG:4328 -#: ../../../CHANGELOG:4432 ../../../CHANGELOG:4504 ../../../CHANGELOG:4529 -#: ../../../CHANGELOG:4640 ../../../CHANGELOG:4656 ../../../CHANGELOG:4811 -#: ../../../CHANGELOG:4829 +#: ../../../CHANGELOG.md:34 ../../../CHANGELOG.md:181 ../../../CHANGELOG.md:287 +#: ../../../CHANGELOG.md:330 ../../../CHANGELOG.md:381 +#: ../../../CHANGELOG.md:404 ../../../CHANGELOG.md:457 +#: ../../../CHANGELOG.md:506 ../../../CHANGELOG.md:549 +#: ../../../CHANGELOG.md:599 ../../../CHANGELOG.md:653 +#: ../../../CHANGELOG.md:721 ../../../CHANGELOG.md:889 +#: ../../../CHANGELOG.md:905 ../../../CHANGELOG.md:921 +#: ../../../CHANGELOG.md:946 ../../../CHANGELOG.md:1015 +#: ../../../CHANGELOG.md:1040 ../../../CHANGELOG.md:1090 +#: ../../../CHANGELOG.md:1188 ../../../CHANGELOG.md:1244 +#: ../../../CHANGELOG.md:1278 ../../../CHANGELOG.md:1535 +#: ../../../CHANGELOG.md:1655 ../../../CHANGELOG.md:1946 +#: ../../../CHANGELOG.md:2012 ../../../CHANGELOG.md:2183 +#: ../../../CHANGELOG.md:2265 ../../../CHANGELOG.md:2296 +#: ../../../CHANGELOG.md:2402 ../../../CHANGELOG.md:2657 +#: ../../../CHANGELOG.md:2717 ../../../CHANGELOG.md:2893 +#: ../../../CHANGELOG.md:2906 ../../../CHANGELOG.md:2931 +#: ../../../CHANGELOG.md:3018 ../../../CHANGELOG.md:3228 +#: ../../../CHANGELOG.md:3297 ../../../CHANGELOG.md:3409 +#: ../../../CHANGELOG.md:3511 ../../../CHANGELOG.md:3697 +#: ../../../CHANGELOG.md:3805 ../../../CHANGELOG.md:3960 +#: ../../../CHANGELOG.md:4043 ../../../CHANGELOG.md:4112 +#: ../../../CHANGELOG.md:4207 ../../../CHANGELOG.md:4273 +#: ../../../CHANGELOG.md:4294 ../../../CHANGELOG.md:4398 +#: ../../../CHANGELOG.md:4411 ../../../CHANGELOG.md:4542 +#: ../../../CHANGELOG.md:4558 msgid "Bugfixes:" msgstr "" -#: ../../../CHANGELOG:31 +#: ../../../CHANGELOG.md:36 msgid "Docker setup: do not export the API port 5000 publicly" msgstr "" -#: ../../../CHANGELOG:32 +#: ../../../CHANGELOG.md:37 msgid "Fix artist name submission in Maloja plugin" msgstr "" -#: ../../../CHANGELOG:34 +#: ../../../CHANGELOG.md:39 msgid "Deprecations:" msgstr "" -#: ../../../CHANGELOG:36 +#: ../../../CHANGELOG.md:41 msgid "" "That's the last minor version series that supports python3.7. Funkwhale " "1.4 will remove support for it. #1693" msgstr "" -#: ../../../CHANGELOG:37 +#: ../../../CHANGELOG.md:42 msgid "" "Deprecate the api manage.py script in favor of the funkwhale-manage " "entrypoint" msgstr "" -#: ../../../CHANGELOG:40 +#: ../../../CHANGELOG.md:44 msgid "1.3.0-rc1 (2023-01-20)" msgstr "" -#: ../../../CHANGELOG:42 ../../../CHANGELOG:284 ../../../CHANGELOG:326 -#: ../../../CHANGELOG:385 ../../../CHANGELOG:410 ../../../CHANGELOG:462 -#: ../../../CHANGELOG:514 ../../../CHANGELOG:560 ../../../CHANGELOG:619 -#: ../../../CHANGELOG:676 ../../../CHANGELOG:707 ../../../CHANGELOG:911 -#: ../../../CHANGELOG:919 ../../../CHANGELOG:938 ../../../CHANGELOG:957 -#: ../../../CHANGELOG:977 ../../../CHANGELOG:1063 ../../../CHANGELOG:1077 -#: ../../../CHANGELOG:1139 ../../../CHANGELOG:1164 ../../../CHANGELOG:1308 -#: ../../../CHANGELOG:1340 ../../../CHANGELOG:1716 ../../../CHANGELOG:1781 -#: ../../../CHANGELOG:2106 ../../../CHANGELOG:2155 ../../../CHANGELOG:2375 -#: ../../../CHANGELOG:2426 ../../../CHANGELOG:2447 +#: ../../../CHANGELOG.md:46 ../../../CHANGELOG.md:285 ../../../CHANGELOG.md:324 +#: ../../../CHANGELOG.md:379 ../../../CHANGELOG.md:402 +#: ../../../CHANGELOG.md:451 ../../../CHANGELOG.md:500 +#: ../../../CHANGELOG.md:541 ../../../CHANGELOG.md:597 +#: ../../../CHANGELOG.md:651 ../../../CHANGELOG.md:680 +#: ../../../CHANGELOG.md:877 ../../../CHANGELOG.md:883 +#: ../../../CHANGELOG.md:899 ../../../CHANGELOG.md:914 +#: ../../../CHANGELOG.md:931 ../../../CHANGELOG.md:1013 +#: ../../../CHANGELOG.md:1024 ../../../CHANGELOG.md:1083 +#: ../../../CHANGELOG.md:1105 ../../../CHANGELOG.md:1235 +#: ../../../CHANGELOG.md:1263 ../../../CHANGELOG.md:1626 +#: ../../../CHANGELOG.md:1684 ../../../CHANGELOG.md:1997 +#: ../../../CHANGELOG.md:2041 ../../../CHANGELOG.md:2245 +#: ../../../CHANGELOG.md:2288 ../../../CHANGELOG.md:2305 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html" msgstr "" -#: ../../../CHANGELOG:45 +#: ../../../CHANGELOG.md:48 msgid "Update instructions:" msgstr "" -#: ../../../CHANGELOG:47 +#: ../../../CHANGELOG.md:50 msgid "" "If you are running the docker deployment, make sure to update our compose" " file. In this small example we show you how to save the old config and " "update it correctly:" msgstr "" -#: ../../../CHANGELOG:51 +#: ../../../CHANGELOG.md:62 msgid "" -"``` export FUNKWHALE_VERSION=\"1.3.0\" cd /srv/funkwhale docker-compose " -"down mv docker-compose.yml docker-compose.bak curl -L -o /srv/funkwhale" -"/docker-compose.yml " -"\"https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy" -"/docker-compose.yml\" ```" +".. note:: If you need to customize your nginx template, e.g. to work " +"around `problems with Docker's resolver " +"`_, you can mount your custom nginx configuration into the " +"container. Uncomment the commented volumes in the `nginx` section of your" +" `docker-compose.yml`. Additionally you need to update the paths in " +"`nginx/funkwhale.template`. Replace all occurrences of `/funkwhale` by " +"`/usr/share/nginx/html`. This loads the templates from your `nginx` " +"folder and overrides the template files in the Docker container." msgstr "" -#: ../../../CHANGELOG:60 -msgid "" -"If you need to customize your nginx template, e.g. to work around " -"`problems with Docker's resolver `_, you can mount your custom " -"nginx configuration into the container. Uncomment the commented volumes " -"in the `nginx` section of your `docker-compose.yml`. Additionally you " -"need to update the paths in `nginx/funkwhale.template`. Replace all " -"occurrences of `/funkwhale` by `/usr/share/nginx/html`. This loads the " -"templates from your `nginx` folder and overrides the template files in " -"the Docker container." -msgstr "" - -#: ../../../CHANGELOG:67 -msgid "``` docker-compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:71 +#: ../../../CHANGELOG.md:76 msgid "" "The Docker instructions now use the updated Docker compose plugin. If you" " previously used the ``docker-compose`` standalone installation, do the " "following while upgrading:" msgstr "" -#: ../../../CHANGELOG:73 +#: ../../../CHANGELOG.md:78 msgid "" -"Download the `Docker compose plugin " -"`_" +"The Docker instructions now use the updated Docker compose plugin. If you" +" previously used the `docker-compose` standalone installation, do the " +"following while upgrading:" msgstr "" -#: ../../../CHANGELOG:74 +#: ../../../CHANGELOG.md:80 +msgid "" +"Download the [Docker compose " +"plugin](https://docs.docker.com/compose/install/linux/#install-using-the-" +"repository)" +msgstr "" + +#: ../../../CHANGELOG.md:81 msgid "Stop your containers using the **docker-compose** syntax." msgstr "" -#: ../../../CHANGELOG:76 -msgid "```sh sudo docker-compose down ```" -msgstr "" - -#: ../../../CHANGELOG:80 +#: ../../../CHANGELOG.md:87 msgid "Bring the containers back up using the **docker compose** syntax." msgstr "" -#: ../../../CHANGELOG:82 -msgid "```sh sudo docker compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:86 +#: ../../../CHANGELOG.md:93 msgid "" "After this you can continue to use the **docker compose** syntax for all " "Docker management tasks." msgstr "" -#: ../../../CHANGELOG:87 +#: ../../../CHANGELOG.md:95 msgid "" "Upgrade Postgres to version 15. [Make sure to " "migrate!](https://docs.funkwhale.audio/administrator_documentation/upgrade_docs/docker.html" "#upgrade-the-postgres-container)" msgstr "" -#: ../../../CHANGELOG:88 +#: ../../../CHANGELOG.md:96 msgid "" "With this update Funkwhale starts using poetry to maintain its " "dependencies. We therefore recommend removing the old virtualenv by " "running `rm -rf /srv/funkwhale/virtualenv`." msgstr "" -#: ../../../CHANGELOG:92 ../../../CHANGELOG:329 ../../../CHANGELOG:724 -#: ../../../CHANGELOG:1224 ../../../CHANGELOG:1344 ../../../CHANGELOG:1585 -#: ../../../CHANGELOG:2010 ../../../CHANGELOG:2263 ../../../CHANGELOG:2761 -#: ../../../CHANGELOG:2857 ../../../CHANGELOG:3075 ../../../CHANGELOG:3150 -#: ../../../CHANGELOG:3383 ../../../CHANGELOG:3675 ../../../CHANGELOG:3879 -#: ../../../CHANGELOG:4000 ../../../CHANGELOG:4147 ../../../CHANGELOG:4246 -#: ../../../CHANGELOG:4338 ../../../CHANGELOG:4411 ../../../CHANGELOG:4494 -#: ../../../CHANGELOG:4524 ../../../CHANGELOG:4545 ../../../CHANGELOG:4636 -#: ../../../CHANGELOG:4649 ../../../CHANGELOG:4805 ../../../CHANGELOG:4824 +#: ../../../CHANGELOG.md:99 ../../../CHANGELOG.md:326 ../../../CHANGELOG.md:696 +#: ../../../CHANGELOG.md:1158 ../../../CHANGELOG.md:1265 +#: ../../../CHANGELOG.md:1496 ../../../CHANGELOG.md:1905 +#: ../../../CHANGELOG.md:2136 ../../../CHANGELOG.md:2613 +#: ../../../CHANGELOG.md:2702 ../../../CHANGELOG.md:2918 +#: ../../../CHANGELOG.md:2991 ../../../CHANGELOG.md:3213 +#: ../../../CHANGELOG.md:3486 ../../../CHANGELOG.md:3684 +#: ../../../CHANGELOG.md:3794 ../../../CHANGELOG.md:3940 +#: ../../../CHANGELOG.md:4029 ../../../CHANGELOG.md:4120 +#: ../../../CHANGELOG.md:4188 ../../../CHANGELOG.md:4264 +#: ../../../CHANGELOG.md:4290 ../../../CHANGELOG.md:4307 +#: ../../../CHANGELOG.md:4394 ../../../CHANGELOG.md:4405 +#: ../../../CHANGELOG.md:4536 ../../../CHANGELOG.md:4553 msgid "Features:" msgstr "" -#: ../../../CHANGELOG:94 +#: ../../../CHANGELOG.md:101 msgid "Add a management command to create a new library for a user" msgstr "" -#: ../../../CHANGELOG:95 +#: ../../../CHANGELOG.md:102 msgid "Add Gitpod configuration and guide" msgstr "" -#: ../../../CHANGELOG:96 +#: ../../../CHANGELOG.md:103 msgid "Add Sentry SDK to collect #1479" msgstr "" -#: ../../../CHANGELOG:97 +#: ../../../CHANGELOG.md:104 msgid "Prepare API for the upcoming version 2" msgstr "" -#: ../../../CHANGELOG:98 +#: ../../../CHANGELOG.md:105 msgid "Rewrite player to be based on Web Audio API" msgstr "" -#: ../../../CHANGELOG:103 +#: ../../../CHANGELOG.md:109 msgid "Add a celery task to scan remote library (#1712)" msgstr "" -#: ../../../CHANGELOG:104 +#: ../../../CHANGELOG.md:110 msgid "Add coverage report for Frontend Tests" msgstr "" -#: ../../../CHANGELOG:105 +#: ../../../CHANGELOG.md:111 msgid "Add hint which serializer is used for OembedView (#1901)" msgstr "" -#: ../../../CHANGELOG:106 +#: ../../../CHANGELOG.md:112 msgid "Add music visualizer (#1135)" msgstr "" -#: ../../../CHANGELOG:107 +#: ../../../CHANGELOG.md:113 msgid "Add playlists radio to search page (#1968)" msgstr "" -#: ../../../CHANGELOG:108 +#: ../../../CHANGELOG.md:114 msgid "Add proper serialization for TextPreviewView (#1903)" msgstr "" -#: ../../../CHANGELOG:109 +#: ../../../CHANGELOG.md:115 msgid "Add Serializer for SpaManifest endpoint" msgstr "" -#: ../../../CHANGELOG:110 +#: ../../../CHANGELOG.md:116 msgid "Add support for python 3.11" msgstr "" -#: ../../../CHANGELOG:111 +#: ../../../CHANGELOG.md:117 msgid "Added proper serializers for the rate-limit endpoint." msgstr "" -#: ../../../CHANGELOG:112 +#: ../../../CHANGELOG.md:118 msgid "Added type hints to the API." msgstr "" -#: ../../../CHANGELOG:113 +#: ../../../CHANGELOG.md:119 msgid "" "All administrator documentation has been rewritten to improve clarity and" " update outdated information." msgstr "" -#: ../../../CHANGELOG:114 +#: ../../../CHANGELOG.md:120 msgid "Allow arbitrary length names for artists, albums and tracks" msgstr "" -#: ../../../CHANGELOG:115 +#: ../../../CHANGELOG.md:121 msgid "Allow installing the funkwhale_api package" msgstr "" -#: ../../../CHANGELOG:116 +#: ../../../CHANGELOG.md:122 msgid "Allow using default browser dark mode and update UI dynamically on change" msgstr "" -#: ../../../CHANGELOG:117 +#: ../../../CHANGELOG.md:123 msgid "Apply migrations on API container start (!1879)" msgstr "" -#: ../../../CHANGELOG:118 +#: ../../../CHANGELOG.md:124 msgid "Automatically fetch next page of tracks (#1526)" msgstr "" -#: ../../../CHANGELOG:119 +#: ../../../CHANGELOG.md:125 msgid "Build frontend natively for cross-arch docker images" msgstr "" -#: ../../../CHANGELOG:120 ../../../CHANGELOG:566 +#: ../../../CHANGELOG.md:126 ../../../CHANGELOG.md:546 msgid "" "Change unmaintained PyMemoize library to django-cache-memoize to enable " "Python 3.10 support" msgstr "" -#: ../../../CHANGELOG:122 +#: ../../../CHANGELOG.md:128 msgid "Cleaned up frontend docker container" msgstr "" -#: ../../../CHANGELOG:123 +#: ../../../CHANGELOG.md:129 msgid "Cleanup Gitlab CI and Dockerfiles (!1796)" msgstr "" -#: ../../../CHANGELOG:124 +#: ../../../CHANGELOG.md:130 msgid "Create the funkwhale-manage entrypoint in the api package" msgstr "" -#: ../../../CHANGELOG:125 +#: ../../../CHANGELOG.md:131 msgid "Created migration guide for the deprecated all-in-one docker container." msgstr "" -#: ../../../CHANGELOG:126 +#: ../../../CHANGELOG.md:132 msgid "Don't buffer python stdout/err in docker" msgstr "" -#: ../../../CHANGELOG:127 +#: ../../../CHANGELOG.md:133 msgid "Don't compile python byte code in docker" msgstr "" -#: ../../../CHANGELOG:128 +#: ../../../CHANGELOG.md:134 msgid "Don't use poetry in production deployments" msgstr "" -#: ../../../CHANGELOG:129 +#: ../../../CHANGELOG.md:135 msgid "Drop direct dependency on pyopenssl (#1975)" msgstr "" -#: ../../../CHANGELOG:130 +#: ../../../CHANGELOG.md:136 msgid "" "Exclude /api/v1/oauth/authorize from the specs since its not supported " "yet (#1899)" msgstr "" -#: ../../../CHANGELOG:131 +#: ../../../CHANGELOG.md:137 msgid "Fix openapi specs for user endpoints (#1892, #1894)" msgstr "" -#: ../../../CHANGELOG:132 +#: ../../../CHANGELOG.md:138 msgid "Fix Serializer for inline channel artists (#1833)" msgstr "" -#: ../../../CHANGELOG:133 +#: ../../../CHANGELOG.md:139 msgid "Fix specs for ListenViewSet (#1898)" msgstr "" -#: ../../../CHANGELOG:134 +#: ../../../CHANGELOG.md:140 msgid "" "Handle PWA correctly and provide better cache strategy for album covers " "(#1721)" msgstr "" -#: ../../../CHANGELOG:135 +#: ../../../CHANGELOG.md:141 msgid "Improve docker caching" msgstr "" -#: ../../../CHANGELOG:136 +#: ../../../CHANGELOG.md:142 msgid "Improve specification of LibraryFollowViewSet (#1896)" msgstr "" -#: ../../../CHANGELOG:137 +#: ../../../CHANGELOG.md:143 msgid "Install API python package in docker image" msgstr "" -#: ../../../CHANGELOG:138 +#: ../../../CHANGELOG.md:144 msgid "Make CI always run all tests on protected branches." msgstr "" -#: ../../../CHANGELOG:139 +#: ../../../CHANGELOG.md:145 msgid "Make mutations endpoint appear in openapi specs" msgstr "" -#: ../../../CHANGELOG:140 +#: ../../../CHANGELOG.md:146 msgid "Make Python 3.10 tests in CI mandatory" msgstr "" -#: ../../../CHANGELOG:141 +#: ../../../CHANGELOG.md:147 msgid "Make sure ChannelViewSet always has a serializer (#1895)" msgstr "" -#: ../../../CHANGELOG:142 +#: ../../../CHANGELOG.md:148 msgid "Migrate to new queue system from old localStorage keys" msgstr "" -#: ../../../CHANGELOG:143 +#: ../../../CHANGELOG.md:149 msgid "Migrate to Vue 3" msgstr "" -#: ../../../CHANGELOG:144 +#: ../../../CHANGELOG.md:150 msgid "Migrate to vue-i18n (#1831) Fix locale changing (#1862)" msgstr "" -#: ../../../CHANGELOG:146 +#: ../../../CHANGELOG.md:152 msgid "Migrated to sphinx-design." msgstr "" -#: ../../../CHANGELOG:147 +#: ../../../CHANGELOG.md:153 msgid "" "New task checking if remote instance is reachable to avoid playback " "latence (#1711)" msgstr "" -#: ../../../CHANGELOG:148 +#: ../../../CHANGELOG.md:154 msgid "" "OAuth Application client secrets are now hashed before storing them to " "the DB. Those are only displayed once from now on!" msgstr "" -#: ../../../CHANGELOG:149 ../../../CHANGELOG:467 +#: ../../../CHANGELOG.md:155 ../../../CHANGELOG.md:455 msgid "Parameterize the default S3 ACL when uploading objects. (#1319)" msgstr "" -#: ../../../CHANGELOG:150 +#: ../../../CHANGELOG.md:156 msgid "" "Pin Alpine package versions in API Dockerfile (fixes part of CI build " "issues)." msgstr "" -#: ../../../CHANGELOG:151 +#: ../../../CHANGELOG.md:157 msgid "Prefer using the funkwhale-manage entrypoint" msgstr "" -#: ../../../CHANGELOG:152 +#: ../../../CHANGELOG.md:158 msgid "Prevent running two pipelines for MRs" msgstr "" -#: ../../../CHANGELOG:153 +#: ../../../CHANGELOG.md:159 msgid "" "Random and less listened radio filter out un-owned content on library " "section (#2007)" msgstr "" -#: ../../../CHANGELOG:154 +#: ../../../CHANGELOG.md:160 msgid "Refactor node info endpoint to use proper serializers" msgstr "" -#: ../../../CHANGELOG:155 +#: ../../../CHANGELOG.md:161 msgid "Refactor SettingsView to use a proper serializer" msgstr "" -#: ../../../CHANGELOG:156 +#: ../../../CHANGELOG.md:162 msgid "Remove unnecessary or wrong `is` keyword usage from backend" msgstr "" -#: ../../../CHANGELOG:157 +#: ../../../CHANGELOG.md:163 msgid "Rename OpenAPI schema's operation ids for nicer API client method names." msgstr "" -#: ../../../CHANGELOG:158 +#: ../../../CHANGELOG.md:164 msgid "" "Replace django-channels package with web socket implementation from " "@vueuse/core (#1715)" msgstr "" -#: ../../../CHANGELOG:159 +#: ../../../CHANGELOG.md:165 msgid "Rewrite embedded player to petite-vue" msgstr "" -#: ../../../CHANGELOG:160 +#: ../../../CHANGELOG.md:166 msgid "Split DATABASE_URL into multiple configuration variables" msgstr "" -#: ../../../CHANGELOG:161 +#: ../../../CHANGELOG.md:167 msgid "The ListenBrainz plugin submits the track duration" msgstr "" -#: ../../../CHANGELOG:162 +#: ../../../CHANGELOG.md:168 msgid "Update Django OAuth Toolkit to version 2, ref #1944" msgstr "" -#: ../../../CHANGELOG:163 +#: ../../../CHANGELOG.md:169 msgid "Update migration after django update (#1815)" msgstr "" -#: ../../../CHANGELOG:164 +#: ../../../CHANGELOG.md:170 msgid "Update upload status when import fails (#1999)" msgstr "" -#: ../../../CHANGELOG:165 +#: ../../../CHANGELOG.md:171 msgid "Updated the installation guides to make installation steps clearer." msgstr "" -#: ../../../CHANGELOG:166 +#: ../../../CHANGELOG.md:172 msgid "Upgrade docker base image to alpine 3.17" msgstr "" -#: ../../../CHANGELOG:167 +#: ../../../CHANGELOG.md:173 msgid "Use proper serializer for Search endpoint (#1902)" msgstr "" -#: ../../../CHANGELOG:170 +#: ../../../CHANGELOG.md:175 msgid "Refactoring:" msgstr "" -#: ../../../CHANGELOG:172 +#: ../../../CHANGELOG.md:177 msgid "" "Instead of requesting the right spa content from the API using a " "middleware we now serve the Frontend directly with nginx and only proxy-" "forward for API endpoints" msgstr "" -#: ../../../CHANGELOG:174 +#: ../../../CHANGELOG.md:179 msgid "Replace django-rest-auth with dj-rest-auth (#1877)" msgstr "" -#: ../../../CHANGELOG:179 +#: ../../../CHANGELOG.md:183 msgid "Allow enabling systemd funkwhale.target" msgstr "" -#: ../../../CHANGELOG:180 +#: ../../../CHANGELOG.md:184 msgid "Allow playback of media from external frontend (#1937)." msgstr "" -#: ../../../CHANGELOG:181 +#: ../../../CHANGELOG.md:185 msgid "Channel overview was displaying foreign tracks (#1773) (1773)" msgstr "" -#: ../../../CHANGELOG:182 +#: ../../../CHANGELOG.md:186 msgid "Fix adding same track multiple times (#1933)" msgstr "" -#: ../../../CHANGELOG:183 +#: ../../../CHANGELOG.md:187 msgid "Fix changing visualizer CORS error (#1934)." msgstr "" -#: ../../../CHANGELOG:184 +#: ../../../CHANGELOG.md:188 msgid "" "Fix content form autofocus despite `autofocus` prop being set to `false` " "(#1924)" msgstr "" -#: ../../../CHANGELOG:185 +#: ../../../CHANGELOG.md:189 msgid "Fix CSP header issues" msgstr "" -#: ../../../CHANGELOG:186 +#: ../../../CHANGELOG.md:190 msgid "Fix CSP issue caused by django-channels package (#1752)" msgstr "" -#: ../../../CHANGELOG:187 +#: ../../../CHANGELOG.md:191 msgid "" "Fix docker API image building with removing autobahn workaround version " "pin" msgstr "" -#: ../../../CHANGELOG:188 +#: ../../../CHANGELOG.md:192 msgid "Fix docker builds on armv7" msgstr "" -#: ../../../CHANGELOG:189 +#: ../../../CHANGELOG.md:193 msgid "Fix docker nginx entrypoint" msgstr "" -#: ../../../CHANGELOG:190 +#: ../../../CHANGELOG.md:194 msgid "Fix editing playlist tracks (#1362)" msgstr "" -#: ../../../CHANGELOG:191 +#: ../../../CHANGELOG.md:195 msgid "Fix embedded player not working on social posts (1946)" msgstr "" -#: ../../../CHANGELOG:192 +#: ../../../CHANGELOG.md:196 msgid "Fix favorite button in queue" msgstr "" -#: ../../../CHANGELOG:193 +#: ../../../CHANGELOG.md:197 msgid "Fix fetching pages of albums in album detail view (#1927)" msgstr "" -#: ../../../CHANGELOG:194 +#: ../../../CHANGELOG.md:198 msgid "Fix global keyboard shortcuts firing when input is focused (#1876)" msgstr "" -#: ../../../CHANGELOG:195 +#: ../../../CHANGELOG.md:199 msgid "Fix OAuth login (#1890)" msgstr "" -#: ../../../CHANGELOG:196 +#: ../../../CHANGELOG.md:200 msgid "Fix play button in albums with multi-page volumes (#1928)" msgstr "" -#: ../../../CHANGELOG:197 +#: ../../../CHANGELOG.md:201 msgid "Fix player closing when queue ends (#1931)" msgstr "" -#: ../../../CHANGELOG:198 +#: ../../../CHANGELOG.md:202 msgid "Fix purging of dangling files #1929" msgstr "" -#: ../../../CHANGELOG:199 +#: ../../../CHANGELOG.md:203 msgid "Fix remote search (#1857)" msgstr "" -#: ../../../CHANGELOG:200 +#: ../../../CHANGELOG.md:204 msgid "Fix search by text in affected views (#1858)" msgstr "" -#: ../../../CHANGELOG:201 +#: ../../../CHANGELOG.md:205 msgid "Fix timeout on spa manifest requests" msgstr "" -#: ../../../CHANGELOG:202 +#: ../../../CHANGELOG.md:206 msgid "" "Fix track table showing all tracks and double pagination in some cases " "(#1923)" msgstr "" -#: ../../../CHANGELOG:203 +#: ../../../CHANGELOG.md:207 msgid "Fix user requests and reports filtering (#1924)" msgstr "" -#: ../../../CHANGELOG:204 +#: ../../../CHANGELOG.md:208 msgid "Fix validity issues in openapi/swagger spec files (#1171)" msgstr "" -#: ../../../CHANGELOG:205 +#: ../../../CHANGELOG.md:209 msgid "" "Fixed an issue which caused links in Markdown forms to not render " "correctly. (#2023)" msgstr "" -#: ../../../CHANGELOG:206 +#: ../../../CHANGELOG.md:210 msgid "Fixed login redirect (1736)" msgstr "" -#: ../../../CHANGELOG:207 +#: ../../../CHANGELOG.md:211 msgid "Fixed remote subscription form in Podcast and search views (#1708)" msgstr "" -#: ../../../CHANGELOG:208 +#: ../../../CHANGELOG.md:212 msgid "Fixed upload form VUE errors (#1738) (1738)" msgstr "" -#: ../../../CHANGELOG:209 ../../../CHANGELOG:473 +#: ../../../CHANGELOG.md:213 ../../../CHANGELOG.md:460 msgid "Fixes channel page (#1729) (1729)" msgstr "" -#: ../../../CHANGELOG:210 +#: ../../../CHANGELOG.md:214 msgid "Fixes development environment set-up with docker (1726)" msgstr "" -#: ../../../CHANGELOG:211 +#: ../../../CHANGELOG.md:215 msgid "Fixes embed player (#1783) (1783)" msgstr "" -#: ../../../CHANGELOG:212 +#: ../../../CHANGELOG.md:216 msgid "Fixes service worker (#1634)" msgstr "" -#: ../../../CHANGELOG:213 +#: ../../../CHANGELOG.md:217 msgid "Fixes track listenings not being sent when tab is not focused" msgstr "" -#: ../../../CHANGELOG:214 +#: ../../../CHANGELOG.md:218 msgid "Hide create custom radio to un-authenticated users (#1720)" msgstr "" -#: ../../../CHANGELOG:215 +#: ../../../CHANGELOG.md:219 msgid "Remove trailing slash from reverse proxy configuration" msgstr "" -#: ../../../CHANGELOG:216 +#: ../../../CHANGELOG.md:220 msgid "Remove unused Footer component (#1660)" msgstr "" -#: ../../../CHANGELOG:217 +#: ../../../CHANGELOG.md:221 msgid "Remove usage of deprecated Model and Serializer fields (#1663)" msgstr "" -#: ../../../CHANGELOG:218 +#: ../../../CHANGELOG.md:222 msgid "" "Skip refreshing local actors in celery federation.refresh_actor_data task" " - fixes disappearing avatars (!1873)" msgstr "" -#: ../../../CHANGELOG:221 ../../../CHANGELOG:527 ../../../CHANGELOG:774 -#: ../../../CHANGELOG:1273 ../../../CHANGELOG:1760 ../../../CHANGELOG:2337 -#: ../../../CHANGELOG:2417 ../../../CHANGELOG:2554 ../../../CHANGELOG:2838 -#: ../../../CHANGELOG:2888 ../../../CHANGELOG:3196 ../../../CHANGELOG:3409 -#: ../../../CHANGELOG:3484 ../../../CHANGELOG:3608 ../../../CHANGELOG:3721 -#: ../../../CHANGELOG:4018 ../../../CHANGELOG:4177 ../../../CHANGELOG:4275 -#: ../../../CHANGELOG:4441 ../../../CHANGELOG:4515 +#: ../../../CHANGELOG.md:224 ../../../CHANGELOG.md:510 +#: ../../../CHANGELOG.md:743 ../../../CHANGELOG.md:1203 +#: ../../../CHANGELOG.md:1666 ../../../CHANGELOG.md:2208 +#: ../../../CHANGELOG.md:2281 ../../../CHANGELOG.md:2415 +#: ../../../CHANGELOG.md:2687 ../../../CHANGELOG.md:2731 +#: ../../../CHANGELOG.md:3034 ../../../CHANGELOG.md:3236 +#: ../../../CHANGELOG.md:3304 ../../../CHANGELOG.md:3421 +#: ../../../CHANGELOG.md:3530 ../../../CHANGELOG.md:3809 +#: ../../../CHANGELOG.md:3968 ../../../CHANGELOG.md:4055 +#: ../../../CHANGELOG.md:4215 ../../../CHANGELOG.md:4283 msgid "Documentation:" msgstr "" -#: ../../../CHANGELOG:223 +#: ../../../CHANGELOG.md:226 msgid "Add ability to translate documentation into multiple languages" msgstr "" -#: ../../../CHANGELOG:224 +#: ../../../CHANGELOG.md:227 msgid "Add restore instructions to backup docs (#1627)." msgstr "" -#: ../../../CHANGELOG:225 +#: ../../../CHANGELOG.md:228 msgid "Added virtualenv upgrade instructions for Debian (#1562)." msgstr "" -#: ../../../CHANGELOG:226 +#: ../../../CHANGELOG.md:229 msgid "Cleaned up documentation" msgstr "" -#: ../../../CHANGELOG:227 +#: ../../../CHANGELOG.md:230 msgid "Document the new login flow of the CLI-tool (#1800)" msgstr "" -#: ../../../CHANGELOG:228 +#: ../../../CHANGELOG.md:231 msgid "Documented LOGLEVEL command (#1541)." msgstr "" -#: ../../../CHANGELOG:229 +#: ../../../CHANGELOG.md:232 msgid "Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624)." msgstr "" -#: ../../../CHANGELOG:230 +#: ../../../CHANGELOG.md:233 msgid "Harden security for debian install docs" msgstr "" -#: ../../../CHANGELOG:231 +#: ../../../CHANGELOG.md:234 msgid "Rewrote documentation contributor guide." msgstr "" -#: ../../../CHANGELOG:232 +#: ../../../CHANGELOG.md:235 msgid "Rewrote the architecture file (#1908)" msgstr "" -#: ../../../CHANGELOG:233 +#: ../../../CHANGELOG.md:236 msgid "Rewrote the federation developer documentation (#1911)" msgstr "" -#: ../../../CHANGELOG:234 +#: ../../../CHANGELOG.md:237 msgid "Rewrote the plugins documentation (#1910)" msgstr "" -#: ../../../CHANGELOG:235 +#: ../../../CHANGELOG.md:238 msgid "Rewrote translators file" msgstr "" -#: ../../../CHANGELOG:236 +#: ../../../CHANGELOG.md:239 msgid "Updated API developer documentation (#1912, #1909)" msgstr "" -#: ../../../CHANGELOG:237 +#: ../../../CHANGELOG.md:240 msgid "" "Updated CONTRIBUTING guide with up-to-date documentation. Created layout " "in documentation hub." msgstr "" -#: ../../../CHANGELOG:240 ../../../CHANGELOG:423 ../../../CHANGELOG:784 -#: ../../../CHANGELOG:2893 ../../../CHANGELOG:3489 ../../../CHANGELOG:3727 -#: ../../../CHANGELOG:4536 ../../../CHANGELOG:4666 +#: ../../../CHANGELOG.md:242 ../../../CHANGELOG.md:413 +#: ../../../CHANGELOG.md:752 ../../../CHANGELOG.md:2735 +#: ../../../CHANGELOG.md:3308 ../../../CHANGELOG.md:3535 +#: ../../../CHANGELOG.md:4300 ../../../CHANGELOG.md:4420 msgid "Other:" msgstr "" -#: ../../../CHANGELOG:242 +#: ../../../CHANGELOG.md:244 msgid "Add a CI job to check if changelog snippet is available" msgstr "" -#: ../../../CHANGELOG:243 +#: ../../../CHANGELOG.md:245 msgid "Add CI broken links checker" msgstr "" -#: ../../../CHANGELOG:244 +#: ../../../CHANGELOG.md:246 msgid "Add pre-commit hooks" msgstr "" -#: ../../../CHANGELOG:246 +#: ../../../CHANGELOG.md:248 msgid "flake8" msgstr "" -#: ../../../CHANGELOG:247 +#: ../../../CHANGELOG.md:249 msgid "black" msgstr "" -#: ../../../CHANGELOG:248 +#: ../../../CHANGELOG.md:250 msgid "isort" msgstr "" -#: ../../../CHANGELOG:249 +#: ../../../CHANGELOG.md:251 msgid "pyupgrade" msgstr "" -#: ../../../CHANGELOG:250 +#: ../../../CHANGELOG.md:252 msgid "prettier" msgstr "" -#: ../../../CHANGELOG:251 +#: ../../../CHANGELOG.md:253 msgid "codespell" msgstr "" -#: ../../../CHANGELOG:252 +#: ../../../CHANGELOG.md:255 msgid "Add pre-commit to development tools" msgstr "" -#: ../../../CHANGELOG:253 +#: ../../../CHANGELOG.md:256 msgid "Align the openapi spec to the actual API wherever possible" msgstr "" -#: ../../../CHANGELOG:254 +#: ../../../CHANGELOG.md:257 msgid "Cache lychee checked urls for 1 day in CI" msgstr "" -#: ../../../CHANGELOG:255 +#: ../../../CHANGELOG.md:258 msgid "Fix api tests warnings by renaming fixtures" msgstr "" -#: ../../../CHANGELOG:256 +#: ../../../CHANGELOG.md:259 msgid "Fix permissions for build artifacts" msgstr "" -#: ../../../CHANGELOG:257 +#: ../../../CHANGELOG.md:260 msgid "Fix shell scripts lint errors" msgstr "" -#: ../../../CHANGELOG:258 +#: ../../../CHANGELOG.md:261 msgid "Format api pyproject.toml" msgstr "" -#: ../../../CHANGELOG:259 +#: ../../../CHANGELOG.md:262 msgid "Format or fix files using pre-commit" msgstr "" -#: ../../../CHANGELOG:261 +#: ../../../CHANGELOG.md:264 msgid "Upgrade code to >=python3.7" msgstr "" -#: ../../../CHANGELOG:262 +#: ../../../CHANGELOG.md:265 msgid "Fix flake8 warnings" msgstr "" -#: ../../../CHANGELOG:263 +#: ../../../CHANGELOG.md:266 msgid "Fix spelling errors" msgstr "" -#: ../../../CHANGELOG:264 +#: ../../../CHANGELOG.md:267 msgid "Format files using black" msgstr "" -#: ../../../CHANGELOG:265 +#: ../../../CHANGELOG.md:268 msgid "Format files using isort" msgstr "" -#: ../../../CHANGELOG:266 +#: ../../../CHANGELOG.md:269 msgid "Format files using prettier" msgstr "" -#: ../../../CHANGELOG:267 +#: ../../../CHANGELOG.md:271 msgid "Move api tools config to pyproject.toml" msgstr "" -#: ../../../CHANGELOG:268 +#: ../../../CHANGELOG.md:272 msgid "Move database url composition from custom script to django settings" msgstr "" -#: ../../../CHANGELOG:269 +#: ../../../CHANGELOG.md:273 msgid "Remove docker_all_in_one_release ci job" msgstr "" -#: ../../../CHANGELOG:270 +#: ../../../CHANGELOG.md:274 msgid "Rename api composer/django/ dir to docker/" msgstr "" -#: ../../../CHANGELOG:271 +#: ../../../CHANGELOG.md:275 msgid "Unpin asgiref in API dependencies" msgstr "" -#: ../../../CHANGELOG:272 +#: ../../../CHANGELOG.md:276 msgid "Use vite for building the frontend, #1644" msgstr "" -#: ../../../CHANGELOG:275 +#: ../../../CHANGELOG.md:278 msgid "Removal:" msgstr "" -#: ../../../CHANGELOG:277 +#: ../../../CHANGELOG.md:280 msgid "" "This release removes support for Python 3.6. Please make sure you update " "your python version before Updating Funkwhale!" msgstr "" -#: ../../../CHANGELOG:282 +#: ../../../CHANGELOG.md:283 msgid "1.2.9 (2022-11-25)" msgstr "" -#: ../../../CHANGELOG:289 +#: ../../../CHANGELOG.md:289 msgid "Ensure index.html files get loaded with UTF-8 encoding" msgstr "" -#: ../../../CHANGELOG:290 +#: ../../../CHANGELOG.md:290 msgid "Fixed invitation reuse after the invited user has been deleted (#1952)" msgstr "" -#: ../../../CHANGELOG:291 +#: ../../../CHANGELOG.md:291 msgid "Fixed unplayable skipped upload (#1349)" msgstr "" -#: ../../../CHANGELOG:293 ../../../CHANGELOG:343 ../../../CHANGELOG:392 -#: ../../../CHANGELOG:427 ../../../CHANGELOG:475 ../../../CHANGELOG:550 -#: ../../../CHANGELOG:788 +#: ../../../CHANGELOG.md:293 ../../../CHANGELOG.md:339 +#: ../../../CHANGELOG.md:385 ../../../CHANGELOG.md:417 +#: ../../../CHANGELOG.md:462 ../../../CHANGELOG.md:533 +#: ../../../CHANGELOG.md:671 ../../../CHANGELOG.md:756 msgid "Committers:" msgstr "" -#: ../../../CHANGELOG:295 ../../../CHANGELOG:303 ../../../CHANGELOG:316 -#: ../../../CHANGELOG:346 ../../../CHANGELOG:356 ../../../CHANGELOG:375 -#: ../../../CHANGELOG:394 ../../../CHANGELOG:404 ../../../CHANGELOG:429 -#: ../../../CHANGELOG:438 ../../../CHANGELOG:455 ../../../CHANGELOG:477 -#: ../../../CHANGELOG:488 ../../../CHANGELOG:503 ../../../CHANGELOG:536 -#: ../../../CHANGELOG:545 ../../../CHANGELOG:552 ../../../CHANGELOG:585 -#: ../../../CHANGELOG:599 ../../../CHANGELOG:609 ../../../CHANGELOG:649 -#: ../../../CHANGELOG:660 ../../../CHANGELOG:667 ../../../CHANGELOG:695 -#: ../../../CHANGELOG:1126 +#: ../../../CHANGELOG.md:295 ../../../CHANGELOG.md:303 +#: ../../../CHANGELOG.md:316 ../../../CHANGELOG.md:342 +#: ../../../CHANGELOG.md:352 ../../../CHANGELOG.md:371 +#: ../../../CHANGELOG.md:387 ../../../CHANGELOG.md:397 +#: ../../../CHANGELOG.md:419 ../../../CHANGELOG.md:428 +#: ../../../CHANGELOG.md:445 ../../../CHANGELOG.md:464 +#: ../../../CHANGELOG.md:475 ../../../CHANGELOG.md:490 +#: ../../../CHANGELOG.md:519 ../../../CHANGELOG.md:528 +#: ../../../CHANGELOG.md:535 ../../../CHANGELOG.md:565 +#: ../../../CHANGELOG.md:579 ../../../CHANGELOG.md:589 +#: ../../../CHANGELOG.md:626 ../../../CHANGELOG.md:637 +#: ../../../CHANGELOG.md:644 ../../../CHANGELOG.md:661 +#: ../../../CHANGELOG.md:669 ../../../CHANGELOG.md:674 +#: ../../../CHANGELOG.md:781 ../../../CHANGELOG.md:826 +#: ../../../CHANGELOG.md:859 ../../../CHANGELOG.md:986 +#: ../../../CHANGELOG.md:1071 msgid "Georg Krause" msgstr "" -#: ../../../CHANGELOG:296 ../../../CHANGELOG:306 ../../../CHANGELOG:318 -#: ../../../CHANGELOG:347 ../../../CHANGELOG:360 ../../../CHANGELOG:378 -#: ../../../CHANGELOG:395 ../../../CHANGELOG:400 ../../../CHANGELOG:405 -#: ../../../CHANGELOG:430 ../../../CHANGELOG:439 ../../../CHANGELOG:456 -#: ../../../CHANGELOG:490 ../../../CHANGELOG:505 ../../../CHANGELOG:538 -#: ../../../CHANGELOG:547 ../../../CHANGELOG:553 ../../../CHANGELOG:588 -#: ../../../CHANGELOG:602 ../../../CHANGELOG:651 ../../../CHANGELOG:662 -#: ../../../CHANGELOG:670 +#: ../../../CHANGELOG.md:296 ../../../CHANGELOG.md:306 +#: ../../../CHANGELOG.md:318 ../../../CHANGELOG.md:343 +#: ../../../CHANGELOG.md:356 ../../../CHANGELOG.md:374 +#: ../../../CHANGELOG.md:388 ../../../CHANGELOG.md:393 +#: ../../../CHANGELOG.md:398 ../../../CHANGELOG.md:420 +#: ../../../CHANGELOG.md:429 ../../../CHANGELOG.md:446 +#: ../../../CHANGELOG.md:477 ../../../CHANGELOG.md:492 +#: ../../../CHANGELOG.md:521 ../../../CHANGELOG.md:530 +#: ../../../CHANGELOG.md:536 ../../../CHANGELOG.md:568 +#: ../../../CHANGELOG.md:582 ../../../CHANGELOG.md:628 +#: ../../../CHANGELOG.md:639 ../../../CHANGELOG.md:647 +#: ../../../CHANGELOG.md:793 ../../../CHANGELOG.md:832 +#: ../../../CHANGELOG.md:863 msgid "Marcos Peña" msgstr "" -#: ../../../CHANGELOG:297 ../../../CHANGELOG:319 ../../../CHANGELOG:1131 +#: ../../../CHANGELOG.md:297 ../../../CHANGELOG.md:319 +#: ../../../CHANGELOG.md:799 ../../../CHANGELOG.md:836 +#: ../../../CHANGELOG.md:867 ../../../CHANGELOG.md:998 +#: ../../../CHANGELOG.md:1076 msgid "Philipp Wolfer" msgstr "" -#: ../../../CHANGELOG:298 +#: ../../../CHANGELOG.md:298 msgid "Travis Briggs" msgstr "" -#: ../../../CHANGELOG:300 ../../../CHANGELOG:351 ../../../CHANGELOG:397 -#: ../../../CHANGELOG:434 ../../../CHANGELOG:482 ../../../CHANGELOG:531 -#: ../../../CHANGELOG:579 ../../../CHANGELOG:646 ../../../CHANGELOG:684 -#: ../../../CHANGELOG:848 +#: ../../../CHANGELOG.md:300 ../../../CHANGELOG.md:347 +#: ../../../CHANGELOG.md:390 ../../../CHANGELOG.md:424 +#: ../../../CHANGELOG.md:469 ../../../CHANGELOG.md:514 +#: ../../../CHANGELOG.md:559 ../../../CHANGELOG.md:623 +#: ../../../CHANGELOG.md:658 ../../../CHANGELOG.md:816 msgid "Contributors to our Issues:" msgstr "" -#: ../../../CHANGELOG:302 ../../../CHANGELOG:345 ../../../CHANGELOG:355 -#: ../../../CHANGELOG:374 ../../../CHANGELOG:399 ../../../CHANGELOG:442 -#: ../../../CHANGELOG:487 ../../../CHANGELOG:502 ../../../CHANGELOG:535 -#: ../../../CHANGELOG:584 ../../../CHANGELOG:598 ../../../CHANGELOG:648 -#: ../../../CHANGELOG:659 ../../../CHANGELOG:666 ../../../CHANGELOG:1123 -#: ../../../CHANGELOG:1158 ../../../CHANGELOG:1285 ../../../CHANGELOG:1334 -#: ../../../CHANGELOG:1391 ../../../CHANGELOG:1675 ../../../CHANGELOG:1767 -#: ../../../CHANGELOG:2077 ../../../CHANGELOG:2140 ../../../CHANGELOG:2347 +#: ../../../CHANGELOG.md:302 ../../../CHANGELOG.md:341 +#: ../../../CHANGELOG.md:351 ../../../CHANGELOG.md:370 +#: ../../../CHANGELOG.md:392 ../../../CHANGELOG.md:432 +#: ../../../CHANGELOG.md:474 ../../../CHANGELOG.md:489 +#: ../../../CHANGELOG.md:518 ../../../CHANGELOG.md:564 +#: ../../../CHANGELOG.md:578 ../../../CHANGELOG.md:625 +#: ../../../CHANGELOG.md:636 ../../../CHANGELOG.md:643 +#: ../../../CHANGELOG.md:660 ../../../CHANGELOG.md:768 +#: ../../../CHANGELOG.md:822 ../../../CHANGELOG.md:853 +#: ../../../CHANGELOG.md:976 ../../../CHANGELOG.md:1068 +#: ../../../CHANGELOG.md:1100 ../../../CHANGELOG.md:1214 +#: ../../../CHANGELOG.md:1259 ../../../CHANGELOG.md:1309 +#: ../../../CHANGELOG.md:1586 ../../../CHANGELOG.md:1672 +#: ../../../CHANGELOG.md:1970 ../../../CHANGELOG.md:2028 +#: ../../../CHANGELOG.md:2218 msgid "Ciarán Ainsworth" msgstr "" -#: ../../../CHANGELOG:304 ../../../CHANGELOG:317 ../../../CHANGELOG:357 -#: ../../../CHANGELOG:376 ../../../CHANGELOG:445 ../../../CHANGELOG:489 -#: ../../../CHANGELOG:504 ../../../CHANGELOG:537 ../../../CHANGELOG:546 -#: ../../../CHANGELOG:586 ../../../CHANGELOG:600 ../../../CHANGELOG:610 -#: ../../../CHANGELOG:650 ../../../CHANGELOG:661 ../../../CHANGELOG:668 +#: ../../../CHANGELOG.md:304 ../../../CHANGELOG.md:317 +#: ../../../CHANGELOG.md:353 ../../../CHANGELOG.md:372 +#: ../../../CHANGELOG.md:435 ../../../CHANGELOG.md:476 +#: ../../../CHANGELOG.md:491 ../../../CHANGELOG.md:520 +#: ../../../CHANGELOG.md:529 ../../../CHANGELOG.md:566 +#: ../../../CHANGELOG.md:580 ../../../CHANGELOG.md:590 +#: ../../../CHANGELOG.md:627 ../../../CHANGELOG.md:638 +#: ../../../CHANGELOG.md:645 ../../../CHANGELOG.md:675 +#: ../../../CHANGELOG.md:788 ../../../CHANGELOG.md:829 +#: ../../../CHANGELOG.md:861 msgid "JuniorJPDJ" msgstr "" -#: ../../../CHANGELOG:305 ../../../CHANGELOG:358 ../../../CHANGELOG:377 -#: ../../../CHANGELOG:587 ../../../CHANGELOG:601 +#: ../../../CHANGELOG.md:305 ../../../CHANGELOG.md:354 +#: ../../../CHANGELOG.md:373 ../../../CHANGELOG.md:567 +#: ../../../CHANGELOG.md:581 ../../../CHANGELOG.md:862 msgid "Kasper Seweryn" msgstr "" -#: ../../../CHANGELOG:307 ../../../CHANGELOG:491 ../../../CHANGELOG:539 -#: ../../../CHANGELOG:589 ../../../CHANGELOG:652 +#: ../../../CHANGELOG.md:307 ../../../CHANGELOG.md:478 +#: ../../../CHANGELOG.md:522 ../../../CHANGELOG.md:569 +#: ../../../CHANGELOG.md:629 ../../../CHANGELOG.md:663 +#: ../../../CHANGELOG.md:834 ../../../CHANGELOG.md:864 msgid "Mathieu Jourdan" msgstr "" -#: ../../../CHANGELOG:308 ../../../CHANGELOG:362 ../../../CHANGELOG:441 -#: ../../../CHANGELOG:493 ../../../CHANGELOG:540 ../../../CHANGELOG:591 -#: ../../../CHANGELOG:653 +#: ../../../CHANGELOG.md:308 ../../../CHANGELOG.md:358 +#: ../../../CHANGELOG.md:431 ../../../CHANGELOG.md:480 +#: ../../../CHANGELOG.md:523 ../../../CHANGELOG.md:571 +#: ../../../CHANGELOG.md:630 ../../../CHANGELOG.md:664 +#: ../../../CHANGELOG.md:796 ../../../CHANGELOG.md:835 +#: ../../../CHANGELOG.md:866 msgid "Micha Gläß-Stöcker" msgstr "" -#: ../../../CHANGELOG:309 ../../../CHANGELOG:320 +#: ../../../CHANGELOG.md:309 ../../../CHANGELOG.md:320 msgid "fuomag9" msgstr "" -#: ../../../CHANGELOG:310 +#: ../../../CHANGELOG.md:310 msgid "gammelalf" msgstr "" -#: ../../../CHANGELOG:311 +#: ../../../CHANGELOG.md:311 msgid "myOmikron" msgstr "" -#: ../../../CHANGELOG:312 ../../../CHANGELOG:369 ../../../CHANGELOG:497 -#: ../../../CHANGELOG:509 ../../../CHANGELOG:541 ../../../CHANGELOG:548 -#: ../../../CHANGELOG:594 ../../../CHANGELOG:604 ../../../CHANGELOG:655 +#: ../../../CHANGELOG.md:312 ../../../CHANGELOG.md:365 +#: ../../../CHANGELOG.md:484 ../../../CHANGELOG.md:496 +#: ../../../CHANGELOG.md:524 ../../../CHANGELOG.md:531 +#: ../../../CHANGELOG.md:574 ../../../CHANGELOG.md:584 +#: ../../../CHANGELOG.md:632 ../../../CHANGELOG.md:665 +#: ../../../CHANGELOG.md:797 ../../../CHANGELOG.md:846 +#: ../../../CHANGELOG.md:872 msgid "petitminion" msgstr "" -#: ../../../CHANGELOG:314 ../../../CHANGELOG:372 ../../../CHANGELOG:402 -#: ../../../CHANGELOG:452 ../../../CHANGELOG:500 ../../../CHANGELOG:543 -#: ../../../CHANGELOG:596 ../../../CHANGELOG:657 ../../../CHANGELOG:693 -#: ../../../CHANGELOG:881 +#: ../../../CHANGELOG.md:314 ../../../CHANGELOG.md:368 +#: ../../../CHANGELOG.md:395 ../../../CHANGELOG.md:442 +#: ../../../CHANGELOG.md:487 ../../../CHANGELOG.md:526 +#: ../../../CHANGELOG.md:576 ../../../CHANGELOG.md:634 +#: ../../../CHANGELOG.md:667 ../../../CHANGELOG.md:849 msgid "Contributors to our Merge Requests:" msgstr "" -#: ../../../CHANGELOG:324 +#: ../../../CHANGELOG.md:322 msgid "1.2.8 (2022-09-12)" msgstr "" -#: ../../../CHANGELOG:331 +#: ../../../CHANGELOG.md:328 msgid "Add Sentry SDK to collect errors at the backend" msgstr "" -#: ../../../CHANGELOG:336 +#: ../../../CHANGELOG.md:332 msgid "" "Fix exponentially growing database when using in-place-imports on a " "regular base #1676" msgstr "" -#: ../../../CHANGELOG:337 +#: ../../../CHANGELOG.md:333 msgid "Fix navigating to registration request not showing anything (#1836)" msgstr "" -#: ../../../CHANGELOG:338 +#: ../../../CHANGELOG.md:334 msgid "Fix player cover image overlapping queue list" msgstr "" -#: ../../../CHANGELOG:339 +#: ../../../CHANGELOG.md:335 msgid "Fixed metadata handling for Various Artists albums (#1201)" msgstr "" -#: ../../../CHANGELOG:340 +#: ../../../CHANGELOG.md:336 msgid "Fixed search behaviour in radio builder's filters (#733)" msgstr "" -#: ../../../CHANGELOG:341 +#: ../../../CHANGELOG.md:337 msgid "Fixed unpredictable subsonic search3 results (#1782)" msgstr "" -#: ../../../CHANGELOG:348 +#: ../../../CHANGELOG.md:344 msgid "Mathias Koehler" msgstr "" -#: ../../../CHANGELOG:349 ../../../CHANGELOG:432 ../../../CHANGELOG:437 -#: ../../../CHANGELOG:454 +#: ../../../CHANGELOG.md:345 ../../../CHANGELOG.md:422 +#: ../../../CHANGELOG.md:427 ../../../CHANGELOG.md:444 msgid "wvffle" msgstr "" -#: ../../../CHANGELOG:353 ../../../CHANGELOG:440 +#: ../../../CHANGELOG.md:349 ../../../CHANGELOG.md:430 +#: ../../../CHANGELOG.md:818 msgid "AMoonRabbit" msgstr "" -#: ../../../CHANGELOG:354 ../../../CHANGELOG:444 ../../../CHANGELOG:484 -#: ../../../CHANGELOG:581 ../../../CHANGELOG:1121 ../../../CHANGELOG:1156 -#: ../../../CHANGELOG:1280 ../../../CHANGELOG:1332 ../../../CHANGELOG:1390 -#: ../../../CHANGELOG:1670 ../../../CHANGELOG:1770 ../../../CHANGELOG:2078 -#: ../../../CHANGELOG:2143 ../../../CHANGELOG:2350 +#: ../../../CHANGELOG.md:350 ../../../CHANGELOG.md:434 +#: ../../../CHANGELOG.md:471 ../../../CHANGELOG.md:561 +#: ../../../CHANGELOG.md:819 ../../../CHANGELOG.md:851 +#: ../../../CHANGELOG.md:967 ../../../CHANGELOG.md:1066 +#: ../../../CHANGELOG.md:1098 ../../../CHANGELOG.md:1209 +#: ../../../CHANGELOG.md:1257 ../../../CHANGELOG.md:1308 +#: ../../../CHANGELOG.md:1581 ../../../CHANGELOG.md:1675 +#: ../../../CHANGELOG.md:1971 ../../../CHANGELOG.md:2031 +#: ../../../CHANGELOG.md:2221 msgid "Agate" msgstr "" -#: ../../../CHANGELOG:359 +#: ../../../CHANGELOG.md:355 msgid "Kelvin Hammond" msgstr "" -#: ../../../CHANGELOG:361 ../../../CHANGELOG:1292 +#: ../../../CHANGELOG.md:357 ../../../CHANGELOG.md:995 +#: ../../../CHANGELOG.md:1221 msgid "Meliurwen" msgstr "" -#: ../../../CHANGELOG:363 +#: ../../../CHANGELOG.md:359 msgid "Miv2nir" msgstr "" -#: ../../../CHANGELOG:364 +#: ../../../CHANGELOG.md:360 msgid "Sam Birch" msgstr "" -#: ../../../CHANGELOG:365 +#: ../../../CHANGELOG.md:361 msgid "Tolriq" msgstr "" -#: ../../../CHANGELOG:366 ../../../CHANGELOG:495 ../../../CHANGELOG:1395 -#: ../../../CHANGELOG:1706 +#: ../../../CHANGELOG.md:362 ../../../CHANGELOG.md:482 +#: ../../../CHANGELOG.md:812 ../../../CHANGELOG.md:839 +#: ../../../CHANGELOG.md:869 ../../../CHANGELOG.md:1313 +#: ../../../CHANGELOG.md:1617 msgid "Tony Wasserka" msgstr "" -#: ../../../CHANGELOG:367 +#: ../../../CHANGELOG.md:363 msgid "f1reflyyyylmao" msgstr "" -#: ../../../CHANGELOG:368 ../../../CHANGELOG:443 ../../../CHANGELOG:1127 +#: ../../../CHANGELOG.md:364 ../../../CHANGELOG.md:433 +#: ../../../CHANGELOG.md:784 ../../../CHANGELOG.md:842 +#: ../../../CHANGELOG.md:870 ../../../CHANGELOG.md:989 +#: ../../../CHANGELOG.md:1072 msgid "heyarne" msgstr "" -#: ../../../CHANGELOG:370 +#: ../../../CHANGELOG.md:366 msgid "troll" msgstr "" -#: ../../../CHANGELOG:379 +#: ../../../CHANGELOG.md:375 msgid "interru" msgstr "" -#: ../../../CHANGELOG:383 +#: ../../../CHANGELOG.md:377 msgid "1.2.7 (2022-07-14)" msgstr "" -#: ../../../CHANGELOG:390 +#: ../../../CHANGELOG.md:383 msgid "Fixed libre.fm plugin not submitting scrobbles (#1817)" msgstr "" -#: ../../../CHANGELOG:408 +#: ../../../CHANGELOG.md:400 msgid "1.2.6 (2022-07-04)" msgstr "" -#: ../../../CHANGELOG:415 +#: ../../../CHANGELOG.md:406 msgid "Channel overview was displaying foreign tracks (#1773)" msgstr "" -#: ../../../CHANGELOG:416 +#: ../../../CHANGELOG.md:407 msgid "" "Fixed login form focusing reset password link instead of next input " "(#1373)" msgstr "" -#: ../../../CHANGELOG:417 +#: ../../../CHANGELOG.md:408 msgid "Fixed missing album contextual menu (#1791)" msgstr "" -#: ../../../CHANGELOG:418 +#: ../../../CHANGELOG.md:409 msgid "Fixed single listening submission when repeating a song (#1312)" msgstr "" -#: ../../../CHANGELOG:419 +#: ../../../CHANGELOG.md:410 msgid "Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263)" msgstr "" -#: ../../../CHANGELOG:420 +#: ../../../CHANGELOG.md:411 msgid "Resolve timeouts if nodeinfo and service actor is not known (#1714)" msgstr "" -#: ../../../CHANGELOG:425 +#: ../../../CHANGELOG.md:415 msgid "Replaced references to #funkwhale-troubleshooting with #funkwhale-support" msgstr "" -#: ../../../CHANGELOG:431 ../../../CHANGELOG:450 ../../../CHANGELOG:457 -#: ../../../CHANGELOG:612 +#: ../../../CHANGELOG.md:421 ../../../CHANGELOG.md:440 +#: ../../../CHANGELOG.md:447 ../../../CHANGELOG.md:592 +#: ../../../CHANGELOG.md:798 msgid "Petitminion" msgstr "" -#: ../../../CHANGELOG:436 +#: ../../../CHANGELOG.md:426 msgid "jeweet" msgstr "" -#: ../../../CHANGELOG:446 +#: ../../../CHANGELOG.md:436 msgid "MichaelBechHansen" msgstr "" -#: ../../../CHANGELOG:447 +#: ../../../CHANGELOG.md:437 msgid "ooZberg" msgstr "" -#: ../../../CHANGELOG:448 +#: ../../../CHANGELOG.md:438 msgid "Esras ." msgstr "" -#: ../../../CHANGELOG:449 ../../../CHANGELOG:507 +#: ../../../CHANGELOG.md:439 ../../../CHANGELOG.md:494 msgid "PhieF" msgstr "" -#: ../../../CHANGELOG:460 +#: ../../../CHANGELOG.md:449 msgid "1.2.5 (2022-05-07)" msgstr "" -#: ../../../CHANGELOG:472 +#: ../../../CHANGELOG.md:459 msgid "Fix stopped player to not show 00:00 when loading a track (#1432)" msgstr "" -#: ../../../CHANGELOG:478 +#: ../../../CHANGELOG.md:465 ../../../CHANGELOG.md:792 msgid "Marcos" msgstr "" -#: ../../../CHANGELOG:479 ../../../CHANGELOG:492 ../../../CHANGELOG:506 -#: ../../../CHANGELOG:554 ../../../CHANGELOG:590 ../../../CHANGELOG:603 -#: ../../../CHANGELOG:611 +#: ../../../CHANGELOG.md:466 ../../../CHANGELOG.md:479 +#: ../../../CHANGELOG.md:493 ../../../CHANGELOG.md:537 +#: ../../../CHANGELOG.md:570 ../../../CHANGELOG.md:583 +#: ../../../CHANGELOG.md:591 msgid "MattDHarding" msgstr "" -#: ../../../CHANGELOG:480 ../../../CHANGELOG:494 ../../../CHANGELOG:508 +#: ../../../CHANGELOG.md:467 ../../../CHANGELOG.md:481 +#: ../../../CHANGELOG.md:495 msgid "Stuart Begley-Miller" msgstr "" -#: ../../../CHANGELOG:485 ../../../CHANGELOG:533 +#: ../../../CHANGELOG.md:472 ../../../CHANGELOG.md:516 msgid "Beto Dealmeida" msgstr "" -#: ../../../CHANGELOG:486 ../../../CHANGELOG:534 +#: ../../../CHANGELOG.md:473 ../../../CHANGELOG.md:517 msgid "Cam Sweeney" msgstr "" -#: ../../../CHANGELOG:496 ../../../CHANGELOG:593 ../../../CHANGELOG:1129 -#: ../../../CHANGELOG:2357 +#: ../../../CHANGELOG.md:483 ../../../CHANGELOG.md:573 +#: ../../../CHANGELOG.md:787 ../../../CHANGELOG.md:844 +#: ../../../CHANGELOG.md:871 ../../../CHANGELOG.md:993 +#: ../../../CHANGELOG.md:1074 ../../../CHANGELOG.md:2228 msgid "jovuit" msgstr "" -#: ../../../CHANGELOG:498 +#: ../../../CHANGELOG.md:485 msgid "pullopen" msgstr "" -#: ../../../CHANGELOG:512 +#: ../../../CHANGELOG.md:498 msgid "1.2.4 (2022-04-23)" msgstr "" -#: ../../../CHANGELOG:519 +#: ../../../CHANGELOG.md:504 msgid "Hand cursor now displayed over artist and album cards" msgstr "" -#: ../../../CHANGELOG:524 +#: ../../../CHANGELOG.md:508 msgid "Fixes docs' SMTP URI configuration (#1749) (1749)" msgstr "" -#: ../../../CHANGELOG:529 +#: ../../../CHANGELOG.md:512 msgid "The documentation is now available in two versions: Develop and Stable" msgstr "" -#: ../../../CHANGELOG:558 +#: ../../../CHANGELOG.md:539 msgid "1.2.3 (2022-03-18)" msgstr "" -#: ../../../CHANGELOG:565 +#: ../../../CHANGELOG.md:545 msgid "Added support for all cover sources in the embedded player (#1697)." msgstr "" -#: ../../../CHANGELOG:571 +#: ../../../CHANGELOG.md:551 msgid "Catch ValueError on radio end (#1596)" msgstr "" -#: ../../../CHANGELOG:572 +#: ../../../CHANGELOG.md:552 msgid "Fix bug that prevents users from creating a new oauth application (#1706)" msgstr "" -#: ../../../CHANGELOG:573 +#: ../../../CHANGELOG.md:553 msgid "Fix failed track adding to playlist being silent (#1020)" msgstr "" -#: ../../../CHANGELOG:574 +#: ../../../CHANGELOG.md:554 msgid "Fix recently added radio not working has expected (#1674)" msgstr "" -#: ../../../CHANGELOG:575 +#: ../../../CHANGELOG.md:555 msgid "" "Fixed an issue where you couldn't load the details page for tracks with " "no associated album (#1703)" msgstr "" -#: ../../../CHANGELOG:576 +#: ../../../CHANGELOG.md:556 msgid "Fixed library visibility dropdown (#1384)" msgstr "" -#: ../../../CHANGELOG:577 +#: ../../../CHANGELOG.md:557 msgid "" "In playlist editor can now click outside the trashcan but inside the " "button to delete entry (#1348)" msgstr "" -#: ../../../CHANGELOG:582 +#: ../../../CHANGELOG.md:562 msgid "Baudouin Feildel" msgstr "" -#: ../../../CHANGELOG:583 +#: ../../../CHANGELOG.md:563 ../../../CHANGELOG.md:766 msgid "Christoph Pomaska" msgstr "" -#: ../../../CHANGELOG:592 +#: ../../../CHANGELOG.md:572 msgid "dnikolov" msgstr "" -#: ../../../CHANGELOG:606 ../../../CHANGELOG:664 +#: ../../../CHANGELOG.md:586 ../../../CHANGELOG.md:641 msgid "Committers" msgstr "" -#: ../../../CHANGELOG:608 +#: ../../../CHANGELOG.md:588 ../../../CHANGELOG.md:767 msgid "Ciaran Ainsworth" msgstr "" -#: ../../../CHANGELOG:613 +#: ../../../CHANGELOG.md:593 msgid "Reinhard Prechtl" msgstr "" -#: ../../../CHANGELOG:617 +#: ../../../CHANGELOG.md:595 msgid "1.2.2 (2022-02-04)" msgstr "" -#: ../../../CHANGELOG:624 +#: ../../../CHANGELOG.md:601 msgid "" "Fix an issue where the tracks tab in a library doesn't show any tracks " "(#1683)" msgstr "" -#: ../../../CHANGELOG:625 +#: ../../../CHANGELOG.md:602 msgid "Fix an issue with the embedded player not showing any content (#1675)" msgstr "" -#: ../../../CHANGELOG:626 +#: ../../../CHANGELOG.md:603 msgid "Fix broken instance description if it contains a line break #1673" msgstr "" -#: ../../../CHANGELOG:628 +#: ../../../CHANGELOG.md:605 msgid "Dependency Updates:" msgstr "" -#: ../../../CHANGELOG:630 -msgid "" -"Update dependency vue-template-compiler to 2.6.14 Update dependency vue " -"to ^2.6.14 Update dependency vuex-persistedstate to ^2.7.1 Update " -"dependency vuedraggable to ^2.24.3 Update dependency vue-lazyload to " -"^1.3.3 Update dependency vue-plyr to ^5.1.3 Update dependency vue-upload-" -"component to ^2.8.22 Update dependency vue-gettext to ^2.1.12 Update " -"dependency showdown to ^1.9.1 Update dependency js-logger to ^1.6.1 " -"Update dependency register-service-worker to ^1.7.2 Update dependency " -"howler to ^2.2.3 Update dependency fomantic-ui-css to ^2.8.8 Update " -"dependency diff to ^4.0.2 Update dependency axios-auth-refresh to ^2.2.8" +#: ../../../CHANGELOG.md:607 +msgid "Update dependency vue-template-compiler to 2.6.14" msgstr "" -#: ../../../CHANGELOG:654 +#: ../../../CHANGELOG.md:608 +msgid "Update dependency vue to ^2.6.14" +msgstr "" + +#: ../../../CHANGELOG.md:609 +msgid "Update dependency vuex-persistedstate to ^2.7.1" +msgstr "" + +#: ../../../CHANGELOG.md:610 +msgid "Update dependency vuedraggable to ^2.24.3" +msgstr "" + +#: ../../../CHANGELOG.md:611 +msgid "Update dependency vue-lazyload to ^1.3.3" +msgstr "" + +#: ../../../CHANGELOG.md:612 +msgid "Update dependency vue-plyr to ^5.1.3" +msgstr "" + +#: ../../../CHANGELOG.md:613 +msgid "Update dependency vue-upload-component to ^2.8.22" +msgstr "" + +#: ../../../CHANGELOG.md:614 +msgid "Update dependency vue-gettext to ^2.1.12" +msgstr "" + +#: ../../../CHANGELOG.md:615 +msgid "Update dependency showdown to ^1.9.1" +msgstr "" + +#: ../../../CHANGELOG.md:616 +msgid "Update dependency js-logger to ^1.6.1" +msgstr "" + +#: ../../../CHANGELOG.md:617 +msgid "Update dependency register-service-worker to ^1.7.2" +msgstr "" + +#: ../../../CHANGELOG.md:618 +msgid "Update dependency howler to ^2.2.3" +msgstr "" + +#: ../../../CHANGELOG.md:619 +msgid "Update dependency fomantic-ui-css to ^2.8.8" +msgstr "" + +#: ../../../CHANGELOG.md:620 +msgid "Update dependency diff to ^4.0.2" +msgstr "" + +#: ../../../CHANGELOG.md:621 +msgid "Update dependency axios-auth-refresh to ^2.2.8" +msgstr "" + +#: ../../../CHANGELOG.md:631 msgid "Ricardo" msgstr "" -#: ../../../CHANGELOG:669 ../../../CHANGELOG:1688 ../../../CHANGELOG:2086 +#: ../../../CHANGELOG.md:646 ../../../CHANGELOG.md:1599 +#: ../../../CHANGELOG.md:1979 msgid "Keunes" msgstr "" -#: ../../../CHANGELOG:674 +#: ../../../CHANGELOG.md:649 msgid "1.2.1 (2022-01-06)" msgstr "" -#: ../../../CHANGELOG:681 +#: ../../../CHANGELOG.md:655 msgid "Fix Pipeline for stable release builds (#1652)" msgstr "" -#: ../../../CHANGELOG:682 +#: ../../../CHANGELOG.md:656 msgid "Fix remote content page (#1655)" msgstr "" -#: ../../../CHANGELOG:686 -msgid "" -"Ciarán Ainsworth Georg Krause Jakob Schürz Mathieu Jourdan Micha " -"Gläß-Stöcker petitminion" +#: ../../../CHANGELOG.md:662 +msgid "Jakob Schürz" msgstr "" -#: ../../../CHANGELOG:697 -msgid "Committers: Dignified Silence Georg Krause JuniorJPDJ nztvar" +#: ../../../CHANGELOG.md:673 ../../../CHANGELOG.md:774 +msgid "Dignified Silence" msgstr "" -#: ../../../CHANGELOG:705 +#: ../../../CHANGELOG.md:676 +msgid "nztvar" +msgstr "" + +#: ../../../CHANGELOG.md:678 msgid "1.2.0 (2021-12-27)" msgstr "" -#: ../../../CHANGELOG:710 +#: ../../../CHANGELOG.md:682 msgid "" "Due to a bug in our CI Pipeline frontend artifacts are not available at " "https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/1.2.0/download?job=build_front" @@ -1406,31 +1543,31 @@ msgid "" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download" msgstr "" -#: ../../../CHANGELOG:714 +#: ../../../CHANGELOG.md:686 msgid "" "If you are running the All-in-One-Container since a longer time, you " "probably need to manually migrate your database information. If that's " "the case, you will get a message like this:" msgstr "" -#: ../../../CHANGELOG:716 +#: ../../../CHANGELOG.md:688 msgid "" -"`DETAIL: The data directory was initialized by PostgreSQL version 11, " +"`DETAIL: The data directory was initialized by PostgreSQL version 11, " "which is not compatible with this version 13.5.`" msgstr "" -#: ../../../CHANGELOG:718 +#: ../../../CHANGELOG.md:690 msgid "" "Make sure the Funkwhale version is set to `1.1.4` in `docker-" "compose.yml`. Now you can run this command to dump the database into a " "file:" msgstr "" -#: ../../../CHANGELOG:720 +#: ../../../CHANGELOG.md:692 msgid "`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > \"db.dump\"`" msgstr "" -#: ../../../CHANGELOG:722 +#: ../../../CHANGELOG.md:694 msgid "" "Now you can update the Funkwhale version in `docker-compose.yml` to " "`1.2.0`. Additionally you should save your `data` directory, eg by " @@ -1442,1141 +1579,1354 @@ msgid "" "That's it, enjoy!" msgstr "" -#: ../../../CHANGELOG:726 +#: ../../../CHANGELOG.md:698 msgid "Implemented awesome recently added radio (part of #1390)" msgstr "" -#: ../../../CHANGELOG:727 +#: ../../../CHANGELOG.md:699 msgid "Rework the instance about page (#1376)" msgstr "" -#: ../../../CHANGELOG:728 +#: ../../../CHANGELOG.md:700 msgid "Made changes to the track table to make it more visibly pleasing" msgstr "" -#: ../../../CHANGELOG:733 +#: ../../../CHANGELOG.md:704 msgid "Add linting for Frontend code (#1602)" msgstr "" -#: ../../../CHANGELOG:734 +#: ../../../CHANGELOG.md:705 msgid "Add xmlns:content to feed schemas fixes #1535" msgstr "" -#: ../../../CHANGELOG:735 +#: ../../../CHANGELOG.md:706 msgid "Add a Maloja plugin to submit listenings" msgstr "" -#: ../../../CHANGELOG:736 +#: ../../../CHANGELOG.md:707 msgid "Add artist cover art in subsonic API response (#1528)" msgstr "" -#: ../../../CHANGELOG:737 +#: ../../../CHANGELOG.md:708 msgid "Allow listen activities privacy level to be set public" msgstr "" -#: ../../../CHANGELOG:738 +#: ../../../CHANGELOG.md:709 msgid "" "Allow running multi-container setup on non-root user inside docker " "(!1375) (fixes #1334)" msgstr "" -#: ../../../CHANGELOG:739 +#: ../../../CHANGELOG.md:710 msgid "Change volume dynamic range from 60dB to 40dB (fixes #1544)" msgstr "" -#: ../../../CHANGELOG:740 +#: ../../../CHANGELOG.md:711 msgid "Change Start Radio to Play Radio (#1400)" msgstr "" -#: ../../../CHANGELOG:741 +#: ../../../CHANGELOG.md:712 msgid "Display toast when subsonic password is copied (#1496)" msgstr "" -#: ../../../CHANGELOG:742 +#: ../../../CHANGELOG.md:713 msgid "Expose more metadata in Subsonic's getAlbumList endpoint (#623)" msgstr "" -#: ../../../CHANGELOG:743 +#: ../../../CHANGELOG.md:714 msgid "ListenBrainz: Submit media player and submission client information" msgstr "" -#: ../../../CHANGELOG:744 +#: ../../../CHANGELOG.md:715 msgid "" "Make \"play in list\" the default when interacting with individual tracks" " (#1274)" msgstr "" -#: ../../../CHANGELOG:745 +#: ../../../CHANGELOG.md:716 msgid "" "Prevent an uncontrolled exception when uploading a file without tags, and" " prints user friendly message (1275)" msgstr "" -#: ../../../CHANGELOG:746 +#: ../../../CHANGELOG.md:717 msgid "Remove deprecated JWT Authentication (#1108) (1108)" msgstr "" -#: ../../../CHANGELOG:747 +#: ../../../CHANGELOG.md:718 msgid "Remove Raven SDK to report errors to Sentry (#1425) (1425)" msgstr "" -#: ../../../CHANGELOG:748 +#: ../../../CHANGELOG.md:719 msgid "Replace psycopg2-binary with psycopg2 (#1513)" msgstr "" -#: ../../../CHANGELOG:753 ../../../CHANGELOG:929 +#: ../../../CHANGELOG.md:723 ../../../CHANGELOG.md:892 msgid "Add worker-src to nginx header to prevent issues (#1489)" msgstr "" -#: ../../../CHANGELOG:754 +#: ../../../CHANGELOG.md:724 msgid "Enable stepless adjustment of the volume slider (!1294)" msgstr "" -#: ../../../CHANGELOG:755 +#: ../../../CHANGELOG.md:725 msgid "" "Fix an error in a Subsonic methods that return lists of numbers/strings " "like getUser" msgstr "" -#: ../../../CHANGELOG:756 +#: ../../../CHANGELOG.md:726 msgid "Fix showing too long radio descriptions (#1556)" msgstr "" -#: ../../../CHANGELOG:757 +#: ../../../CHANGELOG.md:727 msgid "" "Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN " "value for other pages (fix #1022)" msgstr "" -#: ../../../CHANGELOG:758 +#: ../../../CHANGELOG.md:728 msgid "Fix before last track starts playing when last track removed (#1485)" msgstr "" -#: ../../../CHANGELOG:759 +#: ../../../CHANGELOG.md:729 msgid "Fix delete account button is not disabled when missing password (#1591)" msgstr "" -#: ../../../CHANGELOG:760 +#: ../../../CHANGELOG.md:730 msgid "Fix omputed properties already defined in components data (#1649)" msgstr "" -#: ../../../CHANGELOG:761 +#: ../../../CHANGELOG.md:731 msgid "Fix the all in one docker image building process, related to #1503" msgstr "" -#: ../../../CHANGELOG:762 +#: ../../../CHANGELOG.md:732 msgid "Fix crash in album moderation interface when missing cover (#1474)" msgstr "" -#: ../../../CHANGELOG:763 +#: ../../../CHANGELOG.md:733 msgid "Fix subsonic scrobble not triggering plugin hook (#1416)" msgstr "" -#: ../../../CHANGELOG:764 +#: ../../../CHANGELOG.md:734 msgid "Improve formatting of RSS episode descriptions (#1405)" msgstr "" -#: ../../../CHANGELOG:765 ../../../CHANGELOG:930 +#: ../../../CHANGELOG.md:735 ../../../CHANGELOG.md:893 msgid "Only suggest typed tag once if it already exists" msgstr "" -#: ../../../CHANGELOG:766 +#: ../../../CHANGELOG.md:736 msgid "Partially fixed playing two tracks at same time (#1213)" msgstr "" -#: ../../../CHANGELOG:767 +#: ../../../CHANGELOG.md:737 msgid "Revert changes that break mobile browser playback (#1509)" msgstr "" -#: ../../../CHANGELOG:768 +#: ../../../CHANGELOG.md:738 msgid "" "Sanitize remote tracks' saving locations with slashes on their names " "(#1435)" msgstr "" -#: ../../../CHANGELOG:769 +#: ../../../CHANGELOG.md:739 msgid "Show embed option for channel tracks (#1278)" msgstr "" -#: ../../../CHANGELOG:770 +#: ../../../CHANGELOG.md:740 msgid "" "Store volume in logarithmic scale and convert when setting it to audio " "(fixes #1543)" msgstr "" -#: ../../../CHANGELOG:771 +#: ../../../CHANGELOG.md:741 msgid "" "Use global Howler volume instead of setting it separately for each track " "(fixes #1542)" msgstr "" -#: ../../../CHANGELOG:776 +#: ../../../CHANGELOG.md:745 msgid "Add email configuration to the documentation (#1481)" msgstr "" -#: ../../../CHANGELOG:777 +#: ../../../CHANGELOG.md:746 msgid "Add server uninstallation documentation (\\!1314)" msgstr "" -#: ../../../CHANGELOG:778 +#: ../../../CHANGELOG.md:747 msgid "Document location of cli env file on macOS (\\!1354)" msgstr "" -#: ../../../CHANGELOG:779 +#: ../../../CHANGELOG.md:748 msgid "Fix broken backup documentation (#1345)" msgstr "" -#: ../../../CHANGELOG:780 +#: ../../../CHANGELOG.md:749 msgid "" "Refactore installation documentation and other small documentation " "adjustments (\\!1314)" msgstr "" -#: ../../../CHANGELOG:781 +#: ../../../CHANGELOG.md:750 msgid "Add User documentation for built-in plugins" msgstr "" -#: ../../../CHANGELOG:786 +#: ../../../CHANGELOG.md:754 msgid "" "Create stable branch, master is now deprecated and will be removed in 1.3" " (#1476)" msgstr "" -#: ../../../CHANGELOG:790 -msgid "" -"Alexandra Parker Alyssa Ross appzer0 Arthur Brugière Asier Iturralde " -"Sarasola bittin Blopware Brian McMillen Christoph Pomaska Ciaran " -"Ainsworth Ciarán Ainsworth Classified Connor Hay Damian Szetela David " -"Marzal Deleted User Dignified Silence Dominik Danelski egon0 Erik " -"Präntare Georg Abenthung Georgios B Georgios Brellas Georg Krause ghose " -"greengekota heyarne ian Vatega Janek jovuit JuniorJPDJ Konstantinos G " -"manuelviens Manuel Viens Marcos Marcos Peña Martin Giger Matthew J Micha " -"Gläß-Stöcker petitminion Petitminion Philipp Wolfer Porrumentzio Quentin " -"PAGÈS Raphael Lullis Riccardo Sacchetto Romain Failliot Rubén Cabrera " -"Ryan Harg Sergio Varela SpcCw Stefano Pigozzi Thomas Tony Simoes Tony " -"Wasserka vachan-maker Virgile Robles" +#: ../../../CHANGELOG.md:758 +msgid "Alexandra Parker" msgstr "" -#: ../../../CHANGELOG:850 -msgid "" -"AMoonRabbit Agate Antoine POPINEAU Arthur Brugière Ciarán Ainsworth " -"Connor Hay Creak David Marzal Georg Krause Gerhard Beck Greg Poole " -"JuniorJPDJ Kuba Orlik Lunar Control Marcos Peña Mateusz Korzeniewski " -"Mathieu Jourdan Micha Gläß-Stöcker Philipp Wolfer Porrumentzio Thomas " -"Tony Wasserka Ville Ranki arkhi heyarne interfect jovuit mal petitminion " -"vachan-maker" +#: ../../../CHANGELOG.md:759 +msgid "Alyssa Ross" msgstr "" -#: ../../../CHANGELOG:883 -msgid "" -"Agate Arthur Brugière Ciarán Ainsworth Connor Hay David Marzal Distopico " -"Fanyx Georg Abenthung Georg Krause Janek JuniorJPDJ Kasper Seweryn Marcos" -" Peña Mathieu Jourdan Matthew J. Micha Gläß-Stöcker Philipp Wolfer Thomas" -" Tony Wasserka heyarne jovuit petitminion thanksd" +#: ../../../CHANGELOG.md:760 ../../../CHANGELOG.md:972 +#: ../../../CHANGELOG.md:1212 +msgid "appzer0" msgstr "" -#: ../../../CHANGELOG:909 +#: ../../../CHANGELOG.md:761 ../../../CHANGELOG.md:821 +#: ../../../CHANGELOG.md:852 +msgid "Arthur Brugière" +msgstr "" + +#: ../../../CHANGELOG.md:762 ../../../CHANGELOG.md:974 +msgid "Asier Iturralde Sarasola" +msgstr "" + +#: ../../../CHANGELOG.md:763 +msgid "bittin" +msgstr "" + +#: ../../../CHANGELOG.md:764 +msgid "Blopware" +msgstr "" + +#: ../../../CHANGELOG.md:765 +msgid "Brian McMillen" +msgstr "" + +#: ../../../CHANGELOG.md:769 +msgid "Classified" +msgstr "" + +#: ../../../CHANGELOG.md:770 ../../../CHANGELOG.md:823 +#: ../../../CHANGELOG.md:854 +msgid "Connor Hay" +msgstr "" + +#: ../../../CHANGELOG.md:771 +msgid "Damian Szetela" +msgstr "" + +#: ../../../CHANGELOG.md:772 ../../../CHANGELOG.md:825 +#: ../../../CHANGELOG.md:855 +msgid "David Marzal" +msgstr "" + +#: ../../../CHANGELOG.md:773 +msgid "Deleted User" +msgstr "" + +#: ../../../CHANGELOG.md:775 ../../../CHANGELOG.md:979 +msgid "Dominik Danelski" +msgstr "" + +#: ../../../CHANGELOG.md:776 +msgid "egon0" +msgstr "" + +#: ../../../CHANGELOG.md:777 +msgid "Erik Präntare" +msgstr "" + +#: ../../../CHANGELOG.md:778 ../../../CHANGELOG.md:858 +msgid "Georg Abenthung" +msgstr "" + +#: ../../../CHANGELOG.md:779 +msgid "Georgios B" +msgstr "" + +#: ../../../CHANGELOG.md:780 +msgid "Georgios Brellas" +msgstr "" + +#: ../../../CHANGELOG.md:782 ../../../CHANGELOG.md:987 +#: ../../../CHANGELOG.md:1218 +msgid "ghose" +msgstr "" + +#: ../../../CHANGELOG.md:783 +msgid "greengekota" +msgstr "" + +#: ../../../CHANGELOG.md:785 +msgid "ian Vatega" +msgstr "" + +#: ../../../CHANGELOG.md:786 ../../../CHANGELOG.md:860 +msgid "Janek" +msgstr "" + +#: ../../../CHANGELOG.md:789 +msgid "Konstantinos G" +msgstr "" + +#: ../../../CHANGELOG.md:790 +msgid "manuelviens" +msgstr "" + +#: ../../../CHANGELOG.md:791 +msgid "Manuel Viens" +msgstr "" + +#: ../../../CHANGELOG.md:794 +msgid "Martin Giger" +msgstr "" + +#: ../../../CHANGELOG.md:795 +msgid "Matthew J" +msgstr "" + +#: ../../../CHANGELOG.md:800 ../../../CHANGELOG.md:837 +#: ../../../CHANGELOG.md:1000 +msgid "Porrumentzio" +msgstr "" + +#: ../../../CHANGELOG.md:801 ../../../CHANGELOG.md:1223 +#: ../../../CHANGELOG.md:1610 ../../../CHANGELOG.md:1680 +msgid "Quentin PAGÈS" +msgstr "" + +#: ../../../CHANGELOG.md:802 +msgid "Raphael Lullis" +msgstr "" + +#: ../../../CHANGELOG.md:803 +msgid "Riccardo Sacchetto" +msgstr "" + +#: ../../../CHANGELOG.md:804 ../../../CHANGELOG.md:1988 +msgid "Romain Failliot" +msgstr "" + +#: ../../../CHANGELOG.md:805 ../../../CHANGELOG.md:1003 +msgid "Rubén Cabrera" +msgstr "" + +#: ../../../CHANGELOG.md:806 +msgid "Ryan Harg" +msgstr "" + +#: ../../../CHANGELOG.md:807 +msgid "Sergio Varela" +msgstr "" + +#: ../../../CHANGELOG.md:808 ../../../CHANGELOG.md:1006 +#: ../../../CHANGELOG.md:1226 ../../../CHANGELOG.md:1614 +#: ../../../CHANGELOG.md:1989 +msgid "SpcCw" +msgstr "" + +#: ../../../CHANGELOG.md:809 ../../../CHANGELOG.md:1227 +msgid "Stefano Pigozzi" +msgstr "" + +#: ../../../CHANGELOG.md:810 ../../../CHANGELOG.md:838 +#: ../../../CHANGELOG.md:868 +msgid "Thomas" +msgstr "" + +#: ../../../CHANGELOG.md:811 +msgid "Tony Simoes" +msgstr "" + +#: ../../../CHANGELOG.md:813 ../../../CHANGELOG.md:847 +msgid "vachan-maker" +msgstr "" + +#: ../../../CHANGELOG.md:814 +msgid "Virgile Robles" +msgstr "" + +#: ../../../CHANGELOG.md:820 +msgid "Antoine POPINEAU" +msgstr "" + +#: ../../../CHANGELOG.md:824 ../../../CHANGELOG.md:1310 +#: ../../../CHANGELOG.md:1587 ../../../CHANGELOG.md:2029 +msgid "Creak" +msgstr "" + +#: ../../../CHANGELOG.md:827 +msgid "Gerhard Beck" +msgstr "" + +#: ../../../CHANGELOG.md:828 +msgid "Greg Poole" +msgstr "" + +#: ../../../CHANGELOG.md:830 ../../../CHANGELOG.md:1101 +msgid "Kuba Orlik" +msgstr "" + +#: ../../../CHANGELOG.md:831 +msgid "Lunar Control" +msgstr "" + +#: ../../../CHANGELOG.md:833 +msgid "Mateusz Korzeniewski" +msgstr "" + +#: ../../../CHANGELOG.md:840 +msgid "Ville Ranki" +msgstr "" + +#: ../../../CHANGELOG.md:841 +msgid "arkhi" +msgstr "" + +#: ../../../CHANGELOG.md:843 ../../../CHANGELOG.md:990 +#: ../../../CHANGELOG.md:1073 ../../../CHANGELOG.md:2225 +msgid "interfect" +msgstr "" + +#: ../../../CHANGELOG.md:845 +msgid "mal" +msgstr "" + +#: ../../../CHANGELOG.md:856 +msgid "Distopico" +msgstr "" + +#: ../../../CHANGELOG.md:857 +msgid "Fanyx" +msgstr "" + +#: ../../../CHANGELOG.md:865 +msgid "Matthew J." +msgstr "" + +#: ../../../CHANGELOG.md:873 +msgid "thanksd" +msgstr "" + +#: ../../../CHANGELOG.md:875 msgid "1.1.4 (2021-08-02)" msgstr "" -#: ../../../CHANGELOG:914 +#: ../../../CHANGELOG.md:879 msgid "" "Pinned version of asgiref to avoid trouble with latest release. For " "further information, see #1516" msgstr "" -#: ../../../CHANGELOG:917 +#: ../../../CHANGELOG.md:881 msgid "1.1.3 (2021-08-02)" msgstr "" -#: ../../../CHANGELOG:924 +#: ../../../CHANGELOG.md:887 msgid "Test better tagging of Docker Images (#1505)" msgstr "" -#: ../../../CHANGELOG:928 +#: ../../../CHANGELOG.md:891 msgid "" "Fix the scrobbler plugin submitting literal \"None\" as MusicBrainz ID " "(#1498)" msgstr "" -#: ../../../CHANGELOG:931 +#: ../../../CHANGELOG.md:894 msgid "Implement access control on the moderation views (#1494)" msgstr "" -#: ../../../CHANGELOG:932 +#: ../../../CHANGELOG.md:895 msgid "Prevent open redirect on login (#1492)" msgstr "" -#: ../../../CHANGELOG:936 +#: ../../../CHANGELOG.md:897 msgid "1.1.2 (2021-05-19)" msgstr "" -#: ../../../CHANGELOG:943 +#: ../../../CHANGELOG.md:903 msgid "Added modal to prompt users to log in when subscribing to channels (#1296)" msgstr "" -#: ../../../CHANGELOG:948 +#: ../../../CHANGELOG.md:907 msgid "Added missing is_playable serializer for the tracks endpoint." msgstr "" -#: ../../../CHANGELOG:949 +#: ../../../CHANGELOG.md:908 msgid "" "Fixed minor graphical bug where loaders would appear white in dark theme " "(#1442)" msgstr "" -#: ../../../CHANGELOG:950 +#: ../../../CHANGELOG.md:909 msgid "Fixed systemd unit for funkwhale-worker (#1160)" msgstr "" -#: ../../../CHANGELOG:951 +#: ../../../CHANGELOG.md:910 msgid "Several minor fixes for the Frontend" msgstr "" -#: ../../../CHANGELOG:955 +#: ../../../CHANGELOG.md:912 msgid "1.1.1 (2021-04-13)" msgstr "" -#: ../../../CHANGELOG:962 +#: ../../../CHANGELOG.md:918 msgid "Improve UI consistency in artist tracks (#1286)" msgstr "" -#: ../../../CHANGELOG:963 +#: ../../../CHANGELOG.md:919 msgid "Adds year to album's card and album's base UI" msgstr "" -#: ../../../CHANGELOG:967 +#: ../../../CHANGELOG.md:923 msgid "Fix playback issues when pausing close the the end of a track (#1324)" msgstr "" -#: ../../../CHANGELOG:968 +#: ../../../CHANGELOG.md:924 msgid "" "Fix tracks playing in the background without the ability to control them " "(#1213) (#1387)" msgstr "" -#: ../../../CHANGELOG:969 +#: ../../../CHANGELOG.md:925 msgid "Fixed track playback indicator to reset on queue end (#1380)" msgstr "" -#: ../../../CHANGELOG:970 +#: ../../../CHANGELOG.md:926 msgid "" "Frontend build tooling is less dependent on `npm` or `yarn` being used " "(!1285)" msgstr "" -#: ../../../CHANGELOG:971 +#: ../../../CHANGELOG.md:927 msgid "Fixed a small discrepancy to the subsonic api 1374" msgstr "" -#: ../../../CHANGELOG:975 +#: ../../../CHANGELOG.md:929 msgid "1.1 (2021-03-10)" msgstr "" -#: ../../../CHANGELOG:982 ../../../CHANGELOG:1082 +#: ../../../CHANGELOG.md:935 ../../../CHANGELOG.md:1028 msgid "Add number of tracks and discs of an album to API (#1238)" msgstr "" -#: ../../../CHANGELOG:983 ../../../CHANGELOG:1083 +#: ../../../CHANGELOG.md:936 ../../../CHANGELOG.md:1029 msgid "Add spacing after \"Play all\" button in playlist view (!1271)" msgstr "" -#: ../../../CHANGELOG:984 ../../../CHANGELOG:1084 +#: ../../../CHANGELOG.md:937 ../../../CHANGELOG.md:1030 msgid "Added a ListenBrainz plugin to submit listenings" msgstr "" -#: ../../../CHANGELOG:985 ../../../CHANGELOG:1085 +#: ../../../CHANGELOG.md:938 ../../../CHANGELOG.md:1031 msgid "" "Added ability to choose fediverse addresses from channel subscription " "page/podcast screen (#1294)" msgstr "" -#: ../../../CHANGELOG:986 ../../../CHANGELOG:1086 +#: ../../../CHANGELOG.md:939 ../../../CHANGELOG.md:1032 msgid "" "Added new search functions to allow users to more easily search for " "podcasts in the UI." msgstr "" -#: ../../../CHANGELOG:987 ../../../CHANGELOG:1087 +#: ../../../CHANGELOG.md:940 ../../../CHANGELOG.md:1033 msgid "Added padding to volume slider to ease mouse control (#1241)" msgstr "" -#: ../../../CHANGELOG:988 ../../../CHANGELOG:1088 +#: ../../../CHANGELOG.md:941 ../../../CHANGELOG.md:1034 msgid "Logarithmic scale for volume slider (#1222)" msgstr "" -#: ../../../CHANGELOG:989 ../../../CHANGELOG:1089 +#: ../../../CHANGELOG.md:942 ../../../CHANGELOG.md:1035 msgid "More user-friendly subsonic tokens (#1269)" msgstr "" -#: ../../../CHANGELOG:990 ../../../CHANGELOG:1090 +#: ../../../CHANGELOG.md:943 ../../../CHANGELOG.md:1036 msgid "Remove manual entry of Import Reference on front-end import (#1284)" msgstr "" -#: ../../../CHANGELOG:991 ../../../CHANGELOG:1092 +#: ../../../CHANGELOG.md:944 ../../../CHANGELOG.md:1038 msgid "Support AIFF file format (#1243)" msgstr "" -#: ../../../CHANGELOG:996 ../../../CHANGELOG:1097 +#: ../../../CHANGELOG.md:948 ../../../CHANGELOG.md:1042 msgid "\"Add check for empty/null covers (#1281)\"" msgstr "" -#: ../../../CHANGELOG:997 ../../../CHANGELOG:1098 +#: ../../../CHANGELOG.md:949 ../../../CHANGELOG.md:1043 msgid "" "Added an album filter to fix problem where channel entries would show up " "in the wrong series (#1282)" msgstr "" -#: ../../../CHANGELOG:998 ../../../CHANGELOG:1099 +#: ../../../CHANGELOG.md:950 ../../../CHANGELOG.md:1044 msgid "Avoid broken Faker version (#1323)" msgstr "" -#: ../../../CHANGELOG:999 ../../../CHANGELOG:1100 +#: ../../../CHANGELOG.md:951 ../../../CHANGELOG.md:1045 msgid "" "Changed audio format detection to happen via sniffing and not file " "extensions (#1274)" msgstr "" -#: ../../../CHANGELOG:1000 ../../../CHANGELOG:1101 +#: ../../../CHANGELOG.md:952 ../../../CHANGELOG.md:1046 msgid "" "Changed default behaviour of channel entries to use channel artwork if no" " entry artwork available (#1289)" msgstr "" -#: ../../../CHANGELOG:1001 ../../../CHANGELOG:1102 +#: ../../../CHANGELOG.md:953 ../../../CHANGELOG.md:1047 msgid "Fix delete library modal closing immediately (#1272)" msgstr "" -#: ../../../CHANGELOG:1002 ../../../CHANGELOG:1103 +#: ../../../CHANGELOG.md:954 ../../../CHANGELOG.md:1048 msgid "Fix public shared remote library radio button being disabled (#1292)" msgstr "" -#: ../../../CHANGELOG:1003 ../../../CHANGELOG:1104 +#: ../../../CHANGELOG.md:955 ../../../CHANGELOG.md:1049 msgid "Fixed an issue that prevented disabling plugins" msgstr "" -#: ../../../CHANGELOG:1004 ../../../CHANGELOG:1105 +#: ../../../CHANGELOG.md:956 ../../../CHANGELOG.md:1050 msgid "" "Fixed an issue where channel albums don't show up in the album search " "(#1300)" msgstr "" -#: ../../../CHANGELOG:1005 ../../../CHANGELOG:1106 +#: ../../../CHANGELOG.md:957 ../../../CHANGELOG.md:1051 msgid "" "Fixed an issue where modals would prevent users being able to interact " "with channels (#1295)" msgstr "" -#: ../../../CHANGELOG:1006 ../../../CHANGELOG:1107 +#: ../../../CHANGELOG.md:958 ../../../CHANGELOG.md:1052 msgid "Update MediaSession metadata for initially loaded track (#1252)" msgstr "" -#: ../../../CHANGELOG:1007 ../../../CHANGELOG:1108 +#: ../../../CHANGELOG.md:959 ../../../CHANGELOG.md:1053 msgid "Update playback position slider also when track is paused (#1266)" msgstr "" -#: ../../../CHANGELOG:1008 ../../../CHANGELOG:1068 +#: ../../../CHANGELOG.md:960 ../../../CHANGELOG.md:1017 msgid "" "Fixed follows from Pleroma with custom Emoji as Tag by ignoring not " "supported tag types #1342" msgstr "" -#: ../../../CHANGELOG:1009 ../../../CHANGELOG:1069 +#: ../../../CHANGELOG.md:961 ../../../CHANGELOG.md:1018 msgid "Update pleroma JSON-LD Schema (#1341)" msgstr "" -#: ../../../CHANGELOG:1010 ../../../CHANGELOG:1071 +#: ../../../CHANGELOG.md:962 ../../../CHANGELOG.md:1020 msgid "Pin twisted version to 20.3.0" msgstr "" -#: ../../../CHANGELOG:1012 ../../../CHANGELOG:1110 ../../../CHANGELOG:1154 -#: ../../../CHANGELOG:1330 +#: ../../../CHANGELOG.md:964 ../../../CHANGELOG.md:1055 +#: ../../../CHANGELOG.md:1096 ../../../CHANGELOG.md:1255 msgid "Contributors to this release (development, documentation, reviews):" msgstr "" -#: ../../../CHANGELOG:1014 -msgid "" -"Adam Novak Agate alemairebe Alicia Blasco Leon anonymous Amaranthe " -"appzer0 Arne Asier Iturralde Sarasola Christian Paul Ciarán Ainsworth " -"Daniel David Dominik Danelski Eorn le goéland Eleos Erik Duxstad Esteban " -"Fred Uggla Freyja Wildes Georg Krause ghose hellekin heyarne interfect " -"Jess Jing Johannes H. jovuit marzzzello Meliurwen Mehdi Nitai Bezerra da " -"Silva Philipp Wolfer Pierre Couy Porrumentzio Reg Robert Kaye Rubén " -"Cabrera Silver Fox Snack Capt SpcCw Strom Lin vicdorke x" +#: ../../../CHANGELOG.md:966 ../../../CHANGELOG.md:1065 +msgid "Adam Novak" msgstr "" -#: ../../../CHANGELOG:1061 +#: ../../../CHANGELOG.md:968 +msgid "alemairebe" +msgstr "" + +#: ../../../CHANGELOG.md:969 +msgid "Alicia Blasco Leon" +msgstr "" + +#: ../../../CHANGELOG.md:970 ../../../CHANGELOG.md:1211 +msgid "anonymous" +msgstr "" + +#: ../../../CHANGELOG.md:971 ../../../CHANGELOG.md:1061 +#: ../../../CHANGELOG.md:1968 +msgid "Amaranthe" +msgstr "" + +#: ../../../CHANGELOG.md:973 ../../../CHANGELOG.md:1213 +msgid "Arne" +msgstr "" + +#: ../../../CHANGELOG.md:975 ../../../CHANGELOG.md:1067 +msgid "Christian Paul" +msgstr "" + +#: ../../../CHANGELOG.md:977 +msgid "Daniel" +msgstr "" + +#: ../../../CHANGELOG.md:978 +msgid "David" +msgstr "" + +#: ../../../CHANGELOG.md:980 +msgid "Eorn le goéland" +msgstr "" + +#: ../../../CHANGELOG.md:981 ../../../CHANGELOG.md:1062 +msgid "Eleos" +msgstr "" + +#: ../../../CHANGELOG.md:982 ../../../CHANGELOG.md:1069 +msgid "Erik Duxstad" +msgstr "" + +#: ../../../CHANGELOG.md:983 ../../../CHANGELOG.md:1059 +#: ../../../CHANGELOG.md:1676 ../../../CHANGELOG.md:1972 +#: ../../../CHANGELOG.md:2032 +msgid "Esteban" +msgstr "" + +#: ../../../CHANGELOG.md:984 ../../../CHANGELOG.md:1070 +msgid "Fred Uggla" +msgstr "" + +#: ../../../CHANGELOG.md:985 ../../../CHANGELOG.md:1060 +#: ../../../CHANGELOG.md:1974 ../../../CHANGELOG.md:2033 +msgid "Freyja Wildes" +msgstr "" + +#: ../../../CHANGELOG.md:988 ../../../CHANGELOG.md:1058 +#: ../../../CHANGELOG.md:1975 ../../../CHANGELOG.md:2034 +msgid "hellekin" +msgstr "" + +#: ../../../CHANGELOG.md:991 +msgid "Jess Jing" +msgstr "" + +#: ../../../CHANGELOG.md:992 ../../../CHANGELOG.md:1063 +#: ../../../CHANGELOG.md:1677 ../../../CHANGELOG.md:1978 +#: ../../../CHANGELOG.md:2035 +msgid "Johannes H." +msgstr "" + +#: ../../../CHANGELOG.md:994 ../../../CHANGELOG.md:1601 +msgid "marzzzello" +msgstr "" + +#: ../../../CHANGELOG.md:996 ../../../CHANGELOG.md:1064 +#: ../../../CHANGELOG.md:1982 ../../../CHANGELOG.md:2036 +msgid "Mehdi" +msgstr "" + +#: ../../../CHANGELOG.md:997 ../../../CHANGELOG.md:1075 +msgid "Nitai Bezerra da Silva" +msgstr "" + +#: ../../../CHANGELOG.md:999 ../../../CHANGELOG.md:1077 +msgid "Pierre Couy" +msgstr "" + +#: ../../../CHANGELOG.md:1001 ../../../CHANGELOG.md:1057 +#: ../../../CHANGELOG.md:1986 ../../../CHANGELOG.md:2037 +msgid "Reg" +msgstr "" + +#: ../../../CHANGELOG.md:1002 ../../../CHANGELOG.md:1078 +msgid "Robert Kaye" +msgstr "" + +#: ../../../CHANGELOG.md:1004 +msgid "Silver Fox" +msgstr "" + +#: ../../../CHANGELOG.md:1005 +msgid "Snack Capt" +msgstr "" + +#: ../../../CHANGELOG.md:1007 ../../../CHANGELOG.md:1079 +msgid "Strom Lin" +msgstr "" + +#: ../../../CHANGELOG.md:1008 ../../../CHANGELOG.md:1230 +msgid "vicdorke" +msgstr "" + +#: ../../../CHANGELOG.md:1009 +msgid "x" +msgstr "" + +#: ../../../CHANGELOG.md:1011 msgid "1.1-rc2 (2021-03-01)" msgstr "" -#: ../../../CHANGELOG:1070 +#: ../../../CHANGELOG.md:1019 msgid "" "Revert fork replacement of http-signature since official package breaks " "federation" msgstr "" -#: ../../../CHANGELOG:1075 +#: ../../../CHANGELOG.md:1022 msgid "1.1-rc1 (2021-02-24)" msgstr "" -#: ../../../CHANGELOG:1091 +#: ../../../CHANGELOG.md:1037 msgid "Replaced forked http-signature dependency with official package (#876)" msgstr "" -#: ../../../CHANGELOG:1112 ../../../CHANGELOG:2093 ../../../CHANGELOG:2149 -msgid "Reg" -msgstr "" - -#: ../../../CHANGELOG:1113 ../../../CHANGELOG:2082 ../../../CHANGELOG:2146 -msgid "hellekin" -msgstr "" - -#: ../../../CHANGELOG:1114 ../../../CHANGELOG:1771 ../../../CHANGELOG:2079 -#: ../../../CHANGELOG:2144 -msgid "Esteban" -msgstr "" - -#: ../../../CHANGELOG:1115 ../../../CHANGELOG:2081 ../../../CHANGELOG:2145 -msgid "Freyja Wildes" -msgstr "" - -#: ../../../CHANGELOG:1116 ../../../CHANGELOG:2075 -msgid "Amaranthe" -msgstr "" - -#: ../../../CHANGELOG:1117 -msgid "Eleos" -msgstr "" - -#: ../../../CHANGELOG:1118 ../../../CHANGELOG:1772 ../../../CHANGELOG:2085 -#: ../../../CHANGELOG:2147 -msgid "Johannes H." -msgstr "" - -#: ../../../CHANGELOG:1119 ../../../CHANGELOG:2089 ../../../CHANGELOG:2148 -msgid "Mehdi" -msgstr "" - -#: ../../../CHANGELOG:1120 -msgid "Adam Novak" -msgstr "" - -#: ../../../CHANGELOG:1122 -msgid "Christian Paul" -msgstr "" - -#: ../../../CHANGELOG:1124 -msgid "Erik Duxstad" -msgstr "" - -#: ../../../CHANGELOG:1125 -msgid "Fred Uggla" -msgstr "" - -#: ../../../CHANGELOG:1128 ../../../CHANGELOG:2354 -msgid "interfect" -msgstr "" - -#: ../../../CHANGELOG:1130 -msgid "Nitai Bezerra da Silva" -msgstr "" - -#: ../../../CHANGELOG:1132 -msgid "Pierre Couy" -msgstr "" - -#: ../../../CHANGELOG:1133 -msgid "Robert Kaye" -msgstr "" - -#: ../../../CHANGELOG:1134 -msgid "Strom Lin" -msgstr "" - -#: ../../../CHANGELOG:1137 +#: ../../../CHANGELOG.md:1081 msgid "1.0.1 (2020-10-31)" msgstr "" -#: ../../../CHANGELOG:1144 +#: ../../../CHANGELOG.md:1087 msgid "Added controls to play volume of an album (#1226)" msgstr "" -#: ../../../CHANGELOG:1145 +#: ../../../CHANGELOG.md:1088 msgid "Allow genre tags to be updated when rescanning files in-place (#1246)" msgstr "" -#: ../../../CHANGELOG:1150 +#: ../../../CHANGELOG.md:1092 msgid "Fixed broken install because of upgraded dependencies" msgstr "" -#: ../../../CHANGELOG:1151 +#: ../../../CHANGELOG.md:1093 msgid "Fixed duplication of discs for multi-disc albums in album views (#1228)" msgstr "" -#: ../../../CHANGELOG:1152 +#: ../../../CHANGELOG.md:1094 msgid "Make the generated RSS feed more conformant with w3c specification (#1250)" msgstr "" -#: ../../../CHANGELOG:1157 +#: ../../../CHANGELOG.md:1099 msgid "Cédric Schieli" msgstr "" -#: ../../../CHANGELOG:1159 -msgid "Kuba Orlik" -msgstr "" - -#: ../../../CHANGELOG:1162 +#: ../../../CHANGELOG.md:1103 msgid "1.0 (2020-09-09)" msgstr "" -#: ../../../CHANGELOG:1169 +#: ../../../CHANGELOG.md:1107 msgid "Dropped python 3.5 support [manual action required, non-docker only]" msgstr "" -#: ../../../CHANGELOG:1171 +#: ../../../CHANGELOG.md:1109 msgid "" "With Funkwhale 1.0, we're dropping support for Python 3.5. Before " -"upgrading, ensure ``python3 --version`` returns ``3.6`` or higher." +"upgrading, ensure `python3 --version` returns `3.6` or higher." msgstr "" -#: ../../../CHANGELOG:1174 -msgid "If it returns ``3.6`` or higher, you have nothing to do." +#: ../../../CHANGELOG.md:1112 +msgid "If it returns `3.6` or higher, you have nothing to do." msgstr "" -#: ../../../CHANGELOG:1176 +#: ../../../CHANGELOG.md:1114 msgid "" -"If it returns ``3.5``, you will need to upgrade your Python version/Host," -" then recreate your virtual environment::" +"If it returns `3.5`, you will need to upgrade your Python version/Host, " +"then recreate your virtual environment:" msgstr "" -#: ../../../CHANGELOG:1183 +#: ../../../CHANGELOG.md:1121 msgid "Increased quality of JPEG thumbnails [manual action required]" msgstr "" -#: ../../../CHANGELOG:1185 +#: ../../../CHANGELOG.md:1123 msgid "" "Default quality for JPEG thumbnails was increased from 70 to 95, as 70 " "was producing visible artifacts in resized images." msgstr "" -#: ../../../CHANGELOG:1187 +#: ../../../CHANGELOG.md:1125 msgid "" "Because of this change, existing thumbnails will not load, and you will " "need to:" msgstr "" -#: ../../../CHANGELOG:1189 -msgid "delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory" +#: ../../../CHANGELOG.md:1127 +msgid "delete the `__sized__` directory in your `MEDIA_ROOT` directory" msgstr "" -#: ../../../CHANGELOG:1190 +#: ../../../CHANGELOG.md:1128 msgid "" -"run ``python manage.py fw media generate-thumbnails`` to regenerate " +"run `python manage.py fw media generate-thumbnails` to regenerate " "thumbnails with the enhanced quality" msgstr "" -#: ../../../CHANGELOG:1192 +#: ../../../CHANGELOG.md:1130 msgid "" "If you don't want to regenerate thumbnails, you can keep the old ones by " -"adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70`` to your .env file." +"adding `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your .env file." msgstr "" -#: ../../../CHANGELOG:1195 ../../../CHANGELOG:1375 -msgid "Small API breaking change in ``/api/v1/libraries``" +#: ../../../CHANGELOG.md:1132 ../../../CHANGELOG.md:1294 +msgid "Small API breaking change in `/api/v1/libraries`" msgstr "" -#: ../../../CHANGELOG:1197 ../../../CHANGELOG:1377 +#: ../../../CHANGELOG.md:1134 ../../../CHANGELOG.md:1296 msgid "" "To allow easier crawling of public libraries on a pod,we had to make a " -"slight breaking change to the behaviour of ``GET /api/v1/libraries``." +"slight breaking change to the behaviour of `GET /api/v1/libraries`." msgstr "" -#: ../../../CHANGELOG:1200 ../../../CHANGELOG:1380 +#: ../../../CHANGELOG.md:1137 ../../../CHANGELOG.md:1299 msgid "Before, it returned only libraries owned by the current user." msgstr "" -#: ../../../CHANGELOG:1202 ../../../CHANGELOG:1382 +#: ../../../CHANGELOG.md:1139 ../../../CHANGELOG.md:1301 msgid "" "Now, it returns all the accessible libraries (including ones from other " "users and pods)." msgstr "" -#: ../../../CHANGELOG:1204 ../../../CHANGELOG:1384 +#: ../../../CHANGELOG.md:1141 ../../../CHANGELOG.md:1303 msgid "" "If you are consuming the API via a third-party client and need to " -"retrieve your libraries, use the ``scope`` parameter, like this: ``GET " -"/api/v1/libraries?scope=me``" +"retrieve your libraries, use the `scope` parameter, like this: `GET " +"/api/v1/libraries?scope=me`" msgstr "" -#: ../../../CHANGELOG:1208 -msgid "API breaking change in ``/api/v1/albums``" +#: ../../../CHANGELOG.md:1144 +msgid "API breaking change in `/api/v1/albums`" msgstr "" -#: ../../../CHANGELOG:1210 +#: ../../../CHANGELOG.md:1146 msgid "" -"To increase performance, querying ``/api/v1/albums`` doesn't return album" -" tracks anymore. This caused some performance issues, especially as some " +"To increase performance, querying `/api/v1/albums` doesn't return album " +"tracks anymore. This caused some performance issues, especially as some " "albums and series have dozens or even hundreds of tracks." msgstr "" -#: ../../../CHANGELOG:1213 +#: ../../../CHANGELOG.md:1149 msgid "" "If you want to retrieve tracks for an album, you can query " -"``/api/v1/tracks/?album=``." +"`/api/v1/tracks/?album=`." msgstr "" -#: ../../../CHANGELOG:1216 +#: ../../../CHANGELOG.md:1151 msgid "JWT deprecation" msgstr "" -#: ../../../CHANGELOG:1218 +#: ../../../CHANGELOG.md:1153 msgid "" "API Authentication using JWT is deprecated and will be removed in " "Funkwhale 1.0. Please use OAuth or application tokens and refer to our " "API documentation at https://docs.funkwhale.audio/swagger/ for guidance." msgstr "" -#: ../../../CHANGELOG:1222 ../../../CHANGELOG:1583 +#: ../../../CHANGELOG.md:1156 ../../../CHANGELOG.md:1494 msgid "Full list of changes" msgstr "" -#: ../../../CHANGELOG:1226 +#: ../../../CHANGELOG.md:1160 msgid "Allow users to hide compilation artists on the artist search page (#1053)" msgstr "" -#: ../../../CHANGELOG:1227 +#: ../../../CHANGELOG.md:1161 msgid "Can now launch server import from the UI (#1105)" msgstr "" -#: ../../../CHANGELOG:1228 +#: ../../../CHANGELOG.md:1162 msgid "Dedicated, advanced search page (#370)" msgstr "" -#: ../../../CHANGELOG:1229 +#: ../../../CHANGELOG.md:1163 msgid "Persist theme and language settings across sessions (#996)" msgstr "" -#: ../../../CHANGELOG:1234 +#: ../../../CHANGELOG.md:1167 msgid "Add support for unauthenticated users hitting the logout page" msgstr "" -#: ../../../CHANGELOG:1235 +#: ../../../CHANGELOG.md:1168 msgid "Added support for Licence Art Libre (#1088)" msgstr "" -#: ../../../CHANGELOG:1236 +#: ../../../CHANGELOG.md:1169 msgid "Broadcast/handle rejected follows (#858)" msgstr "" -#: ../../../CHANGELOG:1237 +#: ../../../CHANGELOG.md:1170 msgid "" "Confirm email without requiring the user to validate the form manually " "(#407)" msgstr "" -#: ../../../CHANGELOG:1238 +#: ../../../CHANGELOG.md:1171 msgid "Display channel and track downloads count (#1178)" msgstr "" -#: ../../../CHANGELOG:1239 +#: ../../../CHANGELOG.md:1172 msgid "Do not include tracks in album API representation (#1102)" msgstr "" -#: ../../../CHANGELOG:1240 +#: ../../../CHANGELOG.md:1173 msgid "" "Dropped python 3.5 support. Python 3.6 is the minimum required version " "(#1099)" msgstr "" -#: ../../../CHANGELOG:1241 +#: ../../../CHANGELOG.md:1174 msgid "Improved keyboard accessibility (#1125)" msgstr "" -#: ../../../CHANGELOG:1242 +#: ../../../CHANGELOG.md:1175 msgid "Improved naming of pages for accessibility (#1127)" msgstr "" -#: ../../../CHANGELOG:1243 +#: ../../../CHANGELOG.md:1176 msgid "Improved shuffle behaviour (#1190)" msgstr "" -#: ../../../CHANGELOG:1244 +#: ../../../CHANGELOG.md:1177 msgid "Increased quality of JPEG thumbnails" msgstr "" -#: ../../../CHANGELOG:1245 +#: ../../../CHANGELOG.md:1178 msgid "Lock focus in modals to improve accessibility (#1128)" msgstr "" -#: ../../../CHANGELOG:1246 +#: ../../../CHANGELOG.md:1179 msgid "" "More consistent search UX on /albums, /artists, /radios and /playlists " "(#1131)" msgstr "" -#: ../../../CHANGELOG:1247 +#: ../../../CHANGELOG.md:1180 msgid "Play button now replace current queue instead of appending to it (#1083)" msgstr "" -#: ../../../CHANGELOG:1248 +#: ../../../CHANGELOG.md:1181 msgid "Set proper lang attribute on HTML document (#1130)" msgstr "" -#: ../../../CHANGELOG:1249 +#: ../../../CHANGELOG.md:1182 msgid "Use semantic headers for accessibility (#1121)" msgstr "" -#: ../../../CHANGELOG:1250 +#: ../../../CHANGELOG.md:1183 msgid "Users can now update their email address (#292)" msgstr "" -#: ../../../CHANGELOG:1251 +#: ../../../CHANGELOG.md:1184 msgid "" "[plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and " "secret are provided" msgstr "" -#: ../../../CHANGELOG:1252 +#: ../../../CHANGELOG.md:1185 msgid "Added a new, large thumbnail size for cover images (#1205" msgstr "" -#: ../../../CHANGELOG:1253 +#: ../../../CHANGELOG.md:1186 msgid "" "Enforce authentication when viewing remote channels, profiles and " "libraries (#1210)" msgstr "" -#: ../../../CHANGELOG:1259 +#: ../../../CHANGELOG.md:1190 msgid "Fix broken media support detection (#1180)" msgstr "" -#: ../../../CHANGELOG:1260 +#: ../../../CHANGELOG.md:1191 msgid "Fix layout issue with playbar on landscape tablets (#1144)" msgstr "" -#: ../../../CHANGELOG:1261 +#: ../../../CHANGELOG.md:1192 msgid "Fix random radio so that podcast content is not picked up (#1140)" msgstr "" -#: ../../../CHANGELOG:1262 +#: ../../../CHANGELOG.md:1193 msgid "" "Fixed an issue with search pages where results would not appear after " "navigating to another page" msgstr "" -#: ../../../CHANGELOG:1263 +#: ../../../CHANGELOG.md:1194 msgid "Fixed crash with negative track position in file tags (#1193)" msgstr "" -#: ../../../CHANGELOG:1264 +#: ../../../CHANGELOG.md:1195 msgid "Handle access errors scanning directories when importing files" msgstr "" -#: ../../../CHANGELOG:1265 ../../../CHANGELOG:1328 +#: ../../../CHANGELOG.md:1196 ../../../CHANGELOG.md:1253 msgid "" "Make channel card updated times more humanly readable, add " "internationalization (#1089)" msgstr "" -#: ../../../CHANGELOG:1266 +#: ../../../CHANGELOG.md:1197 msgid "" "Ensure search page reloads if another search is submitted in the sidebar " "(#1197)" msgstr "" -#: ../../../CHANGELOG:1267 +#: ../../../CHANGELOG.md:1198 msgid "" "Fixed \"scope=subscribed\" on albums, artists, uploads and libraries API " "(#1217)" msgstr "" -#: ../../../CHANGELOG:1268 +#: ../../../CHANGELOG.md:1199 msgid "Fixed broken federation with pods using allow-listing (#1999)" msgstr "" -#: ../../../CHANGELOG:1269 +#: ../../../CHANGELOG.md:1200 msgid "Fixed broken search when using (, \" or & chars (#1196)" msgstr "" -#: ../../../CHANGELOG:1270 +#: ../../../CHANGELOG.md:1201 msgid "Fixed domains table hidden controls when no domains are found (#1198)" msgstr "" -#: ../../../CHANGELOG:1275 +#: ../../../CHANGELOG.md:1205 msgid "Simplify Docker mono-container installation and upgrade documentation" msgstr "" -#: ../../../CHANGELOG:1278 ../../../CHANGELOG:1668 +#: ../../../CHANGELOG.md:1207 ../../../CHANGELOG.md:1579 msgid "" "Contributors to this release (translation, development, documentation, " "reviews, design, testing, third-party projects):" msgstr "" -#: ../../../CHANGELOG:1281 +#: ../../../CHANGELOG.md:1210 msgid "Andy Craze" msgstr "" -#: ../../../CHANGELOG:1282 -msgid "anonymous" -msgstr "" - -#: ../../../CHANGELOG:1283 -msgid "appzer0" -msgstr "" - -#: ../../../CHANGELOG:1284 -msgid "Arne" -msgstr "" - -#: ../../../CHANGELOG:1286 ../../../CHANGELOG:1677 ../../../CHANGELOG:1769 -#: ../../../CHANGELOG:2349 +#: ../../../CHANGELOG.md:1215 ../../../CHANGELOG.md:1588 +#: ../../../CHANGELOG.md:1674 ../../../CHANGELOG.md:2220 msgid "Daniele Lira Mereb" msgstr "" -#: ../../../CHANGELOG:1287 +#: ../../../CHANGELOG.md:1216 msgid "dulz" msgstr "" -#: ../../../CHANGELOG:1288 ../../../CHANGELOG:1681 ../../../CHANGELOG:2080 +#: ../../../CHANGELOG.md:1217 ../../../CHANGELOG.md:1592 +#: ../../../CHANGELOG.md:1973 msgid "Francesc Galí" msgstr "" -#: ../../../CHANGELOG:1289 -msgid "ghose" -msgstr "" - -#: ../../../CHANGELOG:1290 +#: ../../../CHANGELOG.md:1219 msgid "Kalle Anka" msgstr "" -#: ../../../CHANGELOG:1291 +#: ../../../CHANGELOG.md:1220 msgid "mekind" msgstr "" -#: ../../../CHANGELOG:1293 +#: ../../../CHANGELOG.md:1222 msgid "Puri" msgstr "" -#: ../../../CHANGELOG:1294 ../../../CHANGELOG:1699 ../../../CHANGELOG:1775 -msgid "Quentin PAGÈS" -msgstr "" - -#: ../../../CHANGELOG:1295 +#: ../../../CHANGELOG.md:1224 msgid "Raphaël Ventura" msgstr "" -#: ../../../CHANGELOG:1296 +#: ../../../CHANGELOG.md:1225 msgid "Slimane Selyan Amiri" msgstr "" -#: ../../../CHANGELOG:1297 ../../../CHANGELOG:1703 ../../../CHANGELOG:2096 -msgid "SpcCw" -msgstr "" - -#: ../../../CHANGELOG:1298 -msgid "Stefano Pigozzi" -msgstr "" - -#: ../../../CHANGELOG:1299 +#: ../../../CHANGELOG.md:1228 msgid "Sébastien de Melo" msgstr "" -#: ../../../CHANGELOG:1300 +#: ../../../CHANGELOG.md:1229 msgid "Ventura Pérez García" msgstr "" -#: ../../../CHANGELOG:1301 -msgid "vicdorke" -msgstr "" - -#: ../../../CHANGELOG:1302 ../../../CHANGELOG:1711 ../../../CHANGELOG:2100 +#: ../../../CHANGELOG.md:1231 ../../../CHANGELOG.md:1622 +#: ../../../CHANGELOG.md:1993 msgid "Xosé M" msgstr "" -#: ../../../CHANGELOG:1306 +#: ../../../CHANGELOG.md:1233 msgid "0.21.2 (2020-07-27)" msgstr "" -#: ../../../CHANGELOG:1313 +#: ../../../CHANGELOG.md:1239 msgid "" "Added a new ?related=obj_id filter for artists, albums and tracks, based " "on tags" msgstr "" -#: ../../../CHANGELOG:1314 +#: ../../../CHANGELOG.md:1240 msgid "Can now filter subscribed content through API (#1116)" msgstr "" -#: ../../../CHANGELOG:1315 +#: ../../../CHANGELOG.md:1241 msgid "" "Support ordering=random for artists, albums, tracks and channels " "endpoints (#1145)" msgstr "" -#: ../../../CHANGELOG:1316 +#: ../../../CHANGELOG.md:1242 msgid "Use role=alert on forms/toast message to improve accessibility (#1134)" msgstr "" -#: ../../../CHANGELOG:1321 +#: ../../../CHANGELOG.md:1246 msgid "Fix embedded player not working on channel series/album (#1175)" msgstr "" -#: ../../../CHANGELOG:1322 +#: ../../../CHANGELOG.md:1247 msgid "Fixed broken mimetype detection during import (#1165)" msgstr "" -#: ../../../CHANGELOG:1323 +#: ../../../CHANGELOG.md:1248 msgid "Fixed crash when loading recent albums via Subsonic (#1158)" msgstr "" -#: ../../../CHANGELOG:1324 +#: ../../../CHANGELOG.md:1249 msgid "Fixed crash with null help text in admin (#1161)" msgstr "" -#: ../../../CHANGELOG:1325 +#: ../../../CHANGELOG.md:1250 msgid "Fixed invalid metadata when importing multi-artists tracks/albums (#1104)" msgstr "" -#: ../../../CHANGELOG:1326 +#: ../../../CHANGELOG.md:1251 msgid "Fixed player crash when using Funkwhale as a PWA (#1157)" msgstr "" -#: ../../../CHANGELOG:1327 +#: ../../../CHANGELOG.md:1252 msgid "Fixed wrong convert art displaying in some situations (#1138)" msgstr "" -#: ../../../CHANGELOG:1333 +#: ../../../CHANGELOG.md:1258 msgid "Bheesham Persaud" msgstr "" -#: ../../../CHANGELOG:1338 +#: ../../../CHANGELOG.md:1261 msgid "0.21.1 (2020-06-11)" msgstr "" -#: ../../../CHANGELOG:1346 +#: ../../../CHANGELOG.md:1267 msgid "" -"Support a --watch mode with ``import_files`` to automatically add, update" -" and remove files when filesystem is updated (#721)" +"Support a --watch mode with `import_files` to automatically add, update " +"and remove files when filesystem is updated (#721)" msgstr "" -#: ../../../CHANGELOG:1350 +#: ../../../CHANGELOG.md:1271 msgid "Added new channels widget on pod landing page (#1113)" msgstr "" -#: ../../../CHANGELOG:1351 +#: ../../../CHANGELOG.md:1272 msgid "Fix HTML not including instance name in some situations (#1107)" msgstr "" -#: ../../../CHANGELOG:1352 +#: ../../../CHANGELOG.md:1273 msgid "" "Make URL-building logic more resilient against reverse proxy " "misconfiguration (#1085)" msgstr "" -#: ../../../CHANGELOG:1353 +#: ../../../CHANGELOG.md:1274 msgid "Removed unused masonry dependency (#1112)" msgstr "" -#: ../../../CHANGELOG:1354 +#: ../../../CHANGELOG.md:1275 msgid "" "Support for specifying itunes:email and itunes:name in channels for " "compatibility with third-party platforms (#1154)" msgstr "" -#: ../../../CHANGELOG:1355 +#: ../../../CHANGELOG.md:1276 msgid "" "Updated the /api/v1/libraries endpoint to support listing public " "libraries from other users/pods (#1151)" msgstr "" -#: ../../../CHANGELOG:1360 +#: ../../../CHANGELOG.md:1280 msgid "" "Added safeguard to ensure local uploads are never purged from cache " "(#1086)" msgstr "" -#: ../../../CHANGELOG:1361 +#: ../../../CHANGELOG.md:1281 msgid "" "Ensure firefox password manager dont autofill username in search bar " "(#1090)" msgstr "" -#: ../../../CHANGELOG:1362 +#: ../../../CHANGELOG.md:1282 msgid "" "Ensure player doesn't disappear when last queue track is removed manually" " (#1092)" msgstr "" -#: ../../../CHANGELOG:1363 +#: ../../../CHANGELOG.md:1283 msgid "Ensure tracks linked to skipped upload can be pruned (#1011)" msgstr "" -#: ../../../CHANGELOG:1364 +#: ../../../CHANGELOG.md:1284 msgid "Fix playlist modal only listing 50 first playlists (#1087)" msgstr "" -#: ../../../CHANGELOG:1365 +#: ../../../CHANGELOG.md:1285 msgid "Fixed a wording issue on artist channel page (#1117)" msgstr "" -#: ../../../CHANGELOG:1366 +#: ../../../CHANGELOG.md:1286 msgid "Fixed crash on python 3.5 with cli importer (#1155)" msgstr "" -#: ../../../CHANGELOG:1367 +#: ../../../CHANGELOG.md:1287 msgid "Fixed issue when displaying starred tracks on subsonic (#1082)" msgstr "" -#: ../../../CHANGELOG:1368 +#: ../../../CHANGELOG.md:1288 msgid "" "Fixed mimetype detection issue that broke transcoding on some tracks " -"(#1093). Run ``python manage.py fix_uploads --mimetype`` to set proper " +"(#1093). Run `python manage.py fix_uploads --mimetype` to set proper " "mimetypes on existing uploads." msgstr "" -#: ../../../CHANGELOG:1369 +#: ../../../CHANGELOG.md:1289 msgid "" "Fixed page not refreshing when switching between My Library and Explore " "sections (#1091)" msgstr "" -#: ../../../CHANGELOG:1370 +#: ../../../CHANGELOG.md:1290 msgid "Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147)" msgstr "" -#: ../../../CHANGELOG:1371 +#: ../../../CHANGELOG.md:1291 msgid "Fixed wrong album and track count in admin artist API (#1096)" msgstr "" -#: ../../../CHANGELOG:1372 +#: ../../../CHANGELOG.md:1292 msgid "" "Include tracks by album artist when filtering by artist on /api/v1/tracks" " (#1078)" msgstr "" -#: ../../../CHANGELOG:1388 +#: ../../../CHANGELOG.md:1306 msgid "" "Contributors to this release (development, documentation, reviews, " "testing):" msgstr "" -#: ../../../CHANGELOG:1392 ../../../CHANGELOG:1676 ../../../CHANGELOG:2141 -msgid "Creak" -msgstr "" - -#: ../../../CHANGELOG:1393 +#: ../../../CHANGELOG.md:1311 msgid "gisforgabriel" msgstr "" -#: ../../../CHANGELOG:1394 +#: ../../../CHANGELOG.md:1312 msgid "Siren" msgstr "" -#: ../../../CHANGELOG:1399 +#: ../../../CHANGELOG.md:1315 msgid "0.21 \"Agate\" (2020-04-24)" msgstr "" -#: ../../../CHANGELOG:1401 +#: ../../../CHANGELOG.md:1317 msgid "" "This 0.21 release is dedicated to Agate, to thank her, for both having " "created the Funkwhale project, being the current lead developer, and for " @@ -2584,7 +2934,7 @@ msgid "" "Funkwhale community <3" msgstr "" -#: ../../../CHANGELOG:1403 +#: ../../../CHANGELOG.md:1319 msgid "" "We are truly grateful as well to the dozens of people who contributed to " "this release with translations, development, documentation, reviews, " @@ -2592,7 +2942,7 @@ msgid "" "integrations… You made it possible!" msgstr "" -#: ../../../CHANGELOG:1405 +#: ../../../CHANGELOG.md:1321 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html, there are also " @@ -2600,15 +2950,15 @@ msgid "" "(search \"Manual action\")." msgstr "" -#: ../../../CHANGELOG:1409 +#: ../../../CHANGELOG.md:1323 msgid "Channels and podcasts" msgstr "" -#: ../../../CHANGELOG:1411 +#: ../../../CHANGELOG.md:1325 msgid "Funkwhale 0.21 includes a brand new feature: Channels!" msgstr "" -#: ../../../CHANGELOG:1413 +#: ../../../CHANGELOG.md:1327 msgid "" "Channels can be used as a replacement to public libraries, to publish " "audio content, both musical and non-musical. They federate with other " @@ -2618,14 +2968,14 @@ msgid "" "publication, simply visit your profile and create a channel from there." msgstr "" -#: ../../../CHANGELOG:1418 +#: ../../../CHANGELOG.md:1332 msgid "" "Each Funkwhale channel also comes with RSS feed that is compatible with " "existing podcasting applications, like AntennaPod on Android and, within " "Funkwhale, you can also subscribe to any podcast from its RSS feed!" msgstr "" -#: ../../../CHANGELOG:1421 +#: ../../../CHANGELOG.md:1335 msgid "" "Many, many thanks to the numerous people who helped with the feature " "design, development and testing, and in particular to the members of the " @@ -2634,11 +2984,11 @@ msgid "" "with us to ensure compatibility." msgstr "" -#: ../../../CHANGELOG:1426 +#: ../../../CHANGELOG.md:1339 msgid "Redesigned navigation, player and queue" msgstr "" -#: ../../../CHANGELOG:1428 +#: ../../../CHANGELOG.md:1341 msgid "" "This release includes a full redesign of our navigation, player and " "queue. Overall, it should provide a better, less confusing experience, " @@ -2647,33 +2997,33 @@ msgid "" "people, we got it done!" msgstr "" -#: ../../../CHANGELOG:1433 +#: ../../../CHANGELOG.md:1345 msgid "Improved search bar for searching remote objects" msgstr "" -#: ../../../CHANGELOG:1435 +#: ../../../CHANGELOG.md:1347 msgid "" "The search bar now support fetching arbitrary objects using a URL. In " "particular, you can use this to quickly:" msgstr "" -#: ../../../CHANGELOG:1437 +#: ../../../CHANGELOG.md:1349 msgid "Subscribe to a remote library via its URL" msgstr "" -#: ../../../CHANGELOG:1438 +#: ../../../CHANGELOG.md:1350 msgid "Listen a public track from another pod" msgstr "" -#: ../../../CHANGELOG:1439 +#: ../../../CHANGELOG.md:1351 msgid "Subscribe to a channel" msgstr "" -#: ../../../CHANGELOG:1442 +#: ../../../CHANGELOG.md:1353 msgid "Screening for sign-ups and custom sign-up form" msgstr "" -#: ../../../CHANGELOG:1444 +#: ../../../CHANGELOG.md:1355 msgid "" "Instance admins can now configure their pod so that registrations " "required manual approval from a moderator. This is especially useful on " @@ -2681,49 +3031,49 @@ msgid "" "completely, but don't want spam or unwanted users to join your pod." msgstr "" -#: ../../../CHANGELOG:1448 +#: ../../../CHANGELOG.md:1359 msgid "" "When this is enabled and a new user register, their request is put in a " "moderation queue, and moderators are notified by email. When the request " "is approved or refused, the user is also notified by email." msgstr "" -#: ../../../CHANGELOG:1451 +#: ../../../CHANGELOG.md:1362 msgid "In addition, it's also possible to customize the sign-up form by:" msgstr "" -#: ../../../CHANGELOG:1453 +#: ../../../CHANGELOG.md:1364 msgid "Providing a custom help text, in markdown format" msgstr "" -#: ../../../CHANGELOG:1454 +#: ../../../CHANGELOG.md:1365 msgid "" "Including additional fields in the form, for instance to ask the user why" " they want to join. Data collected through these fields is included in " "the sign-up request and viewable by the mods" msgstr "" -#: ../../../CHANGELOG:1457 +#: ../../../CHANGELOG.md:1367 msgid "Federated reports" msgstr "" -#: ../../../CHANGELOG:1459 +#: ../../../CHANGELOG.md:1369 msgid "" "It's now possible to send a copy of a report to the server hosting the " "reported object, in order to make moderation easier and more distributed." msgstr "" -#: ../../../CHANGELOG:1461 +#: ../../../CHANGELOG.md:1371 msgid "" "This feature is inspired by Mastodon's current design, and should work " "with at least Funkwhale and Mastodon servers." msgstr "" -#: ../../../CHANGELOG:1464 +#: ../../../CHANGELOG.md:1373 msgid "Improved search performance" msgstr "" -#: ../../../CHANGELOG:1466 +#: ../../../CHANGELOG.md:1375 msgid "" "Our search engine went through a full rewrite to make it faster. This new" " engine is enabled by default when using the search bar, or when " @@ -2731,805 +3081,797 @@ msgid "" "text search capabilities." msgstr "" -#: ../../../CHANGELOG:1470 +#: ../../../CHANGELOG.md:1379 msgid "" "During our tests, we observed huge performance improvements after the " "switch, by an order of magnitude. This should be especially perceptible " "on pods with large databases, more modest hardware or hard drives." msgstr "" -#: ../../../CHANGELOG:1474 +#: ../../../CHANGELOG.md:1383 msgid "" "We plan to remove the old engine in an upcoming release. In the meantime," " if anything goes wrong, you can switch back by setting " -"``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` file." +"`USE_FULL_TEXT_SEARCH=false` in your `.env` file." msgstr "" -#: ../../../CHANGELOG:1478 +#: ../../../CHANGELOG.md:1386 msgid "Enforced email verification" msgstr "" -#: ../../../CHANGELOG:1480 +#: ../../../CHANGELOG.md:1388 msgid "" -"The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE`` setting can be used " -"to make email verification mandatory for your users. It defaults to " -"``false``, and doesn't apply to superuser accounts created through the " -"CLI." +"The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to" +" make email verification mandatory for your users. It defaults to " +"`false`, and doesn't apply to superuser accounts created through the CLI." msgstr "" -#: ../../../CHANGELOG:1484 +#: ../../../CHANGELOG.md:1392 msgid "If you enable this, ensure you have a SMTP server configured too." msgstr "" -#: ../../../CHANGELOG:1487 +#: ../../../CHANGELOG.md:1394 msgid "More reliable CLI importer [manual action required]" msgstr "" -#: ../../../CHANGELOG:1489 +#: ../../../CHANGELOG.md:1396 msgid "" "Our CLI importer is now more reliable and less prone to Out-of-Memory " "issues, especially when scanning large libraries. (hundreds of GB or " "bigger)" msgstr "" -#: ../../../CHANGELOG:1491 +#: ../../../CHANGELOG.md:1398 msgid "" "We've also improved the directory crawling logic, so that you don't have " "to use glob patterns or specify extensions when importing. As a result, " "the syntax for providing directories to the command as changed slightly." msgstr "" -#: ../../../CHANGELOG:1493 +#: ../../../CHANGELOG.md:1400 msgid "" -"If you use the ``import_files`` command, this means you should replace " -"scripts that look like this::" +"If you use the `import_files` command, this means you should replace " +"scripts that look like this:" msgstr "" -#: ../../../CHANGELOG:1497 -msgid "By this::" +#: ../../../CHANGELOG.md:1406 +msgid "By this:" msgstr "" -#: ../../../CHANGELOG:1501 +#: ../../../CHANGELOG.md:1412 msgid "" "And Funkwhale will happily import any supported audio file from the " "specified directory." msgstr "" -#: ../../../CHANGELOG:1504 ../../../CHANGELOG:1594 +#: ../../../CHANGELOG.md:1414 ../../../CHANGELOG.md:1505 msgid "User management through the server CLI" msgstr "" -#: ../../../CHANGELOG:1506 +#: ../../../CHANGELOG.md:1416 msgid "" "We now support user creation (incl. non-admin accounts), update and " "removal directly from the server CLI. Typical use cases include:" msgstr "" -#: ../../../CHANGELOG:1509 +#: ../../../CHANGELOG.md:1419 msgid "Changing a user password from the command line" msgstr "" -#: ../../../CHANGELOG:1510 +#: ../../../CHANGELOG.md:1420 msgid "Creating or updating users from deployments scripts or playbooks" msgstr "" -#: ../../../CHANGELOG:1511 +#: ../../../CHANGELOG.md:1421 msgid "Removing or granting permissions or upload quota to multiple users at once" msgstr "" -#: ../../../CHANGELOG:1512 +#: ../../../CHANGELOG.md:1422 msgid "Marking multiple users as inactive" msgstr "" -#: ../../../CHANGELOG:1514 +#: ../../../CHANGELOG.md:1424 msgid "" -"All user-related commands are available under the ``python manage.py fw " -"users`` namespace. Please refer to the `Admin documentation " -"<https://docs.funkwhale.audio/admin/commands.html#user-management>`_ for " -"more information and instructions." +"All user-related commands are available under the `python manage.py fw " +"users` namespace. Please refer to the [Admin " +"documentation](https://docs.funkwhale.audio/admin/commands.html#user-" +"management) for more information and instructions." msgstr "" -#: ../../../CHANGELOG:1518 -msgid "" -"Progressive web app [Manual action sugFull list of changes " -"^^^^^^^^^^^^^^^^^^^^gested, non-docker only] " -"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" +#: ../../../CHANGELOG.md:1428 +msgid "Progressive web app [Manual action suggested, non-docker only]" msgstr "" -#: ../../../CHANGELOG:1522 +#: ../../../CHANGELOG.md:1430 msgid "" "We've made Funkwhale's Web UI a Progressive Web Application (PWA), in " "order to improve the user experience during offline use, and on mobile " "devices." msgstr "" -#: ../../../CHANGELOG:1525 +#: ../../../CHANGELOG.md:1433 msgid "" "In order to fully benefit from this change, if your pod isn't deployed " "using Docker, ensure the following instruction is present in your nginx " -"configuration::" +"configuration:" msgstr "" -#: ../../../CHANGELOG:1534 +#: ../../../CHANGELOG.md:1443 msgid "" "Postgres docker changed environment variable [manual action required, " "docker multi-container only]" msgstr "" -#: ../../../CHANGELOG:1536 +#: ../../../CHANGELOG.md:1445 msgid "" "If you're running with docker and our multi-container setup, there was a " "breaking change starting in the 11.7 postgres image (https://github.com" "/docker-library/postgres/pull/658)" msgstr "" -#: ../../../CHANGELOG:1538 -msgid "" -"You need to add this to your .env file: " -"``POSTGRES_HOST_AUTH_METHOD=trust``" +#: ../../../CHANGELOG.md:1447 +msgid "You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust`" msgstr "" -#: ../../../CHANGELOG:1540 +#: ../../../CHANGELOG.md:1449 msgid "Newer deployments aren't affected." msgstr "" -#: ../../../CHANGELOG:1543 +#: ../../../CHANGELOG.md:1451 msgid "" "Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one" " only]" msgstr "" -#: ../../../CHANGELOG:1545 +#: ../../../CHANGELOG.md:1453 msgid "" -"With our upgrade to Alpine 3.10, the ``funkwhale/all-in-one`` image now " +"With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now " "includes PostgreSQL 11." msgstr "" -#: ../../../CHANGELOG:1547 +#: ../../../CHANGELOG.md:1455 msgid "" "In order to update to Funkwhale 0.21, you will first need to upgrade " -"Funkwhale's PostgreSQL database, following the steps below::" +"Funkwhale's PostgreSQL database, following the steps below:" msgstr "" -#: ../../../CHANGELOG:1574 +#: ../../../CHANGELOG.md:1484 msgid "" "Once you have completed the Funkwhale upgrade with our regular " "instructions and everything works properly, you can remove the " -"backups/old files::" +"backups/old files:" msgstr "" -#: ../../../CHANGELOG:1587 +#: ../../../CHANGELOG.md:1498 msgid "Support for publishing and subscribing to podcasts (#170)" msgstr "" -#: ../../../CHANGELOG:1588 +#: ../../../CHANGELOG.md:1499 msgid "Brand new navigation, queue and player redesign (#594)" msgstr "" -#: ../../../CHANGELOG:1589 +#: ../../../CHANGELOG.md:1500 msgid "Can now browse a library content through the UI (#926)" msgstr "" -#: ../../../CHANGELOG:1590 +#: ../../../CHANGELOG.md:1501 msgid "Federated reports (#1038)" msgstr "" -#: ../../../CHANGELOG:1591 +#: ../../../CHANGELOG.md:1502 msgid "Screening for sign-ups (#1040)" msgstr "" -#: ../../../CHANGELOG:1592 +#: ../../../CHANGELOG.md:1503 msgid "Make it possible to enforce email verification (#1039)" msgstr "" -#: ../../../CHANGELOG:1593 +#: ../../../CHANGELOG.md:1504 msgid "Added a new radio based on another user listenings (#1060)" msgstr "" -#: ../../../CHANGELOG:1598 +#: ../../../CHANGELOG.md:1509 msgid "Added ability to reject library follows from notifications screen (#859)" msgstr "" -#: ../../../CHANGELOG:1599 +#: ../../../CHANGELOG.md:1510 msgid "" "Added periodic background task and CLI command to associate genre tags to" " artists and albums based on identical tags found on corresponding tracks" " (#988)" msgstr "" -#: ../../../CHANGELOG:1600 +#: ../../../CHANGELOG.md:1511 msgid "" "Added support for CELERYD_CONCURRENCY env var to control the number of " "worker processes (#997)" msgstr "" -#: ../../../CHANGELOG:1601 +#: ../../../CHANGELOG.md:1512 msgid "Added the ability to sort albums by release date (#1013)" msgstr "" -#: ../../../CHANGELOG:1602 +#: ../../../CHANGELOG.md:1513 msgid "Added two new radios to play your own content or a given library tracks" msgstr "" -#: ../../../CHANGELOG:1603 +#: ../../../CHANGELOG.md:1514 msgid "" "Advertise list of known nodes on /api/v1/federation/domains and in " "nodeinfo if stats sharing is enabled" msgstr "" -#: ../../../CHANGELOG:1604 +#: ../../../CHANGELOG.md:1515 msgid "" "Changed footer to use instance name if available, and append ellipses if " "instance URL/Name is too long (#1012)" msgstr "" -#: ../../../CHANGELOG:1605 +#: ../../../CHANGELOG.md:1516 msgid "Favor local uploads when playing a track with multiple uploads (#1036)" msgstr "" -#: ../../../CHANGELOG:1606 +#: ../../../CHANGELOG.md:1517 msgid "Include only local content in nodeinfo stats, added downloads count" msgstr "" -#: ../../../CHANGELOG:1607 +#: ../../../CHANGELOG.md:1518 msgid "" "Make media and static files serving more reliable when reverse proxy " -"X_FORWARDED_* headers are incorrect (#947)" +"`X_FORWARDED_*` headers are incorrect (#947)" msgstr "" -#: ../../../CHANGELOG:1608 +#: ../../../CHANGELOG.md:1519 msgid "Order the playlist columns by modification date in the Browse tab (#775)" msgstr "" -#: ../../../CHANGELOG:1609 +#: ../../../CHANGELOG.md:1520 msgid "" "Reduced size of funkwhale/funkwhale docker images thanks to multi-stage " "builds (!1042)" msgstr "" -#: ../../../CHANGELOG:1610 +#: ../../../CHANGELOG.md:1521 msgid "" "Remember display settings in Album, Artist, Radio and Playlist views " "(#391)" msgstr "" -#: ../../../CHANGELOG:1611 +#: ../../../CHANGELOG.md:1522 msgid "Removed unnecessary \"Federation music needs approval\" setting (#959)" msgstr "" -#: ../../../CHANGELOG:1612 +#: ../../../CHANGELOG.md:1523 msgid "Replaced our slow research logic by PostgreSQL full-text search (#994)" msgstr "" -#: ../../../CHANGELOG:1613 +#: ../../../CHANGELOG.md:1524 msgid "" "Support autoplay when loading embed frame from Mastodon and third-party " "websites (#1041)" msgstr "" -#: ../../../CHANGELOG:1614 +#: ../../../CHANGELOG.md:1525 msgid "" "Support filtering playlist by name and several additional UX improvements" " in playlists modal (#974)" msgstr "" -#: ../../../CHANGELOG:1615 +#: ../../../CHANGELOG.md:1526 msgid "Support modifying album cover art through the web UI (#588)" msgstr "" -#: ../../../CHANGELOG:1616 +#: ../../../CHANGELOG.md:1527 msgid "" "Use a dedicated scope for throttling subsonic to avoid intrusive rate-" "limiting" msgstr "" -#: ../../../CHANGELOG:1617 +#: ../../../CHANGELOG.md:1528 msgid "" "Use same markdown widget for all content fields (rules, description, " "reports, notes, etc.)" msgstr "" -#: ../../../CHANGELOG:1618 +#: ../../../CHANGELOG.md:1529 msgid "" "CLI Importer is now more reliable and less resource-hungry on large " "libraries" msgstr "" -#: ../../../CHANGELOG:1619 ../../../CHANGELOG:1643 +#: ../../../CHANGELOG.md:1530 ../../../CHANGELOG.md:1554 msgid "Add support custom domain for S3 storage" msgstr "" -#: ../../../CHANGELOG:1620 +#: ../../../CHANGELOG.md:1531 msgid "Better placeholders for channels when there are no episodes or series" msgstr "" -#: ../../../CHANGELOG:1621 +#: ../../../CHANGELOG.md:1532 msgid "Updated documentation for 0.21 release" msgstr "" -#: ../../../CHANGELOG:1622 +#: ../../../CHANGELOG.md:1533 msgid "Improved performance and error handling when fetching remote attachments" msgstr "" -#: ../../../CHANGELOG:1626 +#: ../../../CHANGELOG.md:1537 msgid "Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961)" msgstr "" -#: ../../../CHANGELOG:1627 +#: ../../../CHANGELOG.md:1538 msgid "" "Fix issue with browser shortcuts such as search and focus URL not being " "recognised (#340, #985)" msgstr "" -#: ../../../CHANGELOG:1628 +#: ../../../CHANGELOG.md:1539 msgid "Fixed admin dropdown not showing after login (#1042)" msgstr "" -#: ../../../CHANGELOG:1629 +#: ../../../CHANGELOG.md:1540 msgid "Fixed an issue with celerybeat container failing to restart (#1004)" msgstr "" -#: ../../../CHANGELOG:1630 +#: ../../../CHANGELOG.md:1541 msgid "Fixed invalid displayed number of tracks in playlist (#986)" msgstr "" -#: ../../../CHANGELOG:1631 +#: ../../../CHANGELOG.md:1542 msgid "Fixed issue with recent results not being loaded from the API (#948)" msgstr "" -#: ../../../CHANGELOG:1632 +#: ../../../CHANGELOG.md:1543 msgid "Fixed issue with sorting by album name not working (#960)" msgstr "" -#: ../../../CHANGELOG:1633 +#: ../../../CHANGELOG.md:1544 msgid "" "Fixed short audio glitch when switching switching to another track with " "player paused (#970)" msgstr "" -#: ../../../CHANGELOG:1634 +#: ../../../CHANGELOG.md:1545 msgid "" "Improved deduplication logic to prevent skipped files during import " "(#348, #474, #557, #740, #928)" msgstr "" -#: ../../../CHANGELOG:1635 +#: ../../../CHANGELOG.md:1546 msgid "More resilient tag parsing with empty release date or album artist (#1037)" msgstr "" -#: ../../../CHANGELOG:1636 +#: ../../../CHANGELOG.md:1547 msgid "More robust importer against malformed dates (#966)" msgstr "" -#: ../../../CHANGELOG:1637 +#: ../../../CHANGELOG.md:1548 msgid "" "Removed \"nodeinfo disabled\" setting, as nodeinfo is required for the UI" " to work (#982)" msgstr "" -#: ../../../CHANGELOG:1638 +#: ../../../CHANGELOG.md:1549 msgid "Replaced PDF icon by List icon in playlist placeholder (#943)" msgstr "" -#: ../../../CHANGELOG:1639 +#: ../../../CHANGELOG.md:1550 msgid "" "Resolve an issue where disc numbers were not taken into consideration " "when playing an album from the album card (#1006)" msgstr "" -#: ../../../CHANGELOG:1640 +#: ../../../CHANGELOG.md:1551 msgid "Set correct size for album covers in playlist cards (#680)" msgstr "" -#: ../../../CHANGELOG:1641 +#: ../../../CHANGELOG.md:1552 msgid "Remove double spaces in ChannelForm" msgstr "" -#: ../../../CHANGELOG:1642 +#: ../../../CHANGELOG.md:1553 msgid "Deduplicate tags in Audio ActivityPub representation" msgstr "" -#: ../../../CHANGELOG:1644 +#: ../../../CHANGELOG.md:1555 msgid "Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075)" msgstr "" -#: ../../../CHANGELOG:1645 +#: ../../../CHANGELOG.md:1556 msgid "Exclude external podcasts from library home" msgstr "" -#: ../../../CHANGELOG:1646 +#: ../../../CHANGELOG.md:1557 msgid "Fixed broken channel save when description is too long" msgstr "" -#: ../../../CHANGELOG:1647 +#: ../../../CHANGELOG.md:1558 msgid "" "Fixed 500 error when federation is disabled and application+json is " "requested" msgstr "" -#: ../../../CHANGELOG:1648 +#: ../../../CHANGELOG.md:1559 msgid "Fixed minor subsonic API crash" msgstr "" -#: ../../../CHANGELOG:1649 +#: ../../../CHANGELOG.md:1560 msgid "Fixed broken local profile page when allow-list is enabled" msgstr "" -#: ../../../CHANGELOG:1650 +#: ../../../CHANGELOG.md:1561 msgid "" "Fixed issue with confirmation email not sending when signup-approval was " "enabled" msgstr "" -#: ../../../CHANGELOG:1651 +#: ../../../CHANGELOG.md:1562 msgid "Ensure 0 quota on user is honored" msgstr "" -#: ../../../CHANGELOG:1652 +#: ../../../CHANGELOG.md:1563 msgid "Fixed attachments URL not honoring media URL" msgstr "" -#: ../../../CHANGELOG:1653 +#: ../../../CHANGELOG.md:1564 msgid "Fix grammar in msg string in TrackBase.vue" msgstr "" -#: ../../../CHANGELOG:1654 +#: ../../../CHANGELOG.md:1565 msgid "Fix typo in SubscribeButton.vue" msgstr "" -#: ../../../CHANGELOG:1656 +#: ../../../CHANGELOG.md:1567 msgid "Translations:" msgstr "" -#: ../../../CHANGELOG:1658 +#: ../../../CHANGELOG.md:1569 msgid "Arabic" msgstr "" -#: ../../../CHANGELOG:1659 +#: ../../../CHANGELOG.md:1570 msgid "Catalan" msgstr "" -#: ../../../CHANGELOG:1660 +#: ../../../CHANGELOG.md:1571 msgid "English (United Kingdom)" msgstr "" -#: ../../../CHANGELOG:1661 +#: ../../../CHANGELOG.md:1572 msgid "German" msgstr "" -#: ../../../CHANGELOG:1662 +#: ../../../CHANGELOG.md:1573 msgid "Hungarian" msgstr "" -#: ../../../CHANGELOG:1663 +#: ../../../CHANGELOG.md:1574 msgid "Japanese" msgstr "" -#: ../../../CHANGELOG:1664 +#: ../../../CHANGELOG.md:1575 msgid "Occitan" msgstr "" -#: ../../../CHANGELOG:1665 +#: ../../../CHANGELOG.md:1576 msgid "Portuguese (Brazil)" msgstr "" -#: ../../../CHANGELOG:1666 +#: ../../../CHANGELOG.md:1577 msgid "Russian" msgstr "" -#: ../../../CHANGELOG:1671 +#: ../../../CHANGELOG.md:1582 msgid "annando" msgstr "" -#: ../../../CHANGELOG:1672 +#: ../../../CHANGELOG.md:1583 msgid "Anton Strömkvist" msgstr "" -#: ../../../CHANGELOG:1673 +#: ../../../CHANGELOG.md:1584 msgid "Audrey" msgstr "" -#: ../../../CHANGELOG:1674 ../../../CHANGELOG:2076 ../../../CHANGELOG:2346 +#: ../../../CHANGELOG.md:1585 ../../../CHANGELOG.md:1969 +#: ../../../CHANGELOG.md:2217 msgid "ButterflyOfFire" msgstr "" -#: ../../../CHANGELOG:1678 +#: ../../../CHANGELOG.md:1589 msgid "dashie" msgstr "" -#: ../../../CHANGELOG:1679 +#: ../../../CHANGELOG.md:1590 msgid "Eloisa" msgstr "" -#: ../../../CHANGELOG:1680 +#: ../../../CHANGELOG.md:1591 msgid "eorn" msgstr "" -#: ../../../CHANGELOG:1682 +#: ../../../CHANGELOG.md:1593 msgid "gerhardbeck" msgstr "" -#: ../../../CHANGELOG:1683 +#: ../../../CHANGELOG.md:1594 msgid "GinnyMcQueen" msgstr "" -#: ../../../CHANGELOG:1684 +#: ../../../CHANGELOG.md:1595 msgid "guillermau" msgstr "" -#: ../../../CHANGELOG:1685 +#: ../../../CHANGELOG.md:1596 msgid "Haelwenn" msgstr "" -#: ../../../CHANGELOG:1686 +#: ../../../CHANGELOG.md:1597 msgid "jinxx" msgstr "" -#: ../../../CHANGELOG:1687 +#: ../../../CHANGELOG.md:1598 msgid "Jonathan Aylard" msgstr "" -#: ../../../CHANGELOG:1689 +#: ../../../CHANGELOG.md:1600 msgid "M.G" msgstr "" -#: ../../../CHANGELOG:1690 -msgid "marzzzello" -msgstr "" - -#: ../../../CHANGELOG:1691 +#: ../../../CHANGELOG.md:1602 msgid "Mathé Grievink" msgstr "" -#: ../../../CHANGELOG:1692 ../../../CHANGELOG:2090 ../../../CHANGELOG:2358 +#: ../../../CHANGELOG.md:1603 ../../../CHANGELOG.md:1983 +#: ../../../CHANGELOG.md:2229 msgid "Mélanie Chauvel" msgstr "" -#: ../../../CHANGELOG:1693 +#: ../../../CHANGELOG.md:1604 msgid "Mjourdan" msgstr "" -#: ../../../CHANGELOG:1694 +#: ../../../CHANGELOG.md:1605 msgid "Morgan Kesler" msgstr "" -#: ../../../CHANGELOG:1695 +#: ../../../CHANGELOG.md:1606 msgid "Noe Gaumont" msgstr "" -#: ../../../CHANGELOG:1696 +#: ../../../CHANGELOG.md:1607 msgid "Noureddine HADDAG" msgstr "" -#: ../../../CHANGELOG:1697 +#: ../../../CHANGELOG.md:1608 msgid "Ollie" msgstr "" -#: ../../../CHANGELOG:1698 +#: ../../../CHANGELOG.md:1609 msgid "Peter Wickenberg" msgstr "" -#: ../../../CHANGELOG:1700 ../../../CHANGELOG:2363 +#: ../../../CHANGELOG.md:1611 ../../../CHANGELOG.md:2234 msgid "Renon" msgstr "" -#: ../../../CHANGELOG:1701 +#: ../../../CHANGELOG.md:1612 msgid "Satsuki Yanagi" msgstr "" -#: ../../../CHANGELOG:1702 +#: ../../../CHANGELOG.md:1613 msgid "Shlee" msgstr "" -#: ../../../CHANGELOG:1704 +#: ../../../CHANGELOG.md:1615 msgid "techknowlogick" msgstr "" -#: ../../../CHANGELOG:1705 +#: ../../../CHANGELOG.md:1616 msgid "ThibG" msgstr "" -#: ../../../CHANGELOG:1707 +#: ../../../CHANGELOG.md:1618 msgid "unklebonehead" msgstr "" -#: ../../../CHANGELOG:1708 +#: ../../../CHANGELOG.md:1619 msgid "wakest" msgstr "" -#: ../../../CHANGELOG:1709 +#: ../../../CHANGELOG.md:1620 msgid "wxcafé" msgstr "" -#: ../../../CHANGELOG:1710 ../../../CHANGELOG:2099 +#: ../../../CHANGELOG.md:1621 ../../../CHANGELOG.md:1992 msgid "Xaloc" msgstr "" -#: ../../../CHANGELOG:1714 +#: ../../../CHANGELOG.md:1624 msgid "0.20.1 (2019-10-28)" msgstr "" -#: ../../../CHANGELOG:1721 ../../../CHANGELOG:1742 +#: ../../../CHANGELOG.md:1628 ../../../CHANGELOG.md:1650 msgid "" "Denormalized audio permission logic in a separate table to enhance " "performance" msgstr "" -#: ../../../CHANGELOG:1723 +#: ../../../CHANGELOG.md:1630 msgid "" "With this release, we're introducing a performance enhancement that " "should reduce the load on the database and API servers (cf " "https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939)." msgstr "" -#: ../../../CHANGELOG:1726 +#: ../../../CHANGELOG.md:1633 msgid "" "Under the hood, we now maintain a separate table to link users to the " "tracks they are allowed to see. This change is **disabled** by default, " "but should be enabled by default starting in Funkwhale 0.21." msgstr "" -#: ../../../CHANGELOG:1729 +#: ../../../CHANGELOG.md:1636 msgid "" -"If you want to try it now, add ``MUSIC_USE_DENORMALIZATION=True`` to your" -" ``.env`` file, restart Funkwhale, and run the following command::" +"If you want to try it now, add `MUSIC_USE_DENORMALIZATION=True` to your " +"`.env` file, restart Funkwhale, and run the following command:" msgstr "" -#: ../../../CHANGELOG:1734 +#: ../../../CHANGELOG.md:1643 msgid "" "This shouldn't cause any regression, but we'd appreciate if you could " "test this before the 0.21 release and report any unusual behaviour " "regarding tracks, albums and artists visibility." msgstr "" -#: ../../../CHANGELOG:1740 +#: ../../../CHANGELOG.md:1648 msgid "Added a retry option for failed uploads (#942)" msgstr "" -#: ../../../CHANGELOG:1741 +#: ../../../CHANGELOG.md:1649 msgid "Added feedback via loading spinner when searching a remote library" msgstr "" -#: ../../../CHANGELOG:1743 +#: ../../../CHANGELOG.md:1651 msgid "" "Placeholders will now be shown if no content is available across the " "application (#750)" msgstr "" -#: ../../../CHANGELOG:1744 +#: ../../../CHANGELOG.md:1652 msgid "" "Reduce the number of simultaneous DB connections under some deployment " "scenario" msgstr "" -#: ../../../CHANGELOG:1745 +#: ../../../CHANGELOG.md:1653 msgid "Support byYear filtering in Subsonic API (#936)" msgstr "" -#: ../../../CHANGELOG:1750 +#: ../../../CHANGELOG.md:1657 msgid "Ensure password input doesn't overflow outside of container (#933)" msgstr "" -#: ../../../CHANGELOG:1751 +#: ../../../CHANGELOG.md:1658 msgid "Fix audio serving issues under S3/nginx when signatures are enabled" msgstr "" -#: ../../../CHANGELOG:1752 +#: ../../../CHANGELOG.md:1659 msgid "Fix import crash when importing M4A file with no embedded cover (#946)" msgstr "" -#: ../../../CHANGELOG:1753 +#: ../../../CHANGELOG.md:1660 msgid "Fix tag exclusion in custom radios (#950)" msgstr "" -#: ../../../CHANGELOG:1754 +#: ../../../CHANGELOG.md:1661 msgid "Fixed an issue with embed player CSS being purged during build (#935)" msgstr "" -#: ../../../CHANGELOG:1755 +#: ../../../CHANGELOG.md:1662 msgid "Fixed escaped pod name displayed on home/about page (#945)" msgstr "" -#: ../../../CHANGELOG:1756 +#: ../../../CHANGELOG.md:1663 msgid "Fixed pagination in subsonic getSongsByGenre endpoint (#954)" msgstr "" -#: ../../../CHANGELOG:1757 +#: ../../../CHANGELOG.md:1664 msgid "Fixed style glitches in dropdowns" msgstr "" -#: ../../../CHANGELOG:1762 +#: ../../../CHANGELOG.md:1668 msgid "" "Documented how to create DB extension by hand in case of permission error" " during migrations (#934)" msgstr "" -#: ../../../CHANGELOG:1765 ../../../CHANGELOG:2073 +#: ../../../CHANGELOG.md:1670 ../../../CHANGELOG.md:1966 msgid "" "Contributors to this release (translation, development, documentation, " "reviews, design):" msgstr "" -#: ../../../CHANGELOG:1768 +#: ../../../CHANGELOG.md:1673 msgid "Dag Stenstad" msgstr "" -#: ../../../CHANGELOG:1773 +#: ../../../CHANGELOG.md:1678 msgid "knuxify" msgstr "" -#: ../../../CHANGELOG:1774 +#: ../../../CHANGELOG.md:1679 msgid "Mateus Mattei Garcia" msgstr "" -#: ../../../CHANGELOG:1779 +#: ../../../CHANGELOG.md:1682 msgid "0.20 (2019-10-04)" msgstr "" -#: ../../../CHANGELOG:1786 +#: ../../../CHANGELOG.md:1686 msgid "Support for genres via tags" msgstr "" -#: ../../../CHANGELOG:1788 +#: ../../../CHANGELOG.md:1688 msgid "One of our most requested missing features is now available!" msgstr "" -#: ../../../CHANGELOG:1790 +#: ../../../CHANGELOG.md:1690 msgid "" "Starting with Funkwhale 0.20, Funkwhale will automatically extract genre " "information from uploaded files and associate it with the corresponding " "tracks in the form of tags (similar to Mastodon or Twitter hashtags). " -"Please refer to `our tagging documentation " -"<https://docs.funkwhale.audio/users/upload.html#tagging-files>`_ for more" -" information regarding the tagging process." +"Please refer to [our tagging " +"documentation](https://docs.funkwhale.audio/users/upload.html#tagging-" +"files) for more information regarding the tagging process." msgstr "" -#: ../../../CHANGELOG:1796 +#: ../../../CHANGELOG.md:1696 msgid "" "Tags can also be associated with artists and albums, and updated after " "upload through the UI using the edit system released in Funkwhale 0.19. " "Tags are also fetched when retrieving content via federation." msgstr "" -#: ../../../CHANGELOG:1800 +#: ../../../CHANGELOG.md:1700 msgid "Tags are used in various places to enhance user experience:" msgstr "" -#: ../../../CHANGELOG:1802 +#: ../../../CHANGELOG.md:1702 msgid "Tags are listed on tracks, albums and artist profiles" msgstr "" -#: ../../../CHANGELOG:1803 +#: ../../../CHANGELOG.md:1703 msgid "" "Each tag has a dedicated page were you can browse corresponding content " "and quickly start a radio" msgstr "" -#: ../../../CHANGELOG:1804 +#: ../../../CHANGELOG.md:1704 msgid "The custom radio builder now supports using tags" msgstr "" -#: ../../../CHANGELOG:1805 +#: ../../../CHANGELOG.md:1705 msgid "" "Subsonic apps that support genres - such as DSub or Ultrasonic - should " "display this information as well" msgstr "" -#: ../../../CHANGELOG:1807 +#: ../../../CHANGELOG.md:1707 msgid "" "If you are a pod admin and want to extract tags from already uploaded " -"content, you run `this snippet " -"<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__ and " -"`this snippet " -"<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ in a " -"``python manage.py shell``." +"content, you run [this " +"snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) and" +" [this " +"snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in " +"a `python manage.py shell`." msgstr "" -#: ../../../CHANGELOG:1811 +#: ../../../CHANGELOG.md:1710 msgid "Content and account reports" msgstr "" -#: ../../../CHANGELOG:1813 +#: ../../../CHANGELOG.md:1712 msgid "" "It is now possible to report content, such as artists, tracks or " "libraries, as well as user accounts. Such reports are forwarded to the " @@ -3537,7 +3879,7 @@ msgid "" "accounts or take any other action they deem necessary." msgstr "" -#: ../../../CHANGELOG:1816 +#: ../../../CHANGELOG.md:1715 msgid "" "By default, both anonymous and authenticated users can submit these " "reports. This makes sure moderators can receive and handle takedown " @@ -3546,39 +3888,35 @@ msgid "" " reports completely via your pod settings." msgstr "" -#: ../../../CHANGELOG:1820 +#: ../../../CHANGELOG.md:1719 msgid "Federation of the reports will be supported in a future release." msgstr "" -#: ../../../CHANGELOG:1822 ../../../CHANGELOG:1836 +#: ../../../CHANGELOG.md:1721 ../../../CHANGELOG.md:1734 msgid "" "For more information about this feature, please check out our " "documentation:" msgstr "" -#: ../../../CHANGELOG:1824 -msgid "" -"`User documentation " -"<https://docs.funkwhale.audio/moderator/reports.html>`__" +#: ../../../CHANGELOG.md:1723 +msgid "[User documentation](https://docs.funkwhale.audio/moderator/reports.html)" msgstr "" -#: ../../../CHANGELOG:1825 -msgid "" -"`Moderator documentation " -"<https://docs.funkwhale.audio/users/reports.html>`__" +#: ../../../CHANGELOG.md:1724 +msgid "[Moderator documentation](https://docs.funkwhale.audio/users/reports.html)" msgstr "" -#: ../../../CHANGELOG:1828 +#: ../../../CHANGELOG.md:1726 msgid "Account deletion" msgstr "" -#: ../../../CHANGELOG:1830 +#: ../../../CHANGELOG.md:1728 msgid "" "Users can now delete their account themselves, without involving an " "administrator." msgstr "" -#: ../../../CHANGELOG:1832 +#: ../../../CHANGELOG.md:1730 msgid "" "The deletion process will remove any local data and objects associated " "with the account, but the username won't be able to new users to avoid " @@ -3586,113 +3924,113 @@ msgid "" " federation." msgstr "" -#: ../../../CHANGELOG:1838 -msgid "`User documentation <https://docs.funkwhale.audio/users/account.html>`__" +#: ../../../CHANGELOG.md:1736 +msgid "[User documentation](https://docs.funkwhale.audio/users/account.html)" msgstr "" -#: ../../../CHANGELOG:1841 +#: ../../../CHANGELOG.md:1738 msgid "Landing and about page redesign [Manual action suggested]" msgstr "" -#: ../../../CHANGELOG:1843 +#: ../../../CHANGELOG.md:1740 msgid "" "In this release, we've completely redesigned the landing and about page, " "by making it more useful and adapted to your pod configuration. Among " "other things, the landing page will now include:" msgstr "" -#: ../../../CHANGELOG:1846 +#: ../../../CHANGELOG.md:1743 msgid "your pod and an excerpt from your pod's description" msgstr "" -#: ../../../CHANGELOG:1847 ../../../CHANGELOG:1859 +#: ../../../CHANGELOG.md:1744 ../../../CHANGELOG.md:1756 msgid "your pod banner image, if any" msgstr "" -#: ../../../CHANGELOG:1848 ../../../CHANGELOG:1860 +#: ../../../CHANGELOG.md:1745 ../../../CHANGELOG.md:1757 msgid "your contact email, if any" msgstr "" -#: ../../../CHANGELOG:1849 +#: ../../../CHANGELOG.md:1746 msgid "the login form" msgstr "" -#: ../../../CHANGELOG:1850 +#: ../../../CHANGELOG.md:1747 msgid "the signup form (if registrations are open on your pod)" msgstr "" -#: ../../../CHANGELOG:1851 +#: ../../../CHANGELOG.md:1748 msgid "some basic statistics about your pod" msgstr "" -#: ../../../CHANGELOG:1852 +#: ../../../CHANGELOG.md:1749 msgid "" "a widget including recently uploaded albums, if anonymous access is " "enabled" msgstr "" -#: ../../../CHANGELOG:1854 +#: ../../../CHANGELOG.md:1751 msgid "" "The landing page will still include some information about Funkwhale, but" " in a less intrusive and proeminent way than before." msgstr "" -#: ../../../CHANGELOG:1856 +#: ../../../CHANGELOG.md:1753 msgid "Additionally, the about page now includes:" msgstr "" -#: ../../../CHANGELOG:1858 +#: ../../../CHANGELOG.md:1755 msgid "your pod name, description, rules and terms" msgstr "" -#: ../../../CHANGELOG:1861 +#: ../../../CHANGELOG.md:1758 msgid "comprehensive statistics about your pod" msgstr "" -#: ../../../CHANGELOG:1862 +#: ../../../CHANGELOG.md:1759 msgid "" "some info about your pod configuration, such as registration and " "federation status or the default upload quota for new users" msgstr "" -#: ../../../CHANGELOG:1864 +#: ../../../CHANGELOG.md:1761 msgid "With this redesign, we've added a handful of additional pod settings:" msgstr "" -#: ../../../CHANGELOG:1866 +#: ../../../CHANGELOG.md:1763 msgid "Pod banner image" msgstr "" -#: ../../../CHANGELOG:1867 +#: ../../../CHANGELOG.md:1764 msgid "Contact email" msgstr "" -#: ../../../CHANGELOG:1868 +#: ../../../CHANGELOG.md:1765 msgid "Rules" msgstr "" -#: ../../../CHANGELOG:1869 +#: ../../../CHANGELOG.md:1766 msgid "Terms of service" msgstr "" -#: ../../../CHANGELOG:1871 +#: ../../../CHANGELOG.md:1768 msgid "" "We recommend taking a few moments to fill these accordingly to your " -"needs, by visiting ``/manage/settings``." +"needs, by visiting `/manage/settings`." msgstr "" -#: ../../../CHANGELOG:1874 +#: ../../../CHANGELOG.md:1770 msgid "Allow-list to restrict federation to trusted domains" msgstr "" -#: ../../../CHANGELOG:1876 +#: ../../../CHANGELOG.md:1772 msgid "" "The Allow-Listing feature grants pod moderators and administrators " "greater control over federation by allowing you to create a pod-wide " "allow-list." msgstr "" -#: ../../../CHANGELOG:1880 +#: ../../../CHANGELOG.md:1776 msgid "" "When allow-listing is enabled, your pod's users will only be able to " "interact with pods included in the allow-list. Any messages, activity, " @@ -3702,134 +4040,134 @@ msgid "" "be able to send anything to your pod." msgstr "" -#: ../../../CHANGELOG:1889 +#: ../../../CHANGELOG.md:1785 msgid "" "If you want to enable this feature on your pod, or learn more, please " -"refer to `our documentation " -"<https://docs.funkwhale.audio/moderator/listing.html>`_!" +"refer to [our " +"documentation](https://docs.funkwhale.audio/moderator/listing.html)!" msgstr "" -#: ../../../CHANGELOG:1892 +#: ../../../CHANGELOG.md:1787 msgid "Periodic message to incite people to support their pod and Funkwhale" msgstr "" -#: ../../../CHANGELOG:1894 +#: ../../../CHANGELOG.md:1789 msgid "" "Users will now be reminded on a regular basis that they can help " "Funkwhale by donating or contributing." msgstr "" -#: ../../../CHANGELOG:1896 +#: ../../../CHANGELOG.md:1791 msgid "" "If specified by the pod admin, a separate and custom message will also be" " displayed in a similar way to provide instructions and links to support " "the pod." msgstr "" -#: ../../../CHANGELOG:1898 +#: ../../../CHANGELOG.md:1793 msgid "" "Both messages will appear for the first time 15 days after signup, in the" " notifications tab. For each message, users can schedule a reminder for a" " later time, or disable the messages entirely." msgstr "" -#: ../../../CHANGELOG:1902 +#: ../../../CHANGELOG.md:1795 msgid "" "Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker " "only]" msgstr "" -#: ../../../CHANGELOG:1904 +#: ../../../CHANGELOG.md:1797 msgid "" "To improve the performance, stability and reliability of Funkwhale's web " "processes, we now recommend using Gunicorn and Uvicorn instead of Daphne." " This combination unlock new use cases such as:" msgstr "" -#: ../../../CHANGELOG:1907 +#: ../../../CHANGELOG.md:1800 msgid "zero-downtime upgrades" msgstr "" -#: ../../../CHANGELOG:1908 +#: ../../../CHANGELOG.md:1801 msgid "configurable number of web worker processes" msgstr "" -#: ../../../CHANGELOG:1910 +#: ../../../CHANGELOG.md:1803 msgid "" "Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable " "under higher workloads compared to Daphne." msgstr "" -#: ../../../CHANGELOG:1912 +#: ../../../CHANGELOG.md:1805 msgid "" "To benefit from this enhancement on existing instances, you need to add " -"``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` file (use a higher number if" -" you want to have more web worker processes)." +"`FUNKWHALE_WEB_WORKERS=1` in your `.env` file (use a higher number if you" +" want to have more web worker processes)." msgstr "" -#: ../../../CHANGELOG:1915 +#: ../../../CHANGELOG.md:1808 msgid "" -"Then, edit your ``/etc/systemd/system/funkwhale-server.service`` and " -"replace the ``ExecStart=`` line with " -"``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn " -"config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k " -"uvicorn.workers.UvicornWorker -b " -"${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}``" +"Then, edit your `/etc/systemd/system/funkwhale-server.service` and " +"replace the `ExecStart=` line with " +"`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application" +" -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b " +"${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}`" msgstr "" -#: ../../../CHANGELOG:1918 +#: ../../../CHANGELOG.md:1811 msgid "" -"Then reload the configuration change with ``sudo systemctl daemon-" -"reload`` and ``sudo systemctl restart funkwhale-server``." +"Then reload the configuration change with `sudo systemctl daemon-reload` " +"and `sudo systemctl restart funkwhale-server`." msgstr "" -#: ../../../CHANGELOG:1922 +#: ../../../CHANGELOG.md:1813 msgid "" "Content-Security-Policy and additional security headers [manual action " "suggested]" msgstr "" -#: ../../../CHANGELOG:1924 +#: ../../../CHANGELOG.md:1815 msgid "" "To improve the security and reduce the attack surface in case of a " "successful exploit, we suggest you add the following Content-Security-" "Policy to your nginx configuration." msgstr "" -#: ../../../CHANGELOG:1927 -msgid "..note::" -msgstr "" - -#: ../../../CHANGELOG:1935 +#: ../../../CHANGELOG.md:1819 msgid "" -"**On non-docker setups**, in ``/etc/nginx/sites-" -"available/funkwhale.conf``::" +"If you are using an S3-compatible store to serve music, you will need to " +"specify the URL of your S3 store in the ``media-src`` and ``img-src`` " +"headers" msgstr "" -#: ../../../CHANGELOG:1957 -msgid "Then reload nginx with ``systemctl reload nginx``." +#: ../../../CHANGELOG.md:1826 +msgid "**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`:" msgstr "" -#: ../../../CHANGELOG:1959 -msgid "**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``::" +#: ../../../CHANGELOG.md:1850 +msgid "Then reload nginx with `systemctl reload nginx`." msgstr "" -#: ../../../CHANGELOG:1981 -msgid "Then reload nginx with ``docker-compose restart nginx``." +#: ../../../CHANGELOG.md:1852 +msgid "**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`:" msgstr "" -#: ../../../CHANGELOG:1984 +#: ../../../CHANGELOG.md:1877 +msgid "Then reload nginx with `docker-compose restart nginx`." +msgstr "" + +#: ../../../CHANGELOG.md:1879 msgid "Rate limiting" msgstr "" -#: ../../../CHANGELOG:1986 +#: ../../../CHANGELOG.md:1881 msgid "" "With this release, rate-limiting on the API is enabled by default, with " "high enough limits to ensure regular users of the app aren't affected. " "Requests beyond allowed limits are answered with a 429 HTTP error." msgstr "" -#: ../../../CHANGELOG:1989 +#: ../../../CHANGELOG.md:1884 msgid "" "For anonymous requests, the limit is applied to the IP address of the " "client, and for authenticated requests, the limit is applied to the " @@ -3837,437 +4175,433 @@ msgid "" "limit than authenticated requests." msgstr "" -#: ../../../CHANGELOG:1992 +#: ../../../CHANGELOG.md:1887 msgid "" "You can disable the rate-limiting feature by adding " -"`THROTTLING_ENABLED=false` to your ``.env`` file and restarting the " +"`THROTTLING_ENABLED=false` to your `.env` file and restarting the " "services. If you are using the Funkwhale API in your project or app and " "want to know more about the limits, please consult " "https://docs.funkwhale.audio/swagger/." msgstr "" -#: ../../../CHANGELOG:1996 +#: ../../../CHANGELOG.md:1890 msgid "" "Broken audio streaming when using S3/Minio and DSub [manual action " "required]" msgstr "" -#: ../../../CHANGELOG:1998 +#: ../../../CHANGELOG.md:1892 msgid "" "Some Subsonic clients, such as DSub, are sending an Authorization headers" " which was forwarded to the S3 storage when streaming, causing some " "issues. If you are using S3 or a compatible storage such as Minio, please" -" add the following in your nginx ``~ /_protected/media/(.+)`` location::" +" add the following in your nginx `~ /_protected/media/(.+)` location:" msgstr "" -#: ../../../CHANGELOG:2005 +#: ../../../CHANGELOG.md:1901 msgid "And reload your nginx process." msgstr "" -#: ../../../CHANGELOG:2008 +#: ../../../CHANGELOG.md:1903 msgid "Detail" msgstr "" -#: ../../../CHANGELOG:2012 +#: ../../../CHANGELOG.md:1907 msgid "" "Added periodical message to incite people to support their pod and " "Funkwhale (#839)" msgstr "" -#: ../../../CHANGELOG:2013 +#: ../../../CHANGELOG.md:1908 msgid "Admins can now add custom CSS from their pod settings (#879)" msgstr "" -#: ../../../CHANGELOG:2014 +#: ../../../CHANGELOG.md:1909 msgid "Allow-list to restrict federation to trusted domains (#853)" msgstr "" -#: ../../../CHANGELOG:2015 +#: ../../../CHANGELOG.md:1910 msgid "Content and account reports (#890)" msgstr "" -#: ../../../CHANGELOG:2016 +#: ../../../CHANGELOG.md:1911 msgid "Dark theme (#756)" msgstr "" -#: ../../../CHANGELOG:2017 +#: ../../../CHANGELOG.md:1912 msgid "Enforce a configurable rate limit on the API to mitigate abuse (#261)" msgstr "" -#: ../../../CHANGELOG:2018 +#: ../../../CHANGELOG.md:1913 msgid "Redesign of the landing and about pages (#872)" msgstr "" -#: ../../../CHANGELOG:2019 +#: ../../../CHANGELOG.md:1914 msgid "Support for genres, via tags (#432)" msgstr "" -#: ../../../CHANGELOG:2020 +#: ../../../CHANGELOG.md:1915 msgid "Users can now delete their account without admin intervention (#852)" msgstr "" -#: ../../../CHANGELOG:2025 +#: ../../../CHANGELOG.md:1919 msgid "" "Added a info message on embed wizard when anonymous access to content is " "disabled (#878)" msgstr "" -#: ../../../CHANGELOG:2026 +#: ../../../CHANGELOG.md:1920 msgid "Added Catalan translation files" msgstr "" -#: ../../../CHANGELOG:2027 +#: ../../../CHANGELOG.md:1921 msgid "Added Czech translation (#844)" msgstr "" -#: ../../../CHANGELOG:2028 +#: ../../../CHANGELOG.md:1922 msgid "Added field to manage user upload quota in Django backend (#903)" msgstr "" -#: ../../../CHANGELOG:2029 +#: ../../../CHANGELOG.md:1923 msgid "" "Added the option to replace the queue's current contents with a selected " "album or track (#761)" msgstr "" -#: ../../../CHANGELOG:2030 +#: ../../../CHANGELOG.md:1924 msgid "Artists with no albums will now show track count on artist card (#895)" msgstr "" -#: ../../../CHANGELOG:2031 +#: ../../../CHANGELOG.md:1925 msgid "Ensure API urls answer with and without a trailing slash (#877)" msgstr "" -#: ../../../CHANGELOG:2032 +#: ../../../CHANGELOG.md:1926 msgid "" "Hardcoded list of supported browsers to avoid unexpected regressions " "(#854)" msgstr "" -#: ../../../CHANGELOG:2033 +#: ../../../CHANGELOG.md:1927 msgid "Hardened security thanks to CSP and additional HTTP headers (#880)" msgstr "" -#: ../../../CHANGELOG:2034 +#: ../../../CHANGELOG.md:1928 msgid "Improve display of search results by including artist and album data" msgstr "" -#: ../../../CHANGELOG:2035 +#: ../../../CHANGELOG.md:1929 msgid "" "Increase the security of JWT token generation by using DJANGO_SECRET_KEY " "as well as user-specific salt for the signature" msgstr "" -#: ../../../CHANGELOG:2036 +#: ../../../CHANGELOG.md:1930 msgid "Mods can now change a library visibility through the admin UI (#548)" msgstr "" -#: ../../../CHANGELOG:2037 +#: ../../../CHANGELOG.md:1931 msgid "New keyboard shortcuts added for enhanced control over audio player (#866)" msgstr "" -#: ../../../CHANGELOG:2038 +#: ../../../CHANGELOG.md:1932 msgid "" "Now refetch remote ActivityPub artists, albums and tracks to avoid local " "stale data" msgstr "" -#: ../../../CHANGELOG:2039 +#: ../../../CHANGELOG.md:1933 msgid "" "Numbers on the stats page will now be formatted in a human readable way " "and will update with the locale (#873)" msgstr "" -#: ../../../CHANGELOG:2040 +#: ../../../CHANGELOG.md:1934 msgid "" "Pickup folder.png and folder.jpg files for cover art when importing from " "CLI (#898)" msgstr "" -#: ../../../CHANGELOG:2041 +#: ../../../CHANGELOG.md:1935 msgid "Prevent usage of too weak passwords (#883)" msgstr "" -#: ../../../CHANGELOG:2042 +#: ../../../CHANGELOG.md:1936 #, python-format msgid "Reduced CSS size by 30% using purgecss" msgstr "" -#: ../../../CHANGELOG:2043 +#: ../../../CHANGELOG.md:1937 msgid "" "Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and" " performance (#862)" msgstr "" -#: ../../../CHANGELOG:2044 +#: ../../../CHANGELOG.md:1938 msgid "Simplified embedded docker reverse proxy IP configuration (#834)" msgstr "" -#: ../../../CHANGELOG:2045 +#: ../../../CHANGELOG.md:1939 msgid "Support embeds on public playlists" msgstr "" -#: ../../../CHANGELOG:2046 +#: ../../../CHANGELOG.md:1940 msgid "Support for M4A/AAC files (#661)" msgstr "" -#: ../../../CHANGELOG:2047 +#: ../../../CHANGELOG.md:1941 msgid "Switched from Semantic-UI to Fomentic-UI" msgstr "" -#: ../../../CHANGELOG:2048 +#: ../../../CHANGELOG.md:1942 msgid "Add dropdown menu to track table (#531)" msgstr "" -#: ../../../CHANGELOG:2049 +#: ../../../CHANGELOG.md:1943 msgid "Display placeholder on homepage when there are no playlists (#892)" msgstr "" -#: ../../../CHANGELOG:2050 +#: ../../../CHANGELOG.md:1944 msgid "Make album cards height independent (#710)" msgstr "" -#: ../../../CHANGELOG:2055 +#: ../../../CHANGELOG.md:1948 msgid "" "Added context strings to en_GB translations so that picking the language " "changes the interface as expected" msgstr "" -#: ../../../CHANGELOG:2056 +#: ../../../CHANGELOG.md:1949 msgid "Ensure selected locale is not reset to browser default when refreshing app" msgstr "" -#: ../../../CHANGELOG:2057 +#: ../../../CHANGELOG.md:1950 msgid "Fix missing license information on track details page (#913)" msgstr "" -#: ../../../CHANGELOG:2058 +#: ../../../CHANGELOG.md:1951 msgid "Fix regression to quota bar color (#897)" msgstr "" -#: ../../../CHANGELOG:2059 +#: ../../../CHANGELOG.md:1952 msgid "Fixed a responsive display issues on 1024px wide screens (#904)" msgstr "" -#: ../../../CHANGELOG:2060 +#: ../../../CHANGELOG.md:1953 msgid "Fixed album art not being retrieved from Ogg/Opus files" msgstr "" -#: ../../../CHANGELOG:2061 +#: ../../../CHANGELOG.md:1954 msgid "Fixed broken embedded player layout after dependency update (#875)" msgstr "" -#: ../../../CHANGELOG:2062 +#: ../../../CHANGELOG.md:1955 msgid "" "Fixed broken external HTTPS request under some scenarios, because of " "missing PyOpenSSL" msgstr "" -#: ../../../CHANGELOG:2063 +#: ../../../CHANGELOG.md:1956 msgid "Fixed broken less listened radio (#912)" msgstr "" -#: ../../../CHANGELOG:2064 +#: ../../../CHANGELOG.md:1957 msgid "Fixed broken URL to artist and album on album and track pages (#871)" msgstr "" -#: ../../../CHANGELOG:2065 +#: ../../../CHANGELOG.md:1958 msgid "" "Fixed empty contentType causing client crash in some Subsonic payloads " "(#893)" msgstr "" -#: ../../../CHANGELOG:2066 +#: ../../../CHANGELOG.md:1959 msgid "" "Fixed import crashing with empty cover file or too long values on some " "fields" msgstr "" -#: ../../../CHANGELOG:2067 +#: ../../../CHANGELOG.md:1960 msgid "" "Fixed in-place imported files not playing under nginx when filename " "contains ? or % (#924)" msgstr "" -#: ../../../CHANGELOG:2068 +#: ../../../CHANGELOG.md:1961 msgid "Fixed remaining transcoding issue with Subsonic API (#867)" msgstr "" -#: ../../../CHANGELOG:2069 +#: ../../../CHANGELOG.md:1962 msgid "" "Fixed search usability issue when browsing artists, albums, radios and " "playlists (#902)" msgstr "" -#: ../../../CHANGELOG:2070 +#: ../../../CHANGELOG.md:1963 msgid "" "Improved performance of /artists, /albums and /tracks API endpoints by a " "factor 2 (#865)" msgstr "" -#: ../../../CHANGELOG:2071 +#: ../../../CHANGELOG.md:1964 msgid "Updated docs to ensure streaming works when using Minio/S3 and DSub (#932)" msgstr "" -#: ../../../CHANGELOG:2083 +#: ../../../CHANGELOG.md:1976 msgid "IISergII" msgstr "" -#: ../../../CHANGELOG:2084 +#: ../../../CHANGELOG.md:1977 msgid "jiri-novacek" msgstr "" -#: ../../../CHANGELOG:2087 +#: ../../../CHANGELOG.md:1980 msgid "Koen" msgstr "" -#: ../../../CHANGELOG:2088 +#: ../../../CHANGELOG.md:1981 msgid "Manuel Cortez" msgstr "" -#: ../../../CHANGELOG:2091 ../../../CHANGELOG:2359 +#: ../../../CHANGELOG.md:1984 ../../../CHANGELOG.md:2230 msgid "nouts" msgstr "" -#: ../../../CHANGELOG:2092 ../../../CHANGELOG:2362 +#: ../../../CHANGELOG.md:1985 ../../../CHANGELOG.md:2233 msgid "Quentí" msgstr "" -#: ../../../CHANGELOG:2094 ../../../CHANGELOG:2364 +#: ../../../CHANGELOG.md:1987 ../../../CHANGELOG.md:2235 msgid "Rodrigo Leite" msgstr "" -#: ../../../CHANGELOG:2095 -msgid "Romain Failliot" -msgstr "" - -#: ../../../CHANGELOG:2097 ../../../CHANGELOG:2365 +#: ../../../CHANGELOG.md:1990 ../../../CHANGELOG.md:2236 msgid "Sylke Vicious" msgstr "" -#: ../../../CHANGELOG:2098 +#: ../../../CHANGELOG.md:1991 msgid "Tobias Reisinger" msgstr "" -#: ../../../CHANGELOG:2104 +#: ../../../CHANGELOG.md:1995 msgid "0.19.1 (2019-06-28)" msgstr "" -#: ../../../CHANGELOG:2111 +#: ../../../CHANGELOG.md:2001 msgid "" "The currently playing track is now highlighted with an orange play icon " "(#832)" msgstr "" -#: ../../../CHANGELOG:2112 +#: ../../../CHANGELOG.md:2002 msgid "Support for importing files with no album tag (#122)" msgstr "" -#: ../../../CHANGELOG:2113 +#: ../../../CHANGELOG.md:2003 msgid "Redirect from / to /library when user is logged in (#864)" msgstr "" -#: ../../../CHANGELOG:2114 +#: ../../../CHANGELOG.md:2004 msgid "" "Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients " "that don't provide the format parameter (#867)" msgstr "" -#: ../../../CHANGELOG:2115 +#: ../../../CHANGELOG.md:2005 msgid "Added button to search for objects on Discogs (#368)" msgstr "" -#: ../../../CHANGELOG:2116 +#: ../../../CHANGELOG.md:2006 msgid "Added copy-to-clipboard button with Subsonic password input (#814)" msgstr "" -#: ../../../CHANGELOG:2117 +#: ../../../CHANGELOG.md:2007 msgid "Added opus to the list of supported mimetypes and extensions (#868)" msgstr "" -#: ../../../CHANGELOG:2118 +#: ../../../CHANGELOG.md:2008 msgid "Aligned search headers with search results in the sidebar (#708)" msgstr "" -#: ../../../CHANGELOG:2119 +#: ../../../CHANGELOG.md:2009 msgid "" "Clicking on the currently selected playlist in the Playlist popup will " "now close the popup (#807)" msgstr "" -#: ../../../CHANGELOG:2120 +#: ../../../CHANGELOG.md:2010 msgid "" "Favorites radio will not be visible if the user does not have any " "favorites (#419)" msgstr "" -#: ../../../CHANGELOG:2125 +#: ../../../CHANGELOG.md:2014 msgid "" "Ensure empty but optional fields in file metadata don't error during " "import (#850)" msgstr "" -#: ../../../CHANGELOG:2126 +#: ../../../CHANGELOG.md:2015 msgid "Fix broken upload for specific files when using S3 storage (#857)" msgstr "" -#: ../../../CHANGELOG:2127 +#: ../../../CHANGELOG.md:2016 msgid "Fixed broken translation on home and track detail page (#833)" msgstr "" -#: ../../../CHANGELOG:2128 +#: ../../../CHANGELOG.md:2017 msgid "" "Fixed broken user admin for users with non-digit or letters in their " "username (#869)" msgstr "" -#: ../../../CHANGELOG:2129 +#: ../../../CHANGELOG.md:2018 msgid "Fixed invalid file extension for transcoded tracks (#848)" msgstr "" -#: ../../../CHANGELOG:2130 +#: ../../../CHANGELOG.md:2019 msgid "Fixed issue with French translation for \"Start radio\" (#849)" msgstr "" -#: ../../../CHANGELOG:2131 +#: ../../../CHANGELOG.md:2020 msgid "" "Fixed issue with player changing height when hovering over the volume " "slider (#838)" msgstr "" -#: ../../../CHANGELOG:2132 +#: ../../../CHANGELOG.md:2021 msgid "Fixed secondary menus truncated on narrow screens (#855)" msgstr "" -#: ../../../CHANGELOG:2133 +#: ../../../CHANGELOG.md:2022 msgid "Fixed wrong og:image url when using S3 storage (#851)" msgstr "" -#: ../../../CHANGELOG:2134 +#: ../../../CHANGELOG.md:2023 msgid "Hide pod statistics on about page if those are disabled (#835)" msgstr "" -#: ../../../CHANGELOG:2135 +#: ../../../CHANGELOG.md:2024 msgid "Use ASCII filename before upload to S3 to avoid playback issues (#847)" msgstr "" -#: ../../../CHANGELOG:2138 +#: ../../../CHANGELOG.md:2026 msgid "Contributors to this release (committers and reviewers):" msgstr "" -#: ../../../CHANGELOG:2142 +#: ../../../CHANGELOG.md:2030 msgid "ealgase" msgstr "" -#: ../../../CHANGELOG:2153 +#: ../../../CHANGELOG.md:2039 msgid "0.19.0 (2019-05-16)" msgstr "" -#: ../../../CHANGELOG:2160 +#: ../../../CHANGELOG.md:2043 msgid "Edits on tracks, albums and artists" msgstr "" -#: ../../../CHANGELOG:2162 +#: ../../../CHANGELOG.md:2045 msgid "" "Funkwhale was a bit annoying when it camed to metadata. Tracks, albums " "and artists profiles were created from audio file tags, but basically " @@ -4275,58 +4609,58 @@ msgid "" "wasn't ideal to do this kind of changes)." msgstr "" -#: ../../../CHANGELOG:2166 +#: ../../../CHANGELOG.md:2049 msgid "" "With this release, everyone can suggest changes on track, album and " "artist pages. Users with the \"library\" permission can review suggested " "edits in a dedicated interface and apply/reject them." msgstr "" -#: ../../../CHANGELOG:2170 +#: ../../../CHANGELOG.md:2053 msgid "" "Approved edits are broadcasted via federation, to ensure other instances " "get the information too." msgstr "" -#: ../../../CHANGELOG:2173 +#: ../../../CHANGELOG.md:2056 msgid "" "Not all fields are currently modifiable using this feature. Especially, " "it's not possible to suggest a new album cover, or reassign a track to a " "different album or artist. Those will be implemented in a future release." msgstr "" -#: ../../../CHANGELOG:2178 +#: ../../../CHANGELOG.md:2060 msgid "Admin UI for tracks, albums, artists, libraries and uploads" msgstr "" -#: ../../../CHANGELOG:2180 +#: ../../../CHANGELOG.md:2062 msgid "" "As part of our ongoing effort to make Funkwhale easier to manage for " "instance owners, this release includes a brand new administration " "interface to deal with:" msgstr "" -#: ../../../CHANGELOG:2183 +#: ../../../CHANGELOG.md:2065 msgid "tracks" msgstr "" -#: ../../../CHANGELOG:2184 +#: ../../../CHANGELOG.md:2066 msgid "albums" msgstr "" -#: ../../../CHANGELOG:2185 +#: ../../../CHANGELOG.md:2067 msgid "artists" msgstr "" -#: ../../../CHANGELOG:2186 +#: ../../../CHANGELOG.md:2068 msgid "libraries" msgstr "" -#: ../../../CHANGELOG:2187 +#: ../../../CHANGELOG.md:2069 msgid "uploads" msgstr "" -#: ../../../CHANGELOG:2189 +#: ../../../CHANGELOG.md:2071 msgid "" "You can use this UI to quickly search for any object, delete objects in " "batch, understand where they are coming from etc. This new UI should " @@ -4334,60 +4668,60 @@ msgid "" "cases (but also includes a link to Django's admin when needed)." msgstr "" -#: ../../../CHANGELOG:2194 +#: ../../../CHANGELOG.md:2075 msgid "Artist hiding in the interface" msgstr "" -#: ../../../CHANGELOG:2196 +#: ../../../CHANGELOG.md:2077 msgid "It's now possible for users to hide artists they don't want to see." msgstr "" -#: ../../../CHANGELOG:2198 +#: ../../../CHANGELOG.md:2079 msgid "" "Content linked to hidden artists will not show up in the interface " "anymore. Especially:" msgstr "" -#: ../../../CHANGELOG:2200 +#: ../../../CHANGELOG.md:2081 msgid "Hidden artists tracks are removed from the current queue" msgstr "" -#: ../../../CHANGELOG:2201 +#: ../../../CHANGELOG.md:2082 msgid "Starting a playlist will skip tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2202 +#: ../../../CHANGELOG.md:2083 msgid "" "Recently favorited, recently listened and recently added widgets on the " "homepage won't include content from hidden artists" msgstr "" -#: ../../../CHANGELOG:2203 +#: ../../../CHANGELOG.md:2084 msgid "Radio suggestions will exclude tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2204 +#: ../../../CHANGELOG.md:2085 msgid "Hidden artists won't appear in Subsonic apps" msgstr "" -#: ../../../CHANGELOG:2206 +#: ../../../CHANGELOG.md:2087 msgid "" "Results linked to hidden artists will continue to show up in search " "results and their profile page remains accessible." msgstr "" -#: ../../../CHANGELOG:2209 +#: ../../../CHANGELOG.md:2089 msgid "OAuth2 authorization for better integration with third-party apps" msgstr "" -#: ../../../CHANGELOG:2211 +#: ../../../CHANGELOG.md:2091 msgid "" "Funkwhale now support the OAuth2 authorization and authentication " "protocol which will allow third-party apps to interact with Funkwhale on " "behalf of users." msgstr "" -#: ../../../CHANGELOG:2214 +#: ../../../CHANGELOG.md:2094 msgid "" "This feature makes it possible to build third-party apps that have the " "same capabilities as Funkwhale's Web UI. The only exception at the moment" @@ -4396,18 +4730,18 @@ msgid "" "release)." msgstr "" -#: ../../../CHANGELOG:2219 +#: ../../../CHANGELOG.md:2099 msgid "" "If you want to start building an app on top of Funkwhale's API, please " "check-out https://docs.funkwhale.audio/api.html and " "https://docs.funkwhale.audio/developers/authentication.html." msgstr "" -#: ../../../CHANGELOG:2223 +#: ../../../CHANGELOG.md:2102 msgid "Better error handling and display during import" msgstr "" -#: ../../../CHANGELOG:2225 +#: ../../../CHANGELOG.md:2104 msgid "" "Funkwhale should now be more resilient to missing tags in imported files," " and give you more insights when something goes wrong, including the " @@ -4415,52 +4749,53 @@ msgid "" "information to share in your support requests." msgstr "" -#: ../../../CHANGELOG:2229 +#: ../../../CHANGELOG.md:2108 msgid "" "This information is available in all pages that list uploads, when " "clicking on the button next to the upload status." msgstr "" -#: ../../../CHANGELOG:2232 +#: ../../../CHANGELOG.md:2110 msgid "Support for S3-compatible storages to store media files" msgstr "" -#: ../../../CHANGELOG:2234 +#: ../../../CHANGELOG.md:2112 msgid "" "Storing all media files on the Funkwhale server itself may not be " "possible or desirable in all scenarios. You can now configure Funkwhale " "to store those files in a S3 bucket instead." msgstr "" -#: ../../../CHANGELOG:2238 +#: ../../../CHANGELOG.md:2116 msgid "" "Check-out https://docs.funkwhale.audio/admin/external-storages.html if " "you want to use this feature." msgstr "" -#: ../../../CHANGELOG:2242 +#: ../../../CHANGELOG.md:2119 msgid "Prune library command" msgstr "" -#: ../../../CHANGELOG:2244 +#: ../../../CHANGELOG.md:2121 msgid "" "Users are often surprised by Funkwhale's tendency to keep track, album " "and artist metadata even if no associated files exist." msgstr "" -#: ../../../CHANGELOG:2247 +#: ../../../CHANGELOG.md:2124 msgid "" -"To help with that, we now offer a ``prune_library`` management command " -"you can run to purge your database from obsolete entries. `Please refer " -"to our documentation for usage instructions " -"<https://docs.funkwhale.audio/admin/commands.html#pruning-library>`__." +"To help with that, we now offer a `prune_library` management command you " +"can run to purge your database from obsolete entries. [Please refer to " +"our documentation for usage " +"instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-" +"library)." msgstr "" -#: ../../../CHANGELOG:2252 +#: ../../../CHANGELOG.md:2127 msgid "Check in-place files command" msgstr "" -#: ../../../CHANGELOG:2254 +#: ../../../CHANGELOG.md:2129 msgid "" "When using in-place import with a living audio library, you'll quite " "often rename or remove files from the file system. Unfortunately, " @@ -4468,552 +4803,552 @@ msgid "" " in unplayable tracks." msgstr "" -#: ../../../CHANGELOG:2258 +#: ../../../CHANGELOG.md:2133 msgid "" -"To help with that, we now offer a ``check_inplace_files`` management " -"command you can run to purge your database from obsolete files. `Please " -"refer to our documentation for usage instructions " -"<https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-" -"from-database>`__." +"To help with that, we now offer a `check_inplace_files` management " +"command you can run to purge your database from obsolete files. [Please " +"refer to our documentation for usage " +"instructions](https://docs.funkwhale.audio/admin/commands.html#remove-" +"obsolete-files-from-database)." msgstr "" -#: ../../../CHANGELOG:2265 +#: ../../../CHANGELOG.md:2138 msgid "" "Added albums view. Similar to artists view, it's viewable by clicking on " "the \"Albums\" link on the top bar. (#356)" msgstr "" -#: ../../../CHANGELOG:2266 +#: ../../../CHANGELOG.md:2139 msgid "Allow artists hiding (#701)" msgstr "" -#: ../../../CHANGELOG:2267 +#: ../../../CHANGELOG.md:2140 msgid "Change the document title to display current track information. (#359)" msgstr "" -#: ../../../CHANGELOG:2268 +#: ../../../CHANGELOG.md:2141 msgid "" "Display a confirmation dialog when adding duplicate songs to a playlist " "(#784)" msgstr "" -#: ../../../CHANGELOG:2269 +#: ../../../CHANGELOG.md:2142 msgid "" "Improved error handling and display during import (#252, #718, #583, " "#501, #544)" msgstr "" -#: ../../../CHANGELOG:2270 +#: ../../../CHANGELOG.md:2143 msgid "Support embedding full artist discographies (#747)" msgstr "" -#: ../../../CHANGELOG:2271 +#: ../../../CHANGELOG.md:2144 msgid "" "Support metadata update on tracks, albums and artists and broadcast those" " on the federation (#689)" msgstr "" -#: ../../../CHANGELOG:2272 +#: ../../../CHANGELOG.md:2145 msgid "" "Support OAuth2 authorization for better integration with third-party apps" " (#752)" msgstr "" -#: ../../../CHANGELOG:2273 +#: ../../../CHANGELOG.md:2146 msgid "Support S3-compatible storages for media files (#565)" msgstr "" -#: ../../../CHANGELOG:2278 +#: ../../../CHANGELOG.md:2150 msgid "" "[Experimental] Added a new \"Similar\" radio based on users history " "(suggested by @gordon)" msgstr "" -#: ../../../CHANGELOG:2279 +#: ../../../CHANGELOG.md:2151 msgid "" "Added a \"load more\" button on artist pages to load more tracks/albums " "(#719)" msgstr "" -#: ../../../CHANGELOG:2280 +#: ../../../CHANGELOG.md:2152 msgid "" "Added a `check_inplace_files` management command to remove purge the " "database from references to in-place imported files that don't exist on " "disk anymore (#781)" msgstr "" -#: ../../../CHANGELOG:2281 +#: ../../../CHANGELOG.md:2153 msgid "" "Added a prune_library management command to remove obsolete metadata from" " the database (#777)" msgstr "" -#: ../../../CHANGELOG:2282 +#: ../../../CHANGELOG.md:2154 msgid "" "Added admin options to disable login for users, ensure related content is" " deleted when deleting a user account (#809)" msgstr "" -#: ../../../CHANGELOG:2283 +#: ../../../CHANGELOG.md:2155 msgid "" "Added standardized translation context for all strings in the frontend to" " give accurate hints to translators." msgstr "" -#: ../../../CHANGELOG:2284 +#: ../../../CHANGELOG.md:2156 msgid "" -"Added twitter:* meta tags to detect tracks and albums players " +"Added twitter:\\* meta tags to detect tracks and albums players " "automatically on more sites (#578) Improved responsiveness of embedded " "player" msgstr "" -#: ../../../CHANGELOG:2286 +#: ../../../CHANGELOG.md:2158 msgid "" "Advertise the list of supported upload extensions in the Nodeinfo " "endpoint (#808)" msgstr "" -#: ../../../CHANGELOG:2287 +#: ../../../CHANGELOG.md:2159 msgid "" "Better handling of follow/accept messages to avoid and recover from " "desync between instances (#830)" msgstr "" -#: ../../../CHANGELOG:2288 +#: ../../../CHANGELOG.md:2160 msgid "Better workflow for connecting to another instance (#715)" msgstr "" -#: ../../../CHANGELOG:2290 +#: ../../../CHANGELOG.md:2162 msgid "" "Changing the instance used is now better integrated in the App, and it is" " checked that the chosen instance and the suggested instances are valid " "and running Funkwhale servers." msgstr "" -#: ../../../CHANGELOG:2291 +#: ../../../CHANGELOG.md:2164 msgid "Bumped dependencies to latest versions (#815)" msgstr "" -#: ../../../CHANGELOG:2292 +#: ../../../CHANGELOG.md:2165 msgid "Descriptions will now be shown underneath user libraries (#768)" msgstr "" -#: ../../../CHANGELOG:2293 +#: ../../../CHANGELOG.md:2166 msgid "Don't store unhandled ActivityPub messages in database (#776)" msgstr "" -#: ../../../CHANGELOG:2294 +#: ../../../CHANGELOG.md:2167 msgid "Enhanced the design of the embed wizard. (!619)" msgstr "" -#: ../../../CHANGELOG:2295 +#: ../../../CHANGELOG.md:2168 msgid "Ensure the footer always stays at the bottom of the page" msgstr "" -#: ../../../CHANGELOG:2296 +#: ../../../CHANGELOG.md:2169 msgid "" "Expose an instance-level actor (service@domain) in nodeinfo endpoint " "(#689)" msgstr "" -#: ../../../CHANGELOG:2297 +#: ../../../CHANGELOG.md:2170 msgid "Improved readability of logo (#385)" msgstr "" -#: ../../../CHANGELOG:2298 +#: ../../../CHANGELOG.md:2171 msgid "" "Keep persistent connections to the database instead of recreating a new " "one for each request" msgstr "" -#: ../../../CHANGELOG:2299 +#: ../../../CHANGELOG.md:2172 msgid "" "Labels for privacy levels are now consistently grabbed from a common " "source instead of being hardcoded every time they are needed." msgstr "" -#: ../../../CHANGELOG:2300 +#: ../../../CHANGELOG.md:2173 msgid "" "Merged artist/album buttons with title text on artist and album pages " "(#725)" msgstr "" -#: ../../../CHANGELOG:2301 +#: ../../../CHANGELOG.md:2174 msgid "Now honor maxBitrate parameter in Subsonic API (#802)" msgstr "" -#: ../../../CHANGELOG:2302 +#: ../../../CHANGELOG.md:2175 msgid "Preload next track in queue (#572)" msgstr "" -#: ../../../CHANGELOG:2303 +#: ../../../CHANGELOG.md:2176 msgid "" "Reduced app size for regular users by moving admin-related code in a " "dedicated chunk (#805)" msgstr "" -#: ../../../CHANGELOG:2304 +#: ../../../CHANGELOG.md:2177 msgid "Removed broken/instable lyrics feature (#799)" msgstr "" -#: ../../../CHANGELOG:2305 +#: ../../../CHANGELOG.md:2178 msgid "" "Show remaining storage space during import and prevent file upload if not" " enough space is remaining (#550)" msgstr "" -#: ../../../CHANGELOG:2306 +#: ../../../CHANGELOG.md:2179 msgid "" "The buttons displaying an icon now always show a little divider between " "the icon and the text. (!620)" msgstr "" -#: ../../../CHANGELOG:2307 +#: ../../../CHANGELOG.md:2180 msgid "Use attributedTo instead of actor in library ActivityPub payload (#619)" msgstr "" -#: ../../../CHANGELOG:2308 +#: ../../../CHANGELOG.md:2181 msgid "Use network/depends_on instead of links in docker-compose.yml (!716)" msgstr "" -#: ../../../CHANGELOG:2313 +#: ../../../CHANGELOG.md:2185 msgid "Add missing command from contributing file (#754)" msgstr "" -#: ../../../CHANGELOG:2314 +#: ../../../CHANGELOG.md:2186 msgid "Add required envvar for dev environment (!668)" msgstr "" -#: ../../../CHANGELOG:2315 +#: ../../../CHANGELOG.md:2187 msgid "" "Added env variable to set AWS region and signature version to serve media" " without proxy (#826)" msgstr "" -#: ../../../CHANGELOG:2316 +#: ../../../CHANGELOG.md:2188 msgid "" "Allow users with dots in their usernames to request a subsonic password " "(#798)" msgstr "" -#: ../../../CHANGELOG:2317 +#: ../../../CHANGELOG.md:2189 msgid "" "Better handling of featuring/multi-artist tracks tagged with MusicBrainz " "(#782)" msgstr "" -#: ../../../CHANGELOG:2318 +#: ../../../CHANGELOG.md:2190 msgid "" "Do not consider tracks as duplicates during import if they have different" " positions (#740)" msgstr "" -#: ../../../CHANGELOG:2319 +#: ../../../CHANGELOG.md:2191 msgid "Ensure all our ActivityPub fetches are authenticated (#758)" msgstr "" -#: ../../../CHANGELOG:2320 +#: ../../../CHANGELOG.md:2192 msgid "" "Ensure correct track duration and playable status when browsing radios " "(#812)" msgstr "" -#: ../../../CHANGELOG:2321 +#: ../../../CHANGELOG.md:2193 msgid "Fixed alignment/size issue with some buttons (#702)" msgstr "" -#: ../../../CHANGELOG:2322 +#: ../../../CHANGELOG.md:2194 msgid "Fixed an encoding issue with instance name on about page (#828)" msgstr "" -#: ../../../CHANGELOG:2323 +#: ../../../CHANGELOG.md:2195 msgid "" "Fixed cover not showing in queue/player when playing tracks from " "\"albums\" tab (#795)" msgstr "" -#: ../../../CHANGELOG:2324 +#: ../../../CHANGELOG.md:2196 msgid "Fixed crashing upload processing on invalid date format (#718)" msgstr "" -#: ../../../CHANGELOG:2325 +#: ../../../CHANGELOG.md:2197 msgid "Fixed dev command for fake data creation (!664)" msgstr "" -#: ../../../CHANGELOG:2326 +#: ../../../CHANGELOG.md:2198 msgid "Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824)" msgstr "" -#: ../../../CHANGELOG:2327 +#: ../../../CHANGELOG.md:2199 msgid "Fixed invalid required fields in Upload django's admin (#819)" msgstr "" -#: ../../../CHANGELOG:2328 +#: ../../../CHANGELOG.md:2200 msgid "Fixed issue with querying the albums api endpoint (#356)" msgstr "" -#: ../../../CHANGELOG:2329 +#: ../../../CHANGELOG.md:2201 msgid "Fixed non-transparent background for volume range on Firefox (#722)" msgstr "" -#: ../../../CHANGELOG:2330 +#: ../../../CHANGELOG.md:2202 msgid "Fixed overflowing input on account detail page (#791)" msgstr "" -#: ../../../CHANGELOG:2331 +#: ../../../CHANGELOG.md:2203 msgid "Fixed unplayable radios for anonymous users (#563)" msgstr "" -#: ../../../CHANGELOG:2332 +#: ../../../CHANGELOG.md:2204 msgid "Prevent skipping on file import if album_mbid is different (#772)" msgstr "" -#: ../../../CHANGELOG:2333 +#: ../../../CHANGELOG.md:2205 msgid "Use proper site name/domain in emails (#806)" msgstr "" -#: ../../../CHANGELOG:2334 +#: ../../../CHANGELOG.md:2206 msgid "" "Width of filter menus for radios has been set to stop text from " "overlapping the borders" msgstr "" -#: ../../../CHANGELOG:2339 +#: ../../../CHANGELOG.md:2210 msgid "Document how to use Redis over unix sockets (#770)" msgstr "" -#: ../../../CHANGELOG:2341 +#: ../../../CHANGELOG.md:2212 msgid "Contributors to this release (committers and translators):" msgstr "" -#: ../../../CHANGELOG:2343 +#: ../../../CHANGELOG.md:2214 msgid "Ale London" msgstr "" -#: ../../../CHANGELOG:2344 +#: ../../../CHANGELOG.md:2215 msgid "Alexander" msgstr "" -#: ../../../CHANGELOG:2345 +#: ../../../CHANGELOG.md:2216 msgid "Ben Finney" msgstr "" -#: ../../../CHANGELOG:2348 +#: ../../../CHANGELOG.md:2219 msgid "Damien Nicolas" msgstr "" -#: ../../../CHANGELOG:2351 +#: ../../../CHANGELOG.md:2222 msgid "Elza Gelez" msgstr "" -#: ../../../CHANGELOG:2352 +#: ../../../CHANGELOG.md:2223 msgid "gerry_the_hat" msgstr "" -#: ../../../CHANGELOG:2353 +#: ../../../CHANGELOG.md:2224 msgid "gordon" msgstr "" -#: ../../../CHANGELOG:2355 +#: ../../../CHANGELOG.md:2226 msgid "jake" msgstr "" -#: ../../../CHANGELOG:2356 +#: ../../../CHANGELOG.md:2227 msgid "Jee" msgstr "" -#: ../../../CHANGELOG:2360 +#: ../../../CHANGELOG.md:2231 msgid "Pierrick" msgstr "" -#: ../../../CHANGELOG:2361 +#: ../../../CHANGELOG.md:2232 msgid "Qasim Ali" msgstr "" -#: ../../../CHANGELOG:2366 +#: ../../../CHANGELOG.md:2237 msgid "Thomas Brockmöller" msgstr "" -#: ../../../CHANGELOG:2367 +#: ../../../CHANGELOG.md:2238 msgid "Tixie" msgstr "" -#: ../../../CHANGELOG:2368 +#: ../../../CHANGELOG.md:2239 msgid "Vierkantor" msgstr "" -#: ../../../CHANGELOG:2369 +#: ../../../CHANGELOG.md:2240 msgid "Von" msgstr "" -#: ../../../CHANGELOG:2370 +#: ../../../CHANGELOG.md:2241 msgid "Zach Halasz" msgstr "" -#: ../../../CHANGELOG:2373 +#: ../../../CHANGELOG.md:2243 msgid "0.18.3 (2019-03-21)" msgstr "" -#: ../../../CHANGELOG:2380 +#: ../../../CHANGELOG.md:2247 msgid "" "Avoid mixed content when deploying mono-container behind proxy [Manual " "action required]" msgstr "" -#: ../../../CHANGELOG:2382 +#: ../../../CHANGELOG.md:2249 msgid "" -"*You are only concerned if you use the mono-container docker deployment " -"behind a reverse proxy*" +"_You are only concerned if you use the mono-container docker deployment " +"behind a reverse proxy_" msgstr "" -#: ../../../CHANGELOG:2384 +#: ../../../CHANGELOG.md:2251 msgid "" -"Because of `an issue in our mono-container configuration " -"<https://github.com/thetarkus/docker-funkwhale/issues/19>`_, users " -"deploying Funkwhale via docker using our `funkwhale/all-in-one` image " -"could face some mixed content warnings (and possibly other troubles) when" -" browsing the Web UI." +"Because of [an issue in our mono-container " +"configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), " +"users deploying Funkwhale via docker using our `funkwhale/all-in-one` " +"image could face some mixed content warnings (and possibly other " +"troubles) when browsing the Web UI." msgstr "" -#: ../../../CHANGELOG:2388 +#: ../../../CHANGELOG.md:2255 msgid "" "This is fixed in this release, but on existing deployments, you'll need " -"to add ``NESTED_PROXY=1`` in your container environment (either in your " -"``.env`` file, or via your container management tool), then recreate your" -" funkwhale container." +"to add `NESTED_PROXY=1` in your container environment (either in your " +"`.env` file, or via your container management tool), then recreate your " +"funkwhale container." msgstr "" -#: ../../../CHANGELOG:2394 +#: ../../../CHANGELOG.md:2260 msgid "Added title on hover for truncated content (#766)" msgstr "" -#: ../../../CHANGELOG:2395 +#: ../../../CHANGELOG.md:2261 msgid "" "Ask for confirmation before leaving upload page if there is a an upload " "in process (#630)" msgstr "" -#: ../../../CHANGELOG:2396 +#: ../../../CHANGELOG.md:2262 msgid "Exclude in-place imported files from quota computation (#570)" msgstr "" -#: ../../../CHANGELOG:2397 +#: ../../../CHANGELOG.md:2263 msgid "" "Truncate filename in library file table to ensure correct display of the " "table. (#735)" msgstr "" -#: ../../../CHANGELOG:2402 +#: ../../../CHANGELOG.md:2267 msgid "" "Avoid mixed content when deploying mono-container behind HTTPS proxy " "(thetarkus/docker-funkwhale#19)" msgstr "" -#: ../../../CHANGELOG:2403 +#: ../../../CHANGELOG.md:2268 msgid "Display new notifications immediately on notifications page (#729)" msgstr "" -#: ../../../CHANGELOG:2404 +#: ../../../CHANGELOG.md:2269 msgid "" "Ensure cover art from uploaded files is picked up properly on existing " "albums (#757)" msgstr "" -#: ../../../CHANGELOG:2405 +#: ../../../CHANGELOG.md:2270 msgid "Fixed a crash when federating a track with unspecified position" msgstr "" -#: ../../../CHANGELOG:2406 +#: ../../../CHANGELOG.md:2271 msgid "Fixed broken Activity and Actor modules in django admin (#767)" msgstr "" -#: ../../../CHANGELOG:2407 +#: ../../../CHANGELOG.md:2272 msgid "Fixed broken sample apache configuration (#764)" msgstr "" -#: ../../../CHANGELOG:2408 +#: ../../../CHANGELOG.md:2273 msgid "Fixed constant and unpredictable reordering during file upload (#716)" msgstr "" -#: ../../../CHANGELOG:2409 +#: ../../../CHANGELOG.md:2274 msgid "" "Fixed delivering of local activities causing unintended side effects, " "such as rollbacking changes (#737)" msgstr "" -#: ../../../CHANGELOG:2410 +#: ../../../CHANGELOG.md:2275 msgid "Fixed escaping issues in translated strings (#652)" msgstr "" -#: ../../../CHANGELOG:2411 +#: ../../../CHANGELOG.md:2276 msgid "Fixed saving moderation policy when clicking on \"Cancel\" (#751)" msgstr "" -#: ../../../CHANGELOG:2412 +#: ../../../CHANGELOG.md:2277 msgid "i18n: Update page title when changing the App's language. (#511)" msgstr "" -#: ../../../CHANGELOG:2413 +#: ../../../CHANGELOG.md:2278 msgid "Include disc number in Subsonic responses (#765)" msgstr "" -#: ../../../CHANGELOG:2414 +#: ../../../CHANGELOG.md:2279 msgid "Do not send notification when rejecting a follow on a local library (#743)" msgstr "" -#: ../../../CHANGELOG:2419 +#: ../../../CHANGELOG.md:2283 msgid "Added documentation on mono-container docker upgrade (#713)" msgstr "" -#: ../../../CHANGELOG:2420 +#: ../../../CHANGELOG.md:2284 msgid "Added documentation to set up let's encrypt certificate (#745)" msgstr "" -#: ../../../CHANGELOG:2424 +#: ../../../CHANGELOG.md:2286 msgid "0.18.2 (2019-02-13)" msgstr "" -#: ../../../CHANGELOG:2431 +#: ../../../CHANGELOG.md:2292 msgid "" "Added a 'fix_federation_ids' management command to deal with " "protocol/domain issues in federation IDs after deployments (#706)" msgstr "" -#: ../../../CHANGELOG:2433 +#: ../../../CHANGELOG.md:2294 msgid "" "Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an" " HTTP request (#705)" msgstr "" -#: ../../../CHANGELOG:2438 +#: ../../../CHANGELOG.md:2298 msgid "Downgraded channels dependency to 2.1.6 to fix denied uploads (#697)" msgstr "" -#: ../../../CHANGELOG:2439 +#: ../../../CHANGELOG.md:2299 msgid "Fixed cards display issues on medium/small screens (#707)" msgstr "" -#: ../../../CHANGELOG:2440 +#: ../../../CHANGELOG.md:2300 msgid "" "Fixed Embed component name that could lead to issue when developping on " "OSX (#696)" msgstr "" -#: ../../../CHANGELOG:2441 +#: ../../../CHANGELOG.md:2301 msgid "Fixed resizing issues for album cards on artist pages (#694)" msgstr "" -#: ../../../CHANGELOG:2445 +#: ../../../CHANGELOG.md:2303 msgid "0.18.1 (2019-01-29)" msgstr "" -#: ../../../CHANGELOG:2452 +#: ../../../CHANGELOG.md:2307 msgid "" "Fix Gzip compression to avoid BREACH exploit [security] [manual action " "required]" msgstr "" -#: ../../../CHANGELOG:2454 +#: ../../../CHANGELOG.md:2309 msgid "" "In the 0.18 release, we've enabled Gzip compression by default for " "various content types, including HTML and JSON. Unfortunately, enabling " @@ -5021,135 +5356,135 @@ msgid "" "possible." msgstr "" -#: ../../../CHANGELOG:2458 +#: ../../../CHANGELOG.md:2313 msgid "" "We've removed the risky content-types from our nginx template files, to " "ensure new instances are safe, however, if you already have an instance, " "you need to double check that your host nginx virtualhost do not include " -"the following values for the ``gzip_types`` settings::" +"the following values for the `gzip_types` settings:" msgstr "" -#: ../../../CHANGELOG:2472 +#: ../../../CHANGELOG.md:2329 msgid "" "For convenience, you can also replace the whole setting with the " -"following snippet::" +"following snippet:" msgstr "" -#: ../../../CHANGELOG:2493 +#: ../../../CHANGELOG.md:2352 msgid "Many thanks to @jibec for the report!" msgstr "" -#: ../../../CHANGELOG:2496 +#: ../../../CHANGELOG.md:2354 msgid "Fix Apache configuration file for 0.18 [manual action required]" msgstr "" -#: ../../../CHANGELOG:2498 +#: ../../../CHANGELOG.md:2356 msgid "" "The way front is served has changed since 0.18. The Apache configuration " "can't serve 0.18 properly, leading to blank screens." msgstr "" -#: ../../../CHANGELOG:2500 +#: ../../../CHANGELOG.md:2358 msgid "" "If you are on an Apache setup, you will have to replace the `<Location " -"\"/api\">` block with the following::" +"\"/api\">` block with the following:" msgstr "" -#: ../../../CHANGELOG:2510 +#: ../../../CHANGELOG.md:2370 msgid "" "And add some more `ProxyPass` directives so that the `Alias` part of your" -" configuration file looks this way::" +" configuration file looks this way:" msgstr "" -#: ../../../CHANGELOG:2521 +#: ../../../CHANGELOG.md:2383 msgid "" "In case you are using custom css and theming, you also need to match this" -" block::" +" block:" msgstr "" -#: ../../../CHANGELOG:2532 +#: ../../../CHANGELOG.md:2395 msgid "" "Added name attributes on all inputs to improve UX, especially with " "password managers (#686)" msgstr "" -#: ../../../CHANGELOG:2533 +#: ../../../CHANGELOG.md:2396 msgid "" "Disable makemigrations in production and misleading message when running " "migrate (#685)" msgstr "" -#: ../../../CHANGELOG:2534 +#: ../../../CHANGELOG.md:2397 msgid "Display progress during file upload" msgstr "" -#: ../../../CHANGELOG:2535 +#: ../../../CHANGELOG.md:2398 msgid "Hide pagination when there is only one page of results (#681)" msgstr "" -#: ../../../CHANGELOG:2536 +#: ../../../CHANGELOG.md:2399 msgid "Include shared/public playlists in Subsonic API responses (#684)" msgstr "" -#: ../../../CHANGELOG:2537 +#: ../../../CHANGELOG.md:2400 msgid "Use proper locale for date-related/duration strings (#670)" msgstr "" -#: ../../../CHANGELOG:2542 +#: ../../../CHANGELOG.md:2404 msgid "Fix transcoding of in-place imported tracks (#688)" msgstr "" -#: ../../../CHANGELOG:2543 +#: ../../../CHANGELOG.md:2405 msgid "" "Fixed celery worker defaulting to development settings instead of " "production" msgstr "" -#: ../../../CHANGELOG:2544 +#: ../../../CHANGELOG.md:2406 msgid "Fixed crashing Django admin when loading track detail page (#666)" msgstr "" -#: ../../../CHANGELOG:2545 +#: ../../../CHANGELOG.md:2407 msgid "Fixed list icon alignment on landing page (#668)" msgstr "" -#: ../../../CHANGELOG:2546 +#: ../../../CHANGELOG.md:2408 msgid "Fixed overescaping issue in notifications and album page (#676)" msgstr "" -#: ../../../CHANGELOG:2547 +#: ../../../CHANGELOG.md:2409 msgid "Fixed wrong number of affected elements in bulk action modal (#683)" msgstr "" -#: ../../../CHANGELOG:2548 +#: ../../../CHANGELOG.md:2410 msgid "" "Fixed wrong URL in documentation for funkwhale_proxy.conf file when " "deploying using Docker" msgstr "" -#: ../../../CHANGELOG:2549 +#: ../../../CHANGELOG.md:2411 msgid "Make Apache configuration file work with 0.18 changes (#667)" msgstr "" -#: ../../../CHANGELOG:2550 +#: ../../../CHANGELOG.md:2412 msgid "Removed potential BREACH exploit because of Gzip compression (#678)" msgstr "" -#: ../../../CHANGELOG:2551 +#: ../../../CHANGELOG.md:2413 msgid "Upgraded kombu to fix an incompatibility with redis>=3" msgstr "" -#: ../../../CHANGELOG:2556 +#: ../../../CHANGELOG.md:2417 msgid "" "Added user upload documentation at " "https://docs.funkwhale.audio/users/upload.html" msgstr "" -#: ../../../CHANGELOG:2560 +#: ../../../CHANGELOG.md:2419 msgid "0.18 \"Naomi\" (2019-01-22)" msgstr "" -#: ../../../CHANGELOG:2562 +#: ../../../CHANGELOG.md:2421 msgid "" "This release is dedicated to Naomi, an early contributor and beta tester " "of Funkwhale. Her positivity, love and support have been incredibly " @@ -5157,37 +5492,37 @@ msgid "" " so much Naomi <3" msgstr "" -#: ../../../CHANGELOG:2566 +#: ../../../CHANGELOG.md:2425 msgid "" "Many thanks to the dozens of people that contributed to this release: " "translators, developers, bug hunters, admins and backers. You made it " "possible!" msgstr "" -#: ../../../CHANGELOG:2569 +#: ../../../CHANGELOG.md:2428 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html, ensure you also " -"execute the instructions marked with ``[manual action required]`` and " -"``[manual action suggested]``." +"execute the instructions marked with `[manual action required]` and " +"`[manual action suggested]`." msgstr "" -#: ../../../CHANGELOG:2573 -msgid "See ``Full changelog`` below for an exhaustive list of changes!" +#: ../../../CHANGELOG.md:2431 +msgid "See `Full changelog` below for an exhaustive list of changes!" msgstr "" -#: ../../../CHANGELOG:2576 +#: ../../../CHANGELOG.md:2433 msgid "Audio transcoding is back!" msgstr "" -#: ../../../CHANGELOG:2578 +#: ../../../CHANGELOG.md:2435 msgid "" "After removal of our first, buggy transcoding implementation, we're proud" " to announce that this feature is back. It is enabled by default, and can" " be configured/disabled in your instance settings!" msgstr "" -#: ../../../CHANGELOG:2582 +#: ../../../CHANGELOG.md:2439 msgid "" "This feature works in the browser, with federated/non-federated tracks " "and using Subsonic clients. Transcoded tracks are generated on the fly, " @@ -5195,11 +5530,11 @@ msgid "" "server." msgstr "" -#: ../../../CHANGELOG:2588 +#: ../../../CHANGELOG.md:2443 msgid "Licensing and copyright information" msgstr "" -#: ../../../CHANGELOG:2590 +#: ../../../CHANGELOG.md:2445 msgid "" "Funkwhale is now able to parse copyright and license data from file and " "store this information. Apart from displaying it on each track detail " @@ -5207,57 +5542,57 @@ msgid "" "data, but this will change in future releases." msgstr "" -#: ../../../CHANGELOG:2595 +#: ../../../CHANGELOG.md:2450 msgid "License and copyright data is also broadcasted over federation." msgstr "" -#: ../../../CHANGELOG:2597 +#: ../../../CHANGELOG.md:2452 msgid "" -"License matching is done on the content of the ``License`` tag in the " -"files, with a fallback on the ``Copyright`` tag." +"License matching is done on the content of the `License` tag in the " +"files, with a fallback on the `Copyright` tag." msgstr "" -#: ../../../CHANGELOG:2600 +#: ../../../CHANGELOG.md:2455 msgid "" "Funkwhale will successfully extract licensing data for the following " "licenses:" msgstr "" -#: ../../../CHANGELOG:2602 +#: ../../../CHANGELOG.md:2457 msgid "Creative Commons 0 (Public Domain)" msgstr "" -#: ../../../CHANGELOG:2603 +#: ../../../CHANGELOG.md:2458 msgid "Creative Commons 1.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2604 +#: ../../../CHANGELOG.md:2459 msgid "Creative Commons 2.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2605 +#: ../../../CHANGELOG.md:2460 msgid "Creative Commons 2.5 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2606 +#: ../../../CHANGELOG.md:2461 msgid "Creative Commons 3.0 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2607 +#: ../../../CHANGELOG.md:2462 msgid "Creative Commons 4.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2609 +#: ../../../CHANGELOG.md:2464 msgid "" "Support for other licenses such as Art Libre or WTFPL will be added in " "future releases." msgstr "" -#: ../../../CHANGELOG:2613 +#: ../../../CHANGELOG.md:2466 msgid "Instance-level moderation tools" msgstr "" -#: ../../../CHANGELOG:2615 +#: ../../../CHANGELOG.md:2468 msgid "" "This release includes a first set of moderation tools that will give more" " control to admins about the way their instance federates with other " @@ -5265,39 +5600,39 @@ msgid "" "possible to:" msgstr "" -#: ../../../CHANGELOG:2619 +#: ../../../CHANGELOG.md:2472 msgid "" "Browse known accounts and domains, and associated data (storage size, " "software version, etc.)" msgstr "" -#: ../../../CHANGELOG:2620 +#: ../../../CHANGELOG.md:2473 msgid "Purge data belonging to given accounts and domains" msgstr "" -#: ../../../CHANGELOG:2621 +#: ../../../CHANGELOG.md:2474 msgid "Block or partially restrict interactions with any account or domain" msgstr "" -#: ../../../CHANGELOG:2623 +#: ../../../CHANGELOG.md:2476 msgid "" "All those features are usable using a brand new \"moderation\" " "permission, meaning you can appoint one or multiple moderators to help " "with this task." msgstr "" -#: ../../../CHANGELOG:2626 +#: ../../../CHANGELOG.md:2479 msgid "" "I'd like to thank all Mastodon contributors, because some of the these " "tools are heavily inspired from what's being done in Mastodon. Thank you " "so much!" msgstr "" -#: ../../../CHANGELOG:2631 +#: ../../../CHANGELOG.md:2482 msgid "Iframe widget to embed public tracks and albums [manual action required]" msgstr "" -#: ../../../CHANGELOG:2633 +#: ../../../CHANGELOG.md:2484 msgid "" "Funkwhale now supports embedding a lightweight audio player on external " "websites for album and tracks that are available in public libraries. " @@ -5306,444 +5641,447 @@ msgid "" " a Funkwhale track link on Mastodon or Twitter)." msgstr "" -#: ../../../CHANGELOG:2639 +#: ../../../CHANGELOG.md:2490 msgid "" "To achieve that, we had to tweak the way Funkwhale front-end is served. " "You'll have to modify your nginx configuration when upgrading to keep " "your instance working." msgstr "" -#: ../../../CHANGELOG:2642 +#: ../../../CHANGELOG.md:2493 msgid "" -"**On docker setups**, edit your " -"``/srv/funkwhale/nginx/funkwhale.template`` and replace the ``location " -"/api/`` and `location /` blocks by the following snippets::" +"**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template`" +" and replace the `location /api/` and `location /` blocks by the " +"following snippets:" msgstr "" -#: ../../../CHANGELOG:2656 +#: ../../../CHANGELOG.md:2509 msgid "" "The change of configuration will be picked when restarting your nginx " "container." msgstr "" -#: ../../../CHANGELOG:2658 +#: ../../../CHANGELOG.md:2511 msgid "" -"**On non-docker setups**, edit your ``/etc/nginx/sites-" -"available/funkwhale.conf`` file, and replace the ``location /api/`` and " -"`location /` blocks by the following snippets::" +"**On non-docker setups**, edit your `/etc/nginx/sites-" +"available/funkwhale.conf` file, and replace the `location /api/` and " +"`location /` blocks by the following snippets:" msgstr "" -#: ../../../CHANGELOG:2673 +#: ../../../CHANGELOG.md:2527 msgid "" -"Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from" -" your .env file, which should be ``/srv/funkwhale/front/dist`` by " -"default, then reload your nginx process with ``sudo systemctl reload " -"nginx``." +"Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from " +"your .env file, which should be `/srv/funkwhale/front/dist` by default, " +"then reload your nginx process with `sudo systemctl reload nginx`." msgstr "" -#: ../../../CHANGELOG:2679 +#: ../../../CHANGELOG.md:2531 msgid "Alternative docker deployment method" msgstr "" -#: ../../../CHANGELOG:2681 +#: ../../../CHANGELOG.md:2533 msgid "" "Thanks to the awesome work done by @thetarkus at " "https://github.com/thetarkus/docker-funkwhale, we're now able to provide " "an alternative and easier Docker deployment method!" msgstr "" -#: ../../../CHANGELOG:2684 +#: ../../../CHANGELOG.md:2536 msgid "" "In contrast with our current, multi-container offer, this method " "integrates all Funkwhale processes and services (database, redis, etc.) " "into a single, easier to deploy container." msgstr "" -#: ../../../CHANGELOG:2687 +#: ../../../CHANGELOG.md:2539 msgid "" "Both methods will coexist in parallel, as each one has pros and cons. You" " can learn more about this exciting new deployment option by visiting " "https://docs.funkwhale.audio/installation/docker.html!" msgstr "" -#: ../../../CHANGELOG:2691 +#: ../../../CHANGELOG.md:2542 msgid "Automatically load .env file" msgstr "" -#: ../../../CHANGELOG:2693 +#: ../../../CHANGELOG.md:2544 msgid "" "On non-docker deployments, earlier versions required you to source the " -"config/.env file before launching any Funkwhale command, with ``export " -"$(cat config/.env | grep -v ^# | xargs)`` This led to more complex and " +"config/.env file before launching any Funkwhale command, with `export " +"$(cat config/.env | grep -v ^# | xargs)` This led to more complex and " "error prone deployment / setup." msgstr "" -#: ../../../CHANGELOG:2697 +#: ../../../CHANGELOG.md:2548 msgid "" "This is not the case anymore, and Funkwhale will automatically load this " "file if it's available." msgstr "" -#: ../../../CHANGELOG:2701 +#: ../../../CHANGELOG.md:2550 msgid "Delete pre 0.17 federated tracks [manual action suggested]" msgstr "" -#: ../../../CHANGELOG:2703 +#: ../../../CHANGELOG.md:2552 msgid "" "If you were using Funkwhale before the 0.17 release and federated with " "other instances, it's possible that you still have some unplayable " "federated files in the database." msgstr "" -#: ../../../CHANGELOG:2706 +#: ../../../CHANGELOG.md:2555 msgid "To purge the database of those entries, you can run the following command:" msgstr "" -#: ../../../CHANGELOG:2708 ../../../CHANGELOG:3259 ../../../CHANGELOG:3282 -msgid "On docker setups::" +#: ../../../CHANGELOG.md:2557 ../../../CHANGELOG.md:3088 +#: ../../../CHANGELOG.md:3113 ../../../CHANGELOG.md:3735 +#: ../../../CHANGELOG.md:3772 +msgid "On docker setups:" msgstr "" -#: ../../../CHANGELOG:2712 ../../../CHANGELOG:3263 ../../../CHANGELOG:3286 -msgid "On non-docker setups::" +#: ../../../CHANGELOG.md:2563 ../../../CHANGELOG.md:3094 +#: ../../../CHANGELOG.md:3119 ../../../CHANGELOG.md:3741 +#: ../../../CHANGELOG.md:3778 +msgid "On non-docker setups:" msgstr "" -#: ../../../CHANGELOG:2718 +#: ../../../CHANGELOG.md:2569 msgid "Enable gzip compression [manual action suggested]" msgstr "" -#: ../../../CHANGELOG:2720 +#: ../../../CHANGELOG.md:2571 msgid "" "Gzip compression will be enabled on new instances by default and will " "reduce the amount of bandwidth consumed by your instance." msgstr "" -#: ../../../CHANGELOG:2723 +#: ../../../CHANGELOG.md:2574 msgid "" "If you want to benefit from gzip compression on your instance, edit your " -"reverse proxy virtualhost file (located at ``/etc/nginx/sites-" -"available/funkwhale.conf``) and add the following snippet in the server " -"block, then reload your nginx server::" +"reverse proxy virtualhost file (located at `/etc/nginx/sites-" +"available/funkwhale.conf`) and add the following snippet in the server " +"block, then reload your nginx server:" msgstr "" -#: ../../../CHANGELOG:2759 +#: ../../../CHANGELOG.md:2611 msgid "Full changelog" msgstr "" -#: ../../../CHANGELOG:2763 +#: ../../../CHANGELOG.md:2615 msgid "" "Allow embedding of albums and tracks available in public libraries via an" " <iframe> (#578)" msgstr "" -#: ../../../CHANGELOG:2764 +#: ../../../CHANGELOG.md:2616 msgid "Audio transcoding is back! (#272)" msgstr "" -#: ../../../CHANGELOG:2765 +#: ../../../CHANGELOG.md:2617 msgid "First set of instance level moderation tools (#580, !521)" msgstr "" -#: ../../../CHANGELOG:2766 +#: ../../../CHANGELOG.md:2618 msgid "" "Store licensing and copyright information from file metadata, if " "available (#308)" msgstr "" -#: ../../../CHANGELOG:2771 +#: ../../../CHANGELOG.md:2622 msgid "Add UI elements for multi-disc albums (#631)" msgstr "" -#: ../../../CHANGELOG:2772 +#: ../../../CHANGELOG.md:2623 msgid "Added alternative funkwhale/all-in-one docker image (#614)" msgstr "" -#: ../../../CHANGELOG:2773 +#: ../../../CHANGELOG.md:2624 msgid "Broadcast library updates (name, description, visibility) over federation" msgstr "" -#: ../../../CHANGELOG:2774 +#: ../../../CHANGELOG.md:2625 msgid "Based Docker image on alpine to have a smaller (and faster to build) image" msgstr "" -#: ../../../CHANGELOG:2775 +#: ../../../CHANGELOG.md:2626 msgid "" "Improved front-end performance by stripping unused dependencies, reducing" " bundle size and enabling gzip compression" msgstr "" -#: ../../../CHANGELOG:2777 +#: ../../../CHANGELOG.md:2628 msgid "" "Improved accessibility by using main/section/nav tags and aria-labels in " "most critical places (#612)" msgstr "" -#: ../../../CHANGELOG:2778 +#: ../../../CHANGELOG.md:2629 msgid "" "The progress bar in the player now display loading state / buffer loading" " (#586)" msgstr "" -#: ../../../CHANGELOG:2779 +#: ../../../CHANGELOG.md:2630 msgid "" "Added \"type: funkwhale\" and \"funkwhale-version\" in Subsonic responses" " (#573)" msgstr "" -#: ../../../CHANGELOG:2780 +#: ../../../CHANGELOG.md:2631 msgid "" "Documented keyboard shortcuts, list is now available by pressing \"h\" or" " in the footer (#611)" msgstr "" -#: ../../../CHANGELOG:2781 +#: ../../../CHANGELOG.md:2632 msgid "Documented which Subsonic endpoints are implemented (#575)" msgstr "" -#: ../../../CHANGELOG:2782 +#: ../../../CHANGELOG.md:2633 msgid "Hide invitation code field during signup when it's not required (#410)" msgstr "" -#: ../../../CHANGELOG:2783 +#: ../../../CHANGELOG.md:2634 msgid "" "Importer will now pick embedded images in files with OTHER type if no " "COVER_FRONT is present" msgstr "" -#: ../../../CHANGELOG:2784 +#: ../../../CHANGELOG.md:2635 msgid "" "Improved keyboard accessibility on player, queue and various controls " "(#576)" msgstr "" -#: ../../../CHANGELOG:2785 +#: ../../../CHANGELOG.md:2636 msgid "Improved performance when listing playable tracks, albums and artists" msgstr "" -#: ../../../CHANGELOG:2786 +#: ../../../CHANGELOG.md:2637 msgid "Increased default upload limit from 30 to 100MB (#654)" msgstr "" -#: ../../../CHANGELOG:2787 +#: ../../../CHANGELOG.md:2638 msgid "" "Load env file in config/.env automatically to avoid sourcing it by hand " "(#626)" msgstr "" -#: ../../../CHANGELOG:2788 +#: ../../../CHANGELOG.md:2639 msgid "" "More resilient date parsing during audio import, will not crash anymore " "on invalid dates (#622)" msgstr "" -#: ../../../CHANGELOG:2790 +#: ../../../CHANGELOG.md:2641 msgid "Now start radios immediately, skipping any existing tracks in queue (#585)" msgstr "" -#: ../../../CHANGELOG:2791 +#: ../../../CHANGELOG.md:2642 msgid "" "Officially support connecting to a password protected redis server, with " "the redis://:password@localhost:6379/0 scheme (#640)" msgstr "" -#: ../../../CHANGELOG:2793 +#: ../../../CHANGELOG.md:2644 msgid "" "Performance improvement when fetching favorites, down to a single, small " "http request" msgstr "" -#: ../../../CHANGELOG:2794 +#: ../../../CHANGELOG.md:2645 msgid "" "Removed \"Activity\" page, since all the data is available on the " "\"Browse\" page (#600)" msgstr "" -#: ../../../CHANGELOG:2795 +#: ../../../CHANGELOG.md:2646 msgid "Removed the need to specify the DJANGO_ALLOWED_HOSTS variable" msgstr "" -#: ../../../CHANGELOG:2796 +#: ../../../CHANGELOG.md:2647 msgid "Restructured the footer, added useful links and removed unused content" msgstr "" -#: ../../../CHANGELOG:2797 +#: ../../../CHANGELOG.md:2648 msgid "Show short entries first in search results to improve UX" msgstr "" -#: ../../../CHANGELOG:2798 +#: ../../../CHANGELOG.md:2649 msgid "Store disc number and order tracks by disc number / position) (#507)" msgstr "" -#: ../../../CHANGELOG:2799 +#: ../../../CHANGELOG.md:2650 msgid "" "Strip EXIF metadata from uploaded avatars to avoid leaking private data " "(#374)" msgstr "" -#: ../../../CHANGELOG:2800 +#: ../../../CHANGELOG.md:2651 msgid "Support blind key rotation in HTTP Signatures (#658)" msgstr "" -#: ../../../CHANGELOG:2801 +#: ../../../CHANGELOG.md:2652 msgid "Support setting a server URL in settings.json (#650)" msgstr "" -#: ../../../CHANGELOG:2802 +#: ../../../CHANGELOG.md:2653 msgid "Updated default docker postgres version from 9.4 to 11 (#656)" msgstr "" -#: ../../../CHANGELOG:2803 +#: ../../../CHANGELOG.md:2654 msgid "" "Updated lots of dependencies (especially django 2.0->2.1), and removed " "unused dependencies (#657)" msgstr "" -#: ../../../CHANGELOG:2804 +#: ../../../CHANGELOG.md:2655 msgid "" "Improved test suite speed by reducing / disabling expensive operations " "(#648)" msgstr "" -#: ../../../CHANGELOG:2809 +#: ../../../CHANGELOG.md:2659 msgid "" "Fixed parsing of embedded file cover for ogg files tagged with " "MusicBrainz (#469)" msgstr "" -#: ../../../CHANGELOG:2810 +#: ../../../CHANGELOG.md:2660 msgid "" "Upgraded core dependencies to fix websocket/messaging issues and possible" " memory leaks (#643)" msgstr "" -#: ../../../CHANGELOG:2811 +#: ../../../CHANGELOG.md:2661 msgid "Fix \".None\" extension when downloading Flac file (#473)" msgstr "" -#: ../../../CHANGELOG:2812 +#: ../../../CHANGELOG.md:2662 msgid "Fixed None extension when downloading an in-place imported file (#621)" msgstr "" -#: ../../../CHANGELOG:2813 +#: ../../../CHANGELOG.md:2663 msgid "Added a script to prune pre 0.17 federated tracks (#564)" msgstr "" -#: ../../../CHANGELOG:2814 +#: ../../../CHANGELOG.md:2664 msgid "Advertise public libraries properly in ActivityPub representations (#553)" msgstr "" -#: ../../../CHANGELOG:2815 +#: ../../../CHANGELOG.md:2665 msgid "Allow opus file upload (#598)" msgstr "" -#: ../../../CHANGELOG:2816 +#: ../../../CHANGELOG.md:2666 msgid "Do not display \"view on MusicBrainz\" button if we miss the mbid (#422)" msgstr "" -#: ../../../CHANGELOG:2817 +#: ../../../CHANGELOG.md:2667 msgid "Do not try to create unaccent extension if it's already present (#663)" msgstr "" -#: ../../../CHANGELOG:2818 +#: ../../../CHANGELOG.md:2668 msgid "" "Ensure admin links in sidebar are displayed for users with relevant " "permissions, and only them (#597)" msgstr "" -#: ../../../CHANGELOG:2819 +#: ../../../CHANGELOG.md:2669 msgid "Fix broken websocket connection under Chrome browser (#589)" msgstr "" -#: ../../../CHANGELOG:2820 +#: ../../../CHANGELOG.md:2670 msgid "Fix play button not starting playback with empty queue (#632)" msgstr "" -#: ../../../CHANGELOG:2821 +#: ../../../CHANGELOG.md:2671 msgid "" "Fixed a styling inconsistency on about page when instance description was" " missing (#659)" msgstr "" -#: ../../../CHANGELOG:2822 +#: ../../../CHANGELOG.md:2672 msgid "Fixed a UI discrepancy in playlist tracks count (#647)" msgstr "" -#: ../../../CHANGELOG:2823 +#: ../../../CHANGELOG.md:2673 msgid "Fixed greyed tracks in radio builder and detail page (#637)" msgstr "" -#: ../../../CHANGELOG:2824 +#: ../../../CHANGELOG.md:2674 msgid "Fixed inconsistencies in subsonic error responses (#616)" msgstr "" -#: ../../../CHANGELOG:2825 +#: ../../../CHANGELOG.md:2675 msgid "Fixed incorrect icon for \"next track\" in player control (#613)" msgstr "" -#: ../../../CHANGELOG:2826 +#: ../../../CHANGELOG.md:2676 msgid "Fixed malformed search string when redirecting to LyricsWiki (#608)" msgstr "" -#: ../../../CHANGELOG:2827 +#: ../../../CHANGELOG.md:2677 msgid "Fixed missing track count on various library cards (#581)" msgstr "" -#: ../../../CHANGELOG:2828 +#: ../../../CHANGELOG.md:2678 msgid "" "Fixed skipped track when appending multiple tracks to the queue under " "certain conditions (#209)" msgstr "" -#: ../../../CHANGELOG:2829 +#: ../../../CHANGELOG.md:2679 msgid "Fixed wrong album/track count on artist page (#599)" msgstr "" -#: ../../../CHANGELOG:2830 +#: ../../../CHANGELOG.md:2680 msgid "Hide unplayable/empty playlists in \"Browse playlist\" pages (#424)" msgstr "" -#: ../../../CHANGELOG:2831 +#: ../../../CHANGELOG.md:2681 msgid "Initial UI render using correct language from browser (#644)" msgstr "" -#: ../../../CHANGELOG:2832 +#: ../../../CHANGELOG.md:2682 msgid "Invalid URI for reverse proxy websocket with apache (#617)" msgstr "" -#: ../../../CHANGELOG:2833 +#: ../../../CHANGELOG.md:2683 msgid "Properly encode Wikipedia and lyrics search urls (#470)" msgstr "" -#: ../../../CHANGELOG:2834 +#: ../../../CHANGELOG.md:2684 msgid "Refresh profile after user settings update to avoid cache issues (#606)" msgstr "" -#: ../../../CHANGELOG:2835 +#: ../../../CHANGELOG.md:2685 msgid "Use role=button instead of empty links for player controls (#610)" msgstr "" -#: ../../../CHANGELOG:2840 +#: ../../../CHANGELOG.md:2689 msgid "" "Deploy documentation from the master branch instead of the develop branch" " to avoid inconsistencies (#642)" msgstr "" -#: ../../../CHANGELOG:2841 +#: ../../../CHANGELOG.md:2690 msgid "Document how to find and use library id when importing files in CLI (#562)" msgstr "" -#: ../../../CHANGELOG:2842 +#: ../../../CHANGELOG.md:2691 msgid "Fix documentation typos (#645)" msgstr "" -#: ../../../CHANGELOG:2846 +#: ../../../CHANGELOG.md:2693 msgid "0.17 (2018-10-07)" msgstr "" -#: ../../../CHANGELOG:2849 +#: ../../../CHANGELOG.md:2695 msgid "Per user libraries" msgstr "" -#: ../../../CHANGELOG:2851 +#: ../../../CHANGELOG.md:2697 msgid "" "This release contains a big change in music management. This has a lot of" " impact on how Funkwhale behaves, and you should have a look at " @@ -5751,99 +6089,99 @@ msgid "" "what changed and how to migrate." msgstr "" -#: ../../../CHANGELOG:2859 +#: ../../../CHANGELOG.md:2704 msgid "Per user libraries (#463, also fixes #160 and #147)" msgstr "" -#: ../../../CHANGELOG:2860 +#: ../../../CHANGELOG.md:2705 msgid "Authentication using a LDAP directory (#194)" msgstr "" -#: ../../../CHANGELOG:2865 +#: ../../../CHANGELOG.md:2709 msgid "Add configuration option to set Musicbrainz hostname" msgstr "" -#: ../../../CHANGELOG:2866 +#: ../../../CHANGELOG.md:2710 msgid "Add sign up link in the sidebar (#408)" msgstr "" -#: ../../../CHANGELOG:2867 +#: ../../../CHANGELOG.md:2711 msgid "" "Added a library widget to display libraries associated with a track, " "album and artist (#551)" msgstr "" -#: ../../../CHANGELOG:2869 +#: ../../../CHANGELOG.md:2713 msgid "Ensure from_activity field is not required in django's admin (#546)" msgstr "" -#: ../../../CHANGELOG:2870 +#: ../../../CHANGELOG.md:2714 msgid "Move setting link from profile page to the sidebar (#406)" msgstr "" -#: ../../../CHANGELOG:2871 +#: ../../../CHANGELOG.md:2715 msgid "Simplified and less error-prone nginx setup (#358)" msgstr "" -#: ../../../CHANGELOG:2875 +#: ../../../CHANGELOG.md:2719 msgid "" "Do not restart current song when rordering queue, deleting tracks from " "queue or adding tracks to queue (#464)" msgstr "" -#: ../../../CHANGELOG:2877 +#: ../../../CHANGELOG.md:2721 msgid "Fix broken icons in playlist editor (#515)" msgstr "" -#: ../../../CHANGELOG:2878 +#: ../../../CHANGELOG.md:2722 msgid "Fixed a few untranslated strings (#559)" msgstr "" -#: ../../../CHANGELOG:2879 +#: ../../../CHANGELOG.md:2723 msgid "Fixed split album when importing from federation (#346)" msgstr "" -#: ../../../CHANGELOG:2880 +#: ../../../CHANGELOG.md:2724 msgid "" "Fixed toggle mute in volume bar does not restore previous volume level " "(#514)" msgstr "" -#: ../../../CHANGELOG:2881 +#: ../../../CHANGELOG.md:2725 msgid "" "Fixed wrong env file URL and display bugs in deployment documentation " "(#520)" msgstr "" -#: ../../../CHANGELOG:2882 +#: ../../../CHANGELOG.md:2726 msgid "Fixed wrong title in PlayButton (#435)" msgstr "" -#: ../../../CHANGELOG:2883 +#: ../../../CHANGELOG.md:2727 msgid "Remove transparency on artist page button (#517)" msgstr "" -#: ../../../CHANGELOG:2884 +#: ../../../CHANGELOG.md:2728 msgid "Set sane width default for ui cards and center play button (#530)" msgstr "" -#: ../../../CHANGELOG:2885 +#: ../../../CHANGELOG.md:2729 msgid "Updated wrong icon and copy in play button dropdown (#436)" msgstr "" -#: ../../../CHANGELOG:2890 +#: ../../../CHANGELOG.md:2733 msgid "Fixed wrong URLs for docker / nginx files in documentation (#537)" msgstr "" -#: ../../../CHANGELOG:2895 +#: ../../../CHANGELOG.md:2737 msgid "Added a merge request template and more documentation about the changelog" msgstr "" -#: ../../../CHANGELOG:2899 +#: ../../../CHANGELOG.md:2739 msgid "Using a LDAP directory to authenticate to your Funkwhale instance" msgstr "" -#: ../../../CHANGELOG:2901 +#: ../../../CHANGELOG.md:2741 msgid "" "Funkwhale now support LDAP as an authentication source: you can configure" " your instance to delegate login to a LDAP directory, which is especially" @@ -5851,21 +6189,21 @@ msgid "" "users manually." msgstr "" -#: ../../../CHANGELOG:2906 +#: ../../../CHANGELOG.md:2746 msgid "You can use this authentication backend side by side with the classic one." msgstr "" -#: ../../../CHANGELOG:2908 +#: ../../../CHANGELOG.md:2748 msgid "" "Have a look at https://docs.funkwhale.audio/installation/ldap.html for " "detailed instructions on how to set this up." msgstr "" -#: ../../../CHANGELOG:2913 +#: ../../../CHANGELOG.md:2751 msgid "Simplified nginx setup [Docker: Manual action required]" msgstr "" -#: ../../../CHANGELOG:2915 +#: ../../../CHANGELOG.md:2753 msgid "" "We've received a lot of user feedback regarding our installation process," " and it seems the proxy part is the one which is the most confusing and " @@ -5873,446 +6211,445 @@ msgid "" "can completely break the application." msgstr "" -#: ../../../CHANGELOG:2920 +#: ../../../CHANGELOG.md:2758 msgid "" "To make things easier for everyone, we now offer a simplified deployment " "process for the reverse proxy part. This will make upgrade of the proxy " "configuration significantly easier on docker deployments." msgstr "" -#: ../../../CHANGELOG:2924 +#: ../../../CHANGELOG.md:2762 msgid "On non-docker instances, you have nothing to do." msgstr "" -#: ../../../CHANGELOG:2926 +#: ../../../CHANGELOG.md:2764 msgid "If you have a dockerized instance, here is the upgrade path." msgstr "" -#: ../../../CHANGELOG:2928 -msgid "First, tweak your .env file::" +#: ../../../CHANGELOG.md:2766 +msgid "First, tweak your .env file:" msgstr "" -#: ../../../CHANGELOG:2940 -msgid "Then, add the following block at the end of your docker-compose.yml file::" +#: ../../../CHANGELOG.md:2780 +msgid "Then, add the following block at the end of your docker-compose.yml file:" msgstr "" -#: ../../../CHANGELOG:2975 +#: ../../../CHANGELOG.md:2818 msgid "" "By doing that, you'll enable a dockerized nginx that will automatically " "be configured to serve your Funkwhale instance." msgstr "" -#: ../../../CHANGELOG:2978 +#: ../../../CHANGELOG.md:2821 msgid "Download the required configuration files for the nginx container:" msgstr "" -#: ../../../CHANGELOG:2987 -msgid "Update the funkwhale.conf configuration of your server's reverse-proxy::" +#: ../../../CHANGELOG.md:2830 +msgid "Update the funkwhale.conf configuration of your server's reverse-proxy:" msgstr "" -#: ../../../CHANGELOG:3033 +#: ../../../CHANGELOG.md:2881 msgid "Check that your configuration is valid then reload:" msgstr "" -#: ../../../CHANGELOG:3035 -msgid "sudo nginx -t sudo systemctl reload nginx" -msgstr "" - -#: ../../../CHANGELOG:3040 +#: ../../../CHANGELOG.md:2888 msgid "0.16.3 (2018-08-21)" msgstr "" -#: ../../../CHANGELOG:3042 ../../../CHANGELOG:3058 ../../../CHANGELOG:3072 -#: ../../../CHANGELOG:3147 ../../../CHANGELOG:3380 ../../../CHANGELOG:3462 -#: ../../../CHANGELOG:3584 ../../../CHANGELOG:4141 +#: ../../../CHANGELOG.md:2890 ../../../CHANGELOG.md:2903 +#: ../../../CHANGELOG.md:2915 ../../../CHANGELOG.md:2988 +#: ../../../CHANGELOG.md:3210 ../../../CHANGELOG.md:3283 +#: ../../../CHANGELOG.md:3398 ../../../CHANGELOG.md:3483 +#: ../../../CHANGELOG.md:3681 ../../../CHANGELOG.md:3791 +#: ../../../CHANGELOG.md:3934 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/upgrading.html" msgstr "" -#: ../../../CHANGELOG:3047 +#: ../../../CHANGELOG.md:2895 msgid "Fixed front-end not contacting the proper path on the API (!385)" msgstr "" -#: ../../../CHANGELOG:3051 +#: ../../../CHANGELOG.md:2897 msgid "0.16.2 (2018-08-21)" msgstr "" -#: ../../../CHANGELOG:3055 +#: ../../../CHANGELOG.md:2900 msgid "" "**This release is broken, do not use it. Upgrade to 0.16.3 or higher " "instead.**" msgstr "" -#: ../../../CHANGELOG:3063 +#: ../../../CHANGELOG.md:2908 msgid "" "Ensure we always have a default api url set on first load to avoid " "displaying the instance picker (#490)" msgstr "" -#: ../../../CHANGELOG:3065 +#: ../../../CHANGELOG.md:2910 msgid "" "Fixed CLI importer syntax error because of async reserved keyword usage " "(#494)" msgstr "" -#: ../../../CHANGELOG:3070 +#: ../../../CHANGELOG.md:2913 msgid "0.16.1 (2018-08-19)" msgstr "" -#: ../../../CHANGELOG:3077 +#: ../../../CHANGELOG.md:2920 msgid "Make funkwhale themable by loading external stylesheets (#456)" msgstr "" -#: ../../../CHANGELOG:3081 +#: ../../../CHANGELOG.md:2924 msgid "Add link to admin on \"Staff member\" button (#202)" msgstr "" -#: ../../../CHANGELOG:3082 +#: ../../../CHANGELOG.md:2925 msgid "Can now add a description to radios and better radio cards (#331)" msgstr "" -#: ../../../CHANGELOG:3083 +#: ../../../CHANGELOG.md:2926 msgid "Display track duration in track tables (#461)" msgstr "" -#: ../../../CHANGELOG:3084 +#: ../../../CHANGELOG.md:2927 msgid "More permissive default permissions for front-end files (#388)" msgstr "" -#: ../../../CHANGELOG:3085 +#: ../../../CHANGELOG.md:2928 msgid "Simpler configuration and toolchain for the front-end using vue-cli (!375)" msgstr "" -#: ../../../CHANGELOG:3086 +#: ../../../CHANGELOG.md:2929 msgid "Use Howler to manage audio instead of our own dirty/untested code (#392)" msgstr "" -#: ../../../CHANGELOG:3091 +#: ../../../CHANGELOG.md:2933 msgid "Fix alignment issue on top bar in Admin tabs (#395)" msgstr "" -#: ../../../CHANGELOG:3092 +#: ../../../CHANGELOG.md:2934 msgid "" "Fix Apache2 permission issue preventing `/media` folder from being served" " correctly (#389)" msgstr "" -#: ../../../CHANGELOG:3094 +#: ../../../CHANGELOG.md:2936 msgid "" "Fix loading on browse page lists causing them to go down, and dimming " "over the top bar (#468)" msgstr "" -#: ../../../CHANGELOG:3096 +#: ../../../CHANGELOG.md:2938 msgid "" "Fixed (again): administration section not showing up in sidebar after " "login (#245)" msgstr "" -#: ../../../CHANGELOG:3098 +#: ../../../CHANGELOG.md:2940 msgid "Fixed audio mimetype not showing up on track detail and list (#459)" msgstr "" -#: ../../../CHANGELOG:3099 +#: ../../../CHANGELOG.md:2941 msgid "Fixed broken audio playback on Chrome and invisible volume control (#390)" msgstr "" -#: ../../../CHANGELOG:3100 +#: ../../../CHANGELOG.md:2942 msgid "" "Fixed broken federation import on big imports due to missing transaction " "logic (#397)" msgstr "" -#: ../../../CHANGELOG:3102 +#: ../../../CHANGELOG.md:2944 msgid "Fixed crash on artist pages when no cover is available (#457)" msgstr "" -#: ../../../CHANGELOG:3103 +#: ../../../CHANGELOG.md:2945 msgid "Fixed favorited status of tracks not appearing in interface (#398)" msgstr "" -#: ../../../CHANGELOG:3104 +#: ../../../CHANGELOG.md:2946 msgid "" "Fixed invitation code not prefilled in form when accessing invitation " "link (#476)" msgstr "" -#: ../../../CHANGELOG:3106 +#: ../../../CHANGELOG.md:2948 msgid "Fixed typos in scheduled tasks configuration (#487)" msgstr "" -#: ../../../CHANGELOG:3107 +#: ../../../CHANGELOG.md:2949 msgid "Removed release date error in case of empty date (#478)" msgstr "" -#: ../../../CHANGELOG:3108 +#: ../../../CHANGELOG.md:2950 msgid "Removed white on white artist button on hover, on Album page (#393)" msgstr "" -#: ../../../CHANGELOG:3109 +#: ../../../CHANGELOG.md:2951 msgid "Smarter date parsing during import by replacing arrow with pendulum (#376)" msgstr "" -#: ../../../CHANGELOG:3110 +#: ../../../CHANGELOG.md:2952 msgid "Display public playlists properly for anonymous users (#488)" msgstr "" -#: ../../../CHANGELOG:3113 ../../../CHANGELOG:3205 +#: ../../../CHANGELOG.md:2954 ../../../CHANGELOG.md:3042 msgid "i18n:" msgstr "" -#: ../../../CHANGELOG:3115 +#: ../../../CHANGELOG.md:2956 msgid "Added portuguese, spanish and german translations" msgstr "" -#: ../../../CHANGELOG:3119 +#: ../../../CHANGELOG.md:2958 msgid "Custom themes for Funkwhale" msgstr "" -#: ../../../CHANGELOG:3121 +#: ../../../CHANGELOG.md:2960 msgid "" "If you ever wanted to give a custom look and feel to your instance, this " "is now possible." msgstr "" -#: ../../../CHANGELOG:3123 +#: ../../../CHANGELOG.md:2962 msgid "" "Check https://docs.funkwhale.audio/configuration.html#theming if you want" " to know more!" msgstr "" -#: ../../../CHANGELOG:3127 +#: ../../../CHANGELOG.md:2964 msgid "Fix Apache2 configuration file for media block [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3129 +#: ../../../CHANGELOG.md:2966 msgid "" "The permission scope on the current Apache2 configuration file is too " "narrow, preventing thumbnails from being served." msgstr "" -#: ../../../CHANGELOG:3131 -msgid "On Apache2 setups, you have to replace the following line::" +#: ../../../CHANGELOG.md:2968 +msgid "On Apache2 setups, you have to replace the following line:" msgstr "" -#: ../../../CHANGELOG:3135 -msgid "with::" +#: ../../../CHANGELOG.md:2974 +msgid "with:" msgstr "" -#: ../../../CHANGELOG:3139 -msgid "You can now restart your server::" +#: ../../../CHANGELOG.md:2980 +msgid "You can now restart your server:" msgstr "" -#: ../../../CHANGELOG:3145 +#: ../../../CHANGELOG.md:2986 msgid "0.16 (2018-07-22)" msgstr "" -#: ../../../CHANGELOG:3152 +#: ../../../CHANGELOG.md:2993 msgid "Complete redesign of the library home and playlist pages (#284)" msgstr "" -#: ../../../CHANGELOG:3153 +#: ../../../CHANGELOG.md:2994 msgid "Expose ActivityPub actors for users (#317)" msgstr "" -#: ../../../CHANGELOG:3154 +#: ../../../CHANGELOG.md:2995 msgid "" "Implemented a basic but functional Github-like search on federated tracks" " list (#344)" msgstr "" -#: ../../../CHANGELOG:3156 +#: ../../../CHANGELOG.md:2997 msgid "" "Internationalized interface as well as translations for Arabic, French, " "Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167)" msgstr "" -#: ../../../CHANGELOG:3158 +#: ../../../CHANGELOG.md:2999 msgid "Users can now upload an avatar in their settings page (#257)" msgstr "" -#: ../../../CHANGELOG:3163 +#: ../../../CHANGELOG.md:3003 msgid "Added feedback when creating/updating radio (#302)" msgstr "" -#: ../../../CHANGELOG:3164 +#: ../../../CHANGELOG.md:3004 msgid "Apply restrictions to username characters during signup" msgstr "" -#: ../../../CHANGELOG:3165 +#: ../../../CHANGELOG.md:3005 msgid "Autoselect best language based on browser configuration (#386)" msgstr "" -#: ../../../CHANGELOG:3166 +#: ../../../CHANGELOG.md:3006 msgid "Can now order tracks on federated track list (#326)" msgstr "" -#: ../../../CHANGELOG:3167 +#: ../../../CHANGELOG.md:3007 msgid "Can now relaunch pending import jobs from the web interface (#323)" msgstr "" -#: ../../../CHANGELOG:3168 +#: ../../../CHANGELOG.md:3008 msgid "Ensure we do not display pagination on single pages (#334)" msgstr "" -#: ../../../CHANGELOG:3169 +#: ../../../CHANGELOG.md:3009 msgid "" "Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and " "MUSIC_DIRECTORY_PATH in the deployment .env file (#350)" msgstr "" -#: ../../../CHANGELOG:3171 +#: ../../../CHANGELOG.md:3011 msgid "Make some space for the volume slider to allow precise control (#318)" msgstr "" -#: ../../../CHANGELOG:3172 +#: ../../../CHANGELOG.md:3012 msgid "Removed django-cacheops dependency" msgstr "" -#: ../../../CHANGELOG:3173 +#: ../../../CHANGELOG.md:3013 msgid "" "Store track artist and album artist separately (#237) Better handling of " "tracks with a different artist than the album artist" msgstr "" -#: ../../../CHANGELOG:3175 +#: ../../../CHANGELOG.md:3015 msgid "The navigation bar of Library is now fixed (#375)" msgstr "" -#: ../../../CHANGELOG:3176 +#: ../../../CHANGELOG.md:3016 msgid "Use thumbnails for avatars and covers to reduce bandwidth" msgstr "" -#: ../../../CHANGELOG:3181 +#: ../../../CHANGELOG.md:3020 msgid "Ensure 750 permissions on CI artifacts (#332)" msgstr "" -#: ../../../CHANGELOG:3182 +#: ../../../CHANGELOG.md:3021 msgid "Ensure images are not cropped in queue (#337)" msgstr "" -#: ../../../CHANGELOG:3183 +#: ../../../CHANGELOG.md:3022 msgid "Ensure we do not import artists with empty names (#351)" msgstr "" -#: ../../../CHANGELOG:3184 +#: ../../../CHANGELOG.md:3023 msgid "Fix notifications not closing when clicking on the cross (#366)" msgstr "" -#: ../../../CHANGELOG:3185 +#: ../../../CHANGELOG.md:3024 msgid "Fix the most annoying offset in the whole fediverse (#369)" msgstr "" -#: ../../../CHANGELOG:3186 +#: ../../../CHANGELOG.md:3025 msgid "Fixed persistent message in playlist modal (#304)" msgstr "" -#: ../../../CHANGELOG:3187 +#: ../../../CHANGELOG.md:3026 msgid "Fixed unfiltered results in favorites API (#384)" msgstr "" -#: ../../../CHANGELOG:3188 +#: ../../../CHANGELOG.md:3027 msgid "" "Raise a warning instead of crashing when getting a broken path in file " "import (#138)" msgstr "" -#: ../../../CHANGELOG:3190 +#: ../../../CHANGELOG.md:3029 msgid "" "Remove parallelization of uploads during import to avoid crashing small " "servers (#382)" msgstr "" -#: ../../../CHANGELOG:3192 +#: ../../../CHANGELOG.md:3031 msgid "Subsonic API login is now case insensitive (#339)" msgstr "" -#: ../../../CHANGELOG:3193 +#: ../../../CHANGELOG.md:3032 msgid "Validate Date header in HTTP Signatures (#328)" msgstr "" -#: ../../../CHANGELOG:3198 +#: ../../../CHANGELOG.md:3036 msgid "Added troubleshotting and technical overview documentation (#256)" msgstr "" -#: ../../../CHANGELOG:3199 +#: ../../../CHANGELOG.md:3037 msgid "Arch Linux installation steps" msgstr "" -#: ../../../CHANGELOG:3200 +#: ../../../CHANGELOG.md:3038 msgid "Document that users can use Ultrasonic on Android (#316)" msgstr "" -#: ../../../CHANGELOG:3201 +#: ../../../CHANGELOG.md:3039 msgid "Fixed a couple of typos" msgstr "" -#: ../../../CHANGELOG:3202 +#: ../../../CHANGELOG.md:3040 msgid "Some cosmetic improvements to the doc" msgstr "" -#: ../../../CHANGELOG:3207 +#: ../../../CHANGELOG.md:3044 msgid "Arabic translation (!302)" msgstr "" -#: ../../../CHANGELOG:3208 +#: ../../../CHANGELOG.md:3045 msgid "Polish translation (!304)" msgstr "" -#: ../../../CHANGELOG:3212 +#: ../../../CHANGELOG.md:3047 msgid "Library home and playlist page overhaul" msgstr "" -#: ../../../CHANGELOG:3214 +#: ../../../CHANGELOG.md:3049 msgid "The library home page have been completely redesigned to include:" msgstr "" -#: ../../../CHANGELOG:3216 +#: ../../../CHANGELOG.md:3051 msgid "other users activity (listenings, playlists and favorites)" msgstr "" -#: ../../../CHANGELOG:3217 +#: ../../../CHANGELOG.md:3052 msgid "recently imported albums" msgstr "" -#: ../../../CHANGELOG:3219 +#: ../../../CHANGELOG.md:3054 msgid "" "We think this new version showcases more music in a more useful way, let " "us know what you think about it!" msgstr "" -#: ../../../CHANGELOG:3222 +#: ../../../CHANGELOG.md:3057 msgid "The playlist page have been updated as well." msgstr "" -#: ../../../CHANGELOG:3226 +#: ../../../CHANGELOG.md:3059 msgid "Internationalized interface" msgstr "" -#: ../../../CHANGELOG:3228 +#: ../../../CHANGELOG.md:3061 msgid "" "After months of work, we're proud to announce our interface is now ready " "for internationalization." msgstr "" -#: ../../../CHANGELOG:3231 +#: ../../../CHANGELOG.md:3064 msgid "" "Translators have already started the work of translating Funkwhale in 8 " "different languages, and we're ready to add more as needed." msgstr "" -#: ../../../CHANGELOG:3234 +#: ../../../CHANGELOG.md:3067 msgid "" "You can easily get involved at " "https://translate.funkwhale.audio/engage/funkwhale/" msgstr "" -#: ../../../CHANGELOG:3238 +#: ../../../CHANGELOG.md:3069 msgid "Better handling of tracks with a different artist than the album artist" msgstr "" -#: ../../../CHANGELOG:3240 +#: ../../../CHANGELOG.md:3071 msgid "" "Some tracks involve a different artist than the album artist (e.g. a " "featuring) and Funkwhale has been known to do weird things when importing" @@ -6320,47 +6657,47 @@ msgid "" "instance." msgstr "" -#: ../../../CHANGELOG:3244 +#: ../../../CHANGELOG.md:3075 msgid "" "The situation should be improved with this release, as Funkwhale is now " "able to store separately the track and album artist, and display it " "properly in the interface." msgstr "" -#: ../../../CHANGELOG:3249 +#: ../../../CHANGELOG.md:3078 msgid "Users now have an ActivityPub Actor [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3251 +#: ../../../CHANGELOG.md:3080 msgid "" "In the process of implementing federation for user activity such as " "listening history, we are now making user profiles (a.k.a. ActivityPub " "actors) available through federation." msgstr "" -#: ../../../CHANGELOG:3254 +#: ../../../CHANGELOG.md:3083 msgid "" "This does not means the federation is working, but this is a needed step " "to implement it." msgstr "" -#: ../../../CHANGELOG:3256 +#: ../../../CHANGELOG.md:3085 msgid "" "Those profiles will be created automatically for new users, but you have " "to run a command to create them for existing users." msgstr "" -#: ../../../CHANGELOG:3267 +#: ../../../CHANGELOG.md:3100 msgid "" "This should only take a few seconds to run. It is safe to interrupt the " "process or rerun it multiple times." msgstr "" -#: ../../../CHANGELOG:3271 +#: ../../../CHANGELOG.md:3102 msgid "Image thumbnails [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3273 +#: ../../../CHANGELOG.md:3104 msgid "" "To reduce bandwidth usage on slow or limited connexions and improve " "performance in general, we now use smaller images in the front-end. For " @@ -6370,38 +6707,38 @@ msgid "" "image." msgstr "" -#: ../../../CHANGELOG:3279 +#: ../../../CHANGELOG.md:3110 msgid "" "Thumbnail will be created automatically for new objects, however, you " "have to launch a manual command to deal with existing ones." msgstr "" -#: ../../../CHANGELOG:3290 +#: ../../../CHANGELOG.md:3125 msgid "" "This should be quite fast but may take up to a few minutes depending on " "the number of albums you have in database. It is safe to interrupt the " "process or rerun it multiple times." msgstr "" -#: ../../../CHANGELOG:3295 +#: ../../../CHANGELOG.md:3128 msgid "Improved search on federated tracks list" msgstr "" -#: ../../../CHANGELOG:3297 +#: ../../../CHANGELOG.md:3130 msgid "" "Having a powerful but easy-to-use search is important but difficult to " "achieve, especially if you do not want to have a real complex search " "interface." msgstr "" -#: ../../../CHANGELOG:3300 +#: ../../../CHANGELOG.md:3133 msgid "" "Github does a pretty good job with that, using a structured but simple " "query system (See https://help.github.com/articles/searching-issues-and-" "pull-requests/#search-only-issues-or-pull-requests)." msgstr "" -#: ../../../CHANGELOG:3303 +#: ../../../CHANGELOG.md:3136 msgid "" "This release implements a limited but working subset of this query " "system. You can use it only on the federated tracks list " @@ -6409,51 +6746,51 @@ msgid "" "will be rolled-out on other pages as well." msgstr "" -#: ../../../CHANGELOG:3306 +#: ../../../CHANGELOG.md:3139 msgid "This is the type of query you can run:" msgstr "" -#: ../../../CHANGELOG:3308 +#: ../../../CHANGELOG.md:3141 msgid "" -"``hello world``: search for \"hello\" and \"world\" in all the available " +"`hello world`: search for \"hello\" and \"world\" in all the available " "fields" msgstr "" -#: ../../../CHANGELOG:3309 -msgid "``hello in:artist`` search for results where artist name is \"hello\"" +#: ../../../CHANGELOG.md:3142 +msgid "`hello in:artist` search for results where artist name is \"hello\"" msgstr "" -#: ../../../CHANGELOG:3310 +#: ../../../CHANGELOG.md:3143 msgid "" -"``spring in:artist,album`` search for results where artist name or album " +"`spring in:artist,album` search for results where artist name or album " "title contain \"spring\"" msgstr "" -#: ../../../CHANGELOG:3311 -msgid "``artist:hello`` search for results where artist name equals \"hello\"" +#: ../../../CHANGELOG.md:3144 +msgid "`artist:hello` search for results where artist name equals \"hello\"" msgstr "" -#: ../../../CHANGELOG:3312 +#: ../../../CHANGELOG.md:3145 msgid "" -"``artist:\"System of a Down\" domain:instance.funkwhale`` search for " +"`artist:\"System of a Down\" domain:instance.funkwhale` search for " "results where artist name equals \"System of a Down\" and inside " "\"instance.funkwhale\" library" msgstr "" -#: ../../../CHANGELOG:3316 +#: ../../../CHANGELOG.md:3147 msgid "" -"Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitly " -"[Manual action required]" +"Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set " +"explicitly [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3318 +#: ../../../CHANGELOG.md:3149 msgid "" "In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by " "default, causing some deployment issues on non-docker setups when people " "forgot to uncomment them." msgstr "" -#: ../../../CHANGELOG:3321 +#: ../../../CHANGELOG.md:3152 msgid "" "From now on, those variables are uncommented, and will also be used on " "docker setups to mount the volumes automatically in the docker-" @@ -6462,180 +6799,180 @@ msgid "" "file." msgstr "" -#: ../../../CHANGELOG:3326 +#: ../../../CHANGELOG.md:3157 msgid "" "This also applies to in-place paths (MUSIC_DIRECTORY_PATH and " "MUSIC_DIRECTORY_SERVE_PATH), whose values are now used directly to set up" " the proper Docker volumes." msgstr "" -#: ../../../CHANGELOG:3329 +#: ../../../CHANGELOG.md:3160 msgid "" "This will only affect new deployments though. If you want to benefit from" -" this on an existing instance, do a backup of your ``.env`` and ``docker-" -"compose.yml`` files and apply the following changes:" +" this on an existing instance, do a backup of your `.env` and `docker-" +"compose.yml` files and apply the following changes:" msgstr "" -#: ../../../CHANGELOG:3332 +#: ../../../CHANGELOG.md:3163 msgid "" -"Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the " +"Ensure `MEDIA_ROOT` is uncommented in your .env file and match the " "absolute path where media files are stored on your host " -"(``/srv/funkwhale/data/media`` by default)" +"(`/srv/funkwhale/data/media` by default)" msgstr "" -#: ../../../CHANGELOG:3334 +#: ../../../CHANGELOG.md:3165 msgid "" -"Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the " +"Ensure `STATIC_ROOT` is uncommented in your .env file and match the " "absolute path where static files are stored on your host " -"(``/srv/funkwhale/data/static`` by default)" +"(`/srv/funkwhale/data/static` by default)" msgstr "" -#: ../../../CHANGELOG:3338 +#: ../../../CHANGELOG.md:3167 msgid "If you use in-place import:" msgstr "" -#: ../../../CHANGELOG:3337 -msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``" +#: ../../../CHANGELOG.md:3168 +msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music`" msgstr "" -#: ../../../CHANGELOG:3338 +#: ../../../CHANGELOG.md:3169 msgid "" "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute " "path on your host were your music files are stored " -"(``/srv/funkwhale/data/music`` by default)" +"(`/srv/funkwhale/data/music` by default)" msgstr "" -#: ../../../CHANGELOG:3346 +#: ../../../CHANGELOG.md:3171 msgid "Edit your docker-compose.yml file to reflect the changes:" msgstr "" -#: ../../../CHANGELOG:3341 +#: ../../../CHANGELOG.md:3172 msgid "" "Search for volumes (there should be two occurrences) that contains " -"``/app/funkwhale_api/media`` on the right side, and replace the whole " -"line with ``- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"``" +"`/app/funkwhale_api/media` on the right side, and replace the whole line " +"with `- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"`" msgstr "" -#: ../../../CHANGELOG:3343 +#: ../../../CHANGELOG.md:3174 msgid "" -"Search for a volume that contains ``/app/staticfiles`` on the right side," -" and replace the whole line with ``- \"${STATIC_ROOT}:${STATIC_ROOT}\"``" +"Search for a volume that contains `/app/staticfiles` on the right side, " +"and replace the whole line with `- \"${STATIC_ROOT}:${STATIC_ROOT}\"`" msgstr "" -#: ../../../CHANGELOG:3345 +#: ../../../CHANGELOG.md:3176 msgid "" "If you use in-place import, search for volumes (there should be two " -"occurrences) that contains ``/music:ro`` on the right side, and replace " -"the whole line with ``- " -"\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"``" +"occurrences) that contains `/music:ro` on the right side, and replace the" +" whole line with `- " +"\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"`" msgstr "" -#: ../../../CHANGELOG:3348 +#: ../../../CHANGELOG.md:3179 msgid "" -"In the end, the ``volumes`` directives of your containers should look " -"like that::" +"In the end, the `volumes` directives of your containers should look like " +"that:" msgstr "" -#: ../../../CHANGELOG:3366 +#: ../../../CHANGELOG.md:3198 msgid "Removed Cacheops dependency" msgstr "" -#: ../../../CHANGELOG:3368 +#: ../../../CHANGELOG.md:3200 msgid "" "We removed one of our dependency named django-cacheops. It was unly used " "in a few places, and not playing nice with other dependencies." msgstr "" -#: ../../../CHANGELOG:3371 +#: ../../../CHANGELOG.md:3203 msgid "" -"You can safely remove this dependency in your environment with ``pip " -"uninstall django-cacheops`` if you're not using docker." +"You can safely remove this dependency in your environment with `pip " +"uninstall django-cacheops` if you're not using docker." msgstr "" -#: ../../../CHANGELOG:3374 +#: ../../../CHANGELOG.md:3206 msgid "" -"You can also safely remove any ``CACHEOPS_ENABLED`` setting from your " +"You can also safely remove any `CACHEOPS_ENABLED` setting from your " "environment file." msgstr "" -#: ../../../CHANGELOG:3378 +#: ../../../CHANGELOG.md:3208 msgid "0.15 (2018-06-24)" msgstr "" -#: ../../../CHANGELOG:3385 +#: ../../../CHANGELOG.md:3215 msgid "Added admin interface to manage import requests (#190)" msgstr "" -#: ../../../CHANGELOG:3386 +#: ../../../CHANGELOG.md:3216 msgid "" "Added replace flag during import to replace already present tracks with a" " new version of their track file (#222)" msgstr "" -#: ../../../CHANGELOG:3388 +#: ../../../CHANGELOG.md:3218 msgid "" "Funkwhale's front-end can now point to any instance (#327) Removed front-" "end and back-end coupling" msgstr "" -#: ../../../CHANGELOG:3390 +#: ../../../CHANGELOG.md:3220 msgid "Management interface for users (#212)" msgstr "" -#: ../../../CHANGELOG:3391 +#: ../../../CHANGELOG.md:3221 msgid "New invite system (#248) New invite system" msgstr "" -#: ../../../CHANGELOG:3396 +#: ../../../CHANGELOG.md:3225 msgid "Added \"TV\" to the list of highlighted words during YouTube import (#154)" msgstr "" -#: ../../../CHANGELOG:3397 +#: ../../../CHANGELOG.md:3226 msgid "Command line import now accepts unlimited args (#242)" msgstr "" -#: ../../../CHANGELOG:3402 +#: ../../../CHANGELOG.md:3230 msgid "Expose track files date in manage API (#307)" msgstr "" -#: ../../../CHANGELOG:3403 +#: ../../../CHANGELOG.md:3231 msgid "" "Fixed current track restart/hiccup when shuffling queue, deleting track " "from queue or reordering (#310)" msgstr "" -#: ../../../CHANGELOG:3405 +#: ../../../CHANGELOG.md:3233 msgid "Include user's current private playlists on playlist list (#302)" msgstr "" -#: ../../../CHANGELOG:3406 +#: ../../../CHANGELOG.md:3234 msgid "Remove link to generic radios, since they don't have detail pages (#324)" msgstr "" -#: ../../../CHANGELOG:3411 +#: ../../../CHANGELOG.md:3238 msgid "Document that Funkwhale may be installed with YunoHost (#325)" msgstr "" -#: ../../../CHANGELOG:3412 +#: ../../../CHANGELOG.md:3239 msgid "Documented a saner layout with symlinks for in-place imports (#254)" msgstr "" -#: ../../../CHANGELOG:3413 +#: ../../../CHANGELOG.md:3240 msgid "Upgrade documentation now use the correct user on non-docker setups (#265)" msgstr "" -#: ../../../CHANGELOG:3417 +#: ../../../CHANGELOG.md:3242 msgid "Invite system" msgstr "" -#: ../../../CHANGELOG:3419 +#: ../../../CHANGELOG.md:3244 msgid "" "On closed instances, it has always been a little bit painful to create " "accounts by hand for new users. This release solve that by adding " "invitations." msgstr "" -#: ../../../CHANGELOG:3422 +#: ../../../CHANGELOG.md:3247 msgid "" "You can generate invitation codes via the \"users\" admin interface " "(you'll find a link in the sidebar). Those codes are valid for 14 days, " @@ -6643,56 +6980,56 @@ msgid "" "registrations are closed." msgstr "" -#: ../../../CHANGELOG:3426 +#: ../../../CHANGELOG.md:3251 msgid "" "By default, we generate a random code for invitations, but you can also " "use custom codes if you need to print them or make them fancier ;)" msgstr "" -#: ../../../CHANGELOG:3429 +#: ../../../CHANGELOG.md:3254 msgid "" "Invitations generation and management requires the \"settings\" " "permission." msgstr "" -#: ../../../CHANGELOG:3433 +#: ../../../CHANGELOG.md:3256 msgid "Removed front-end and back-end coupling" msgstr "" -#: ../../../CHANGELOG:3435 +#: ../../../CHANGELOG.md:3258 msgid "" "Even though Funkwhale's front-end has always been a Single Page " "Application, talking to an API, it was only able to talk to an API on the" " same domain." msgstr "" -#: ../../../CHANGELOG:3438 +#: ../../../CHANGELOG.md:3261 msgid "" "There was no real technical justification behind this (only laziness), " "and it was also blocking interesting use cases:" msgstr "" -#: ../../../CHANGELOG:3441 +#: ../../../CHANGELOG.md:3264 msgid "Use multiple customized versions of the front-end with the same instance" msgstr "" -#: ../../../CHANGELOG:3442 +#: ../../../CHANGELOG.md:3265 msgid "Use a customized version of the front-end with multiple instances" msgstr "" -#: ../../../CHANGELOG:3443 +#: ../../../CHANGELOG.md:3266 msgid "" "Use a locally hosted front-end with a remote API, which is especially " "useful in development" msgstr "" -#: ../../../CHANGELOG:3445 +#: ../../../CHANGELOG.md:3268 msgid "" "From now on, Funkwhale's front-end can connect to any Funkwhale server. " "You can change the server you are connecting to in the footer." msgstr "" -#: ../../../CHANGELOG:3448 +#: ../../../CHANGELOG.md:3271 msgid "" "Fixing this also unlocked a really interesting feature in our " "development/review workflow: by leveraging Gitlab CI and review apps, we " @@ -6701,96 +7038,96 @@ msgid "" " the need to install a local environment." msgstr "" -#: ../../../CHANGELOG:3455 +#: ../../../CHANGELOG.md:3276 msgid "0.14.2 (2018-06-16)" msgstr "" -#: ../../../CHANGELOG:3459 +#: ../../../CHANGELOG.md:3279 msgid "" "This release contains a fix for a permission issue. You should upgrade as" " soon as possible. Read the changelog below for more details." msgstr "" -#: ../../../CHANGELOG:3467 +#: ../../../CHANGELOG.md:3288 msgid "Added feedback on shuffle button (#262)" msgstr "" -#: ../../../CHANGELOG:3468 +#: ../../../CHANGELOG.md:3289 msgid "" "Added multiple warnings in the documentation that you should never run " "makemigrations yourself (#291)" msgstr "" -#: ../../../CHANGELOG:3470 +#: ../../../CHANGELOG.md:3291 msgid "Album cover served in http (#264)" msgstr "" -#: ../../../CHANGELOG:3471 +#: ../../../CHANGELOG.md:3292 msgid "" "Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25)" " (!252)" msgstr "" -#: ../../../CHANGELOG:3473 +#: ../../../CHANGELOG.md:3294 msgid "Display file size in human format during file upload (#289)" msgstr "" -#: ../../../CHANGELOG:3474 +#: ../../../CHANGELOG.md:3295 msgid "Switch from BSD-3 licence to AGPL-3 licence (#280)" msgstr "" -#: ../../../CHANGELOG:3478 +#: ../../../CHANGELOG.md:3299 msgid "Ensure radios can only be edited and deleted by their owners (#311)" msgstr "" -#: ../../../CHANGELOG:3479 +#: ../../../CHANGELOG.md:3300 msgid "Fixed admin menu not showing after login (#245)" msgstr "" -#: ../../../CHANGELOG:3480 +#: ../../../CHANGELOG.md:3301 msgid "Fixed broken pagination in Subsonic API (#295)" msgstr "" -#: ../../../CHANGELOG:3481 +#: ../../../CHANGELOG.md:3302 msgid "Fixed duplicated websocket connection on timeline (#287)" msgstr "" -#: ../../../CHANGELOG:3486 +#: ../../../CHANGELOG.md:3306 msgid "Improved documentation about in-place imports setup (#298)" msgstr "" -#: ../../../CHANGELOG:3491 +#: ../../../CHANGELOG.md:3310 msgid "" "Added Black and flake8 checks in CI to ensure consistent code styling and" " formatting (#297)" msgstr "" -#: ../../../CHANGELOG:3493 +#: ../../../CHANGELOG.md:3312 msgid "Added bug and feature issue templates (#299)" msgstr "" -#: ../../../CHANGELOG:3497 +#: ../../../CHANGELOG.md:3314 msgid "Permission issues on radios" msgstr "" -#: ../../../CHANGELOG:3499 +#: ../../../CHANGELOG.md:3316 msgid "" "Because of an error in the way we checked user permissions on radios, " "public radios could be deleted by any logged-in user, even if they were " "not the owner of the radio." msgstr "" -#: ../../../CHANGELOG:3503 +#: ../../../CHANGELOG.md:3320 msgid "" "We recommend instances owners to upgrade as fast as possible to avoid any" " abuse and data loss." msgstr "" -#: ../../../CHANGELOG:3508 +#: ../../../CHANGELOG.md:3323 msgid "Funkwhale is now licenced under AGPL-3" msgstr "" -#: ../../../CHANGELOG:3510 +#: ../../../CHANGELOG.md:3325 msgid "" "Following the recent switch made by PixelFed " "(https://github.com/dansup/pixelfed/issues/143), we decided along with " @@ -6798,48 +7135,48 @@ msgid "" "this switch for various reasons:" msgstr "" -#: ../../../CHANGELOG:3515 +#: ../../../CHANGELOG.md:3330 msgid "This is better aligned with other fediverse software" msgstr "" -#: ../../../CHANGELOG:3516 +#: ../../../CHANGELOG.md:3331 msgid "" "It prohibits anyone to distribute closed-source and proprietary forks of " "Funkwhale" msgstr "" -#: ../../../CHANGELOG:3518 +#: ../../../CHANGELOG.md:3333 msgid "" "As end users and instance owners, this does not change anything. You can " "continue to use Funkwhale exactly as you did before :)" msgstr "" -#: ../../../CHANGELOG:3523 +#: ../../../CHANGELOG.md:3336 msgid "Apache support for websocket" msgstr "" -#: ../../../CHANGELOG:3525 +#: ../../../CHANGELOG.md:3338 msgid "" "Up until now, our Apache2 configuration was not working with websockets. " "This is now solved by adding this at the beginning of your Apache2 " -"configuration file::" +"configuration file:" msgstr "" -#: ../../../CHANGELOG:3530 -msgid "And this, before the \"/api\" block::" +#: ../../../CHANGELOG.md:3345 +msgid "And this, before the \"/api\" block:" msgstr "" -#: ../../../CHANGELOG:3535 +#: ../../../CHANGELOG.md:3352 msgid "" "Websockets may not be supported in older versions of Apache2. Be sure to " "upgrade to the latest version available." msgstr "" -#: ../../../CHANGELOG:3539 +#: ../../../CHANGELOG.md:3354 msgid "Serving album covers in https (Apache2 proxy)" msgstr "" -#: ../../../CHANGELOG:3541 +#: ../../../CHANGELOG.md:3356 msgid "" "Two issues are addressed here. The first one was about Django replying " "with mixed content (http) when queried for covers. Setting up the `X" @@ -6847,100 +7184,100 @@ msgid "" "and that the reply must be https as well." msgstr "" -#: ../../../CHANGELOG:3546 +#: ../../../CHANGELOG.md:3361 msgid "" "Second issue was a problem of permission causing Apache a denied access " "to album cover folder. It is solved by adding another block for this path" " in the Apache configuration file for funkwhale." msgstr "" -#: ../../../CHANGELOG:3550 -msgid "Here is how to modify your `funkwhale.conf` apache2 configuration::" +#: ../../../CHANGELOG.md:3365 +msgid "Here is how to modify your `funkwhale.conf` apache2 configuration:" msgstr "" -#: ../../../CHANGELOG:3571 +#: ../../../CHANGELOG.md:3385 msgid "About the makemigrations warning" msgstr "" -#: ../../../CHANGELOG:3573 -msgid "You may sometimes get the following warning while applying migrations::" +#: ../../../CHANGELOG.md:3387 +msgid "You may sometimes get the following warning while applying migrations:" msgstr "" -#: ../../../CHANGELOG:3577 +#: ../../../CHANGELOG.md:3393 msgid "" "This is a warning, not an error, and it can be safely ignored. Never run " -"the ``makemigrations`` command yourself." +"the `makemigrations` command yourself." msgstr "" -#: ../../../CHANGELOG:3582 +#: ../../../CHANGELOG.md:3396 msgid "0.14.1 (2018-06-06)" msgstr "" -#: ../../../CHANGELOG:3588 +#: ../../../CHANGELOG.md:3402 msgid "Display server version in the footer (#270)" msgstr "" -#: ../../../CHANGELOG:3589 +#: ../../../CHANGELOG.md:3403 msgid "" "fix_track_files will now update files with bad mimetype (and not only the" " one with no mimetype) (#273)" msgstr "" -#: ../../../CHANGELOG:3591 +#: ../../../CHANGELOG.md:3405 msgid "" "Huge performance boost (~x5 to x7) during CLI import that queries " "MusicBrainz (#288)" msgstr "" -#: ../../../CHANGELOG:3593 +#: ../../../CHANGELOG.md:3407 msgid "Removed alpha-state transcoding support (#271)" msgstr "" -#: ../../../CHANGELOG:3597 +#: ../../../CHANGELOG.md:3411 msgid "Broken logging statement during import error (#274)" msgstr "" -#: ../../../CHANGELOG:3598 +#: ../../../CHANGELOG.md:3412 msgid "Broken search bar on library home (#278)" msgstr "" -#: ../../../CHANGELOG:3599 +#: ../../../CHANGELOG.md:3413 msgid "" "Do not crash when importing track with an artist that do not match the " "release artist (#237)" msgstr "" -#: ../../../CHANGELOG:3601 +#: ../../../CHANGELOG.md:3415 msgid "Do not crash when tag contains multiple uuids with a / separator (#267)" msgstr "" -#: ../../../CHANGELOG:3602 +#: ../../../CHANGELOG.md:3416 msgid "Ensure we do not store bad mimetypes (such as application/x-empty) (#266)" msgstr "" -#: ../../../CHANGELOG:3603 +#: ../../../CHANGELOG.md:3417 msgid "Fix broken \"play all\" button that played only 25 tracks (#281)" msgstr "" -#: ../../../CHANGELOG:3604 +#: ../../../CHANGELOG.md:3418 msgid "Fixed broken track download modal (overflow and wrong URL) (#239)" msgstr "" -#: ../../../CHANGELOG:3605 +#: ../../../CHANGELOG.md:3419 msgid "Removed hardcoded size limit in file upload widget (#275)" msgstr "" -#: ../../../CHANGELOG:3610 +#: ../../../CHANGELOG.md:3423 msgid "" -"Added warning about _protected/music location in nginx configuration " +"Added warning about \\_protected/music location in nginx configuration " "(#247)" msgstr "" -#: ../../../CHANGELOG:3614 +#: ../../../CHANGELOG.md:3425 msgid "Removed alpha-state transcoding (#271)" msgstr "" -#: ../../../CHANGELOG:3616 +#: ../../../CHANGELOG.md:3427 msgid "" "A few months ago, a basic transcoding feature was implemented. Due to the" " way this feature was designed, it was slow, CPU intensive on the server " @@ -6949,170 +7286,161 @@ msgid "" "with Subsonic clients." msgstr "" -#: ../../../CHANGELOG:3621 +#: ../../../CHANGELOG.md:3432 msgid "" "Based on that, we're currently removing support for transcoding **in its " "current state**. The work on a better designed transcoding feature can be" " tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272." msgstr "" -#: ../../../CHANGELOG:3625 +#: ../../../CHANGELOG.md:3436 msgid "" "You don't have to do anything on your side, but you may want to remove " -"the now obsolete configuration from your reverse proxy file (nginx " -"only)::" +"the now obsolete configuration from your reverse proxy file (nginx only):" msgstr "" -#: ../../../CHANGELOG:3670 +#: ../../../CHANGELOG.md:3481 msgid "0.14 (2018-06-02)" msgstr "" -#: ../../../CHANGELOG:3673 ../../../CHANGELOG:3877 ../../../CHANGELOG:3998 -msgid "Upgrade instructions are available at" -msgstr "" - -#: ../../../CHANGELOG:3673 ../../../CHANGELOG:3877 ../../../CHANGELOG:3998 -msgid "https://docs.funkwhale.audio/upgrading.html" -msgstr "" - -#: ../../../CHANGELOG:3677 +#: ../../../CHANGELOG.md:3488 msgid "" "Admins can now configure default permissions that will be granted to all " "registered users (#236)" msgstr "" -#: ../../../CHANGELOG:3679 +#: ../../../CHANGELOG.md:3490 msgid "Files management interface for users with \"library\" permission (#223)" msgstr "" -#: ../../../CHANGELOG:3680 +#: ../../../CHANGELOG.md:3491 msgid "" "New action table component for quick and efficient batch actions (#228) " "This is implemented on the federated tracks pages, but will be included " "in other pages as well depending on the feedback." msgstr "" -#: ../../../CHANGELOG:3687 +#: ../../../CHANGELOG.md:3497 msgid "" "Added a new \"upload\" permission that allows user to launch import and " "view their own imports (#230)" msgstr "" -#: ../../../CHANGELOG:3689 +#: ../../../CHANGELOG.md:3499 msgid "Added Support for OggTheora in import." msgstr "" -#: ../../../CHANGELOG:3690 +#: ../../../CHANGELOG.md:3500 msgid "Autoremove media files on model instance deletion (#241)" msgstr "" -#: ../../../CHANGELOG:3691 +#: ../../../CHANGELOG.md:3501 msgid "" "Can now import a whole remote library at once thanks to new Action Table " "component (#164)" msgstr "" -#: ../../../CHANGELOG:3693 +#: ../../../CHANGELOG.md:3503 msgid "" "Can now use album covers from flac/mp3 metadata and separate file in " "track directory (#219)" msgstr "" -#: ../../../CHANGELOG:3695 +#: ../../../CHANGELOG.md:3505 msgid "Implemented getCovertArt in Subsonic API to serve album covers (#258)" msgstr "" -#: ../../../CHANGELOG:3696 +#: ../../../CHANGELOG.md:3506 msgid "" "Implemented scrobble endpoint of subsonic API, listenings are now tracked" " correctly from third party apps that use this endpoint (#260)" msgstr "" -#: ../../../CHANGELOG:3698 +#: ../../../CHANGELOG.md:3508 msgid "" "Retructured music API to increase performance and remove useless " "endpoints (#224)" msgstr "" -#: ../../../CHANGELOG:3704 +#: ../../../CHANGELOG.md:3513 msgid "Consistent constraints/checks for URL size (#207)" msgstr "" -#: ../../../CHANGELOG:3705 +#: ../../../CHANGELOG.md:3514 msgid "Display proper total number of tracks on radio detail (#225)" msgstr "" -#: ../../../CHANGELOG:3706 +#: ../../../CHANGELOG.md:3515 msgid "Do not crash on flac import if musicbrainz tags are missing (#214)" msgstr "" -#: ../../../CHANGELOG:3707 +#: ../../../CHANGELOG.md:3516 msgid "Empty save button in radio builder (#226)" msgstr "" -#: ../../../CHANGELOG:3708 +#: ../../../CHANGELOG.md:3517 msgid "" "Ensure anonymous users can use the app if the instance is configured " "accordingly (#229)" msgstr "" -#: ../../../CHANGELOG:3710 +#: ../../../CHANGELOG.md:3519 msgid "" "Ensure inactive users cannot get auth tokens (#218) This was already the " "case bug we missed some checks" msgstr "" -#: ../../../CHANGELOG:3712 +#: ../../../CHANGELOG.md:3521 msgid "File-upload import now supports Flac files (#213)" msgstr "" -#: ../../../CHANGELOG:3713 +#: ../../../CHANGELOG.md:3522 msgid "" "File-upload importer should now work properly, assuming files are tagged " "(#106)" msgstr "" -#: ../../../CHANGELOG:3715 +#: ../../../CHANGELOG.md:3524 msgid "Fixed a few broken translations strings (#227)" msgstr "" -#: ../../../CHANGELOG:3716 +#: ../../../CHANGELOG.md:3525 msgid "Fixed broken ordering in front-end lists (#179)" msgstr "" -#: ../../../CHANGELOG:3717 +#: ../../../CHANGELOG.md:3526 msgid "Fixed ignored page_size parameter on artist and favorites list (#240)" msgstr "" -#: ../../../CHANGELOG:3718 +#: ../../../CHANGELOG.md:3527 msgid "Read ID3Tag Tracknumber from TRCK (#220)" msgstr "" -#: ../../../CHANGELOG:3719 +#: ../../../CHANGELOG.md:3528 msgid "We now fetch album covers regardless of the import methods (#231)" msgstr "" -#: ../../../CHANGELOG:3723 +#: ../../../CHANGELOG.md:3532 msgid "" "Added missing subsonic configuration block in deployment vhost files " "(#249)" msgstr "" -#: ../../../CHANGELOG:3724 +#: ../../../CHANGELOG.md:3533 msgid "Moved upgrade doc under install doc in TOC (#251)" msgstr "" -#: ../../../CHANGELOG:3729 +#: ../../../CHANGELOG.md:3537 msgid "" "Removed acoustid support, as the integration was buggy and error-prone " "(#106)" msgstr "" -#: ../../../CHANGELOG:3733 +#: ../../../CHANGELOG.md:3539 msgid "Files management interface" msgstr "" -#: ../../../CHANGELOG:3735 +#: ../../../CHANGELOG.md:3541 msgid "" "This is the first bit of an ongoing work that will span several releases," " to bring more powerful library management features to Funkwhale. This " @@ -7121,11 +7449,11 @@ msgid "" "using various criteria (size, bitrate, duration...) and delete them." msgstr "" -#: ../../../CHANGELOG:3742 +#: ../../../CHANGELOG.md:3547 msgid "New \"upload\" permission" msgstr "" -#: ../../../CHANGELOG:3744 +#: ../../../CHANGELOG.md:3549 msgid "" "This new permission is helpful if you want to give upload/import rights " "to some users, but don't want them to be able to manage the library as a " @@ -7134,7 +7462,7 @@ msgid "" "artists, files, etc." msgstr "" -#: ../../../CHANGELOG:3750 +#: ../../../CHANGELOG.md:3555 msgid "" "Because of that, users with the \"library\" permission will have much " "more power, and will also be able to remove content from the platform. On" @@ -7142,7 +7470,7 @@ msgid "" "ability to add new content." msgstr "" -#: ../../../CHANGELOG:3755 +#: ../../../CHANGELOG.md:3560 msgid "" "Also, this release also includes a new feature called \"default " "permissions\": those are permissions that are granted to every users on " @@ -7152,11 +7480,11 @@ msgid "" "user." msgstr "" -#: ../../../CHANGELOG:3762 +#: ../../../CHANGELOG.md:3566 msgid "Smarter album cover importer" msgstr "" -#: ../../../CHANGELOG:3764 +#: ../../../CHANGELOG.md:3568 msgid "" "In earlier versions, covers where only imported when launching a YouTube " "import. Starting from this release, covers will be imported regardless of" @@ -7164,43 +7492,43 @@ msgid "" "will look for covers in the following order:" msgstr "" -#: ../../../CHANGELOG:3769 +#: ../../../CHANGELOG.md:3573 msgid "In the imported file itself (FLAC/MP3 only)" msgstr "" -#: ../../../CHANGELOG:3770 +#: ../../../CHANGELOG.md:3574 msgid "In a cover.jpg or cover.png in the file directory" msgstr "" -#: ../../../CHANGELOG:3771 +#: ../../../CHANGELOG.md:3575 msgid "" "By fetching cover art from Musibrainz, assuming the file is tagged " "correctly" msgstr "" -#: ../../../CHANGELOG:3773 +#: ../../../CHANGELOG.md:3577 msgid "" "This will only work for newly imported tracks and albums though. In the " "future, we may offer an option to refetch album covers from the " "interface, but in the meantime, you can use the following snippet:" msgstr "" -#: ../../../CHANGELOG:3791 -msgid "Then launch it::" +#: ../../../CHANGELOG.md:3595 +msgid "Then launch it:" msgstr "" -#: ../../../CHANGELOG:3806 +#: ../../../CHANGELOG.md:3611 msgid "" "Depending on your number of albums, the previous snippet may take some " "time to execute. You can interrupt it at any time using ctrl-c and " "relaunch it later, as it's idempotent." msgstr "" -#: ../../../CHANGELOG:3811 +#: ../../../CHANGELOG.md:3616 msgid "Music API changes" msgstr "" -#: ../../../CHANGELOG:3813 +#: ../../../CHANGELOG.md:3618 msgid "" "This release includes an API break. Even though the API is advertised as " "unstable, and not documented, here is a brief explanation of the change " @@ -7208,66 +7536,66 @@ msgid "" "changes:" msgstr "" -#: ../../../CHANGELOG:3817 +#: ../../../CHANGELOG.md:3622 msgid "" -"``/api/v1/artists`` does not includes a list of tracks anymore. It was to" -" heavy to return all of this data all the time. You can get all tracks " -"for an artist using ``/api/v1/tracks?artist=artist_id``" +"`/api/v1/artists` does not includes a list of tracks anymore. It was to " +"heavy to return all of this data all the time. You can get all tracks for" +" an artist using `/api/v1/tracks?artist=artist_id`" msgstr "" -#: ../../../CHANGELOG:3820 +#: ../../../CHANGELOG.md:3625 msgid "" -"Additionally, ``/api/v1/tracks`` now support an ``album`` filter to " -"filter tracks matching an album" +"Additionally, `/api/v1/tracks` now support an `album` filter to filter " +"tracks matching an album" msgstr "" -#: ../../../CHANGELOG:3822 +#: ../../../CHANGELOG.md:3627 msgid "" -"``/api/v1/artists/search``, ``/api/v1/albums/search`` and " -"``/api/v1/tracks/search`` endpoints are removed. Use " -"``/api/v1/{artists|albums|tracks}/?q=yourquery`` instead. It's also more " +"`/api/v1/artists/search`, `/api/v1/albums/search` and " +"`/api/v1/tracks/search` endpoints are removed. Use " +"`/api/v1/{artists|albums|tracks}/?q=yourquery` instead. It's also more " "powerful, since you can combine search with other filters and ordering " "options." msgstr "" -#: ../../../CHANGELOG:3826 +#: ../../../CHANGELOG.md:3631 msgid "" -"``/api/v1/requests/import-requests/search`` endpoint is removed as well. " -"Use ``/api/v1/requests/import-requests/?q=yourquery`` instead. It's also " +"`/api/v1/requests/import-requests/search` endpoint is removed as well. " +"Use `/api/v1/requests/import-requests/?q=yourquery` instead. It's also " "more powerful, since you can combine search with other filters and " "ordering options." msgstr "" -#: ../../../CHANGELOG:3831 +#: ../../../CHANGELOG.md:3636 msgid "" "Of course, the front-end was updated to work with the new API, so this " "should not impact end-users in any way, apart from slight performance " "gains." msgstr "" -#: ../../../CHANGELOG:3836 +#: ../../../CHANGELOG.md:3640 msgid "" "The API is still not stable and may evolve again in the future. API " "freeze will come at a later point." msgstr "" -#: ../../../CHANGELOG:3840 +#: ../../../CHANGELOG.md:3644 msgid "Flac files imports via upload" msgstr "" -#: ../../../CHANGELOG:3842 +#: ../../../CHANGELOG.md:3646 msgid "" "You have nothing to do to benefit from this, however, since Flac files " "tend to be a lot bigger than other files, you may want to increase the " -"``client_max_body_size`` value in your Nginx configuration if you plan to" -" upload flac files." +"`client_max_body_size` value in your Nginx configuration if you plan to " +"upload flac files." msgstr "" -#: ../../../CHANGELOG:3848 +#: ../../../CHANGELOG.md:3651 msgid "Missing subsonic configuration block in vhost files" msgstr "" -#: ../../../CHANGELOG:3850 +#: ../../../CHANGELOG.md:3653 msgid "" "Because of a missing block in the sample Nginx and Apache configurations," " instances that were deployed after the 0.13 release are likely to be " @@ -7275,85 +7603,85 @@ msgid "" "documented in the changelog)." msgstr "" -#: ../../../CHANGELOG:3855 +#: ../../../CHANGELOG.md:3658 msgid "" "Ensure you have the following snippets in your Nginx or Apache " "configuration if you plan to use the Subsonic API." msgstr "" -#: ../../../CHANGELOG:3858 -msgid "Nginx::" +#: ../../../CHANGELOG.md:3661 +msgid "Nginx:" msgstr "" -#: ../../../CHANGELOG:3865 -msgid "Apache2::" +#: ../../../CHANGELOG.md:3670 +msgid "Apache2:" msgstr "" -#: ../../../CHANGELOG:3874 +#: ../../../CHANGELOG.md:3679 msgid "0.13 (2018-05-19)" msgstr "" -#: ../../../CHANGELOG:3881 +#: ../../../CHANGELOG.md:3686 msgid "Can now import and play flac files (#157)" msgstr "" -#: ../../../CHANGELOG:3882 +#: ../../../CHANGELOG.md:3687 msgid "Simpler permission system (#152)" msgstr "" -#: ../../../CHANGELOG:3883 +#: ../../../CHANGELOG.md:3688 msgid "Store file length, size and bitrate (#195)" msgstr "" -#: ../../../CHANGELOG:3884 +#: ../../../CHANGELOG.md:3689 msgid "" "We now have a brand new instance settings interface in the front-end " "(#206)" msgstr "" -#: ../../../CHANGELOG:3889 +#: ../../../CHANGELOG.md:3693 msgid "Disabled browsable HTML API in production (#205)" msgstr "" -#: ../../../CHANGELOG:3890 +#: ../../../CHANGELOG.md:3694 msgid "" "Instances can now indicate on the nodeinfo endpoint if they want to " "remain private (#200)" msgstr "" -#: ../../../CHANGELOG:3896 +#: ../../../CHANGELOG.md:3699 msgid "" ".well-known/nodeinfo endpoint can now answer to request with Accept: " "application/json (#197)" msgstr "" -#: ../../../CHANGELOG:3898 +#: ../../../CHANGELOG.md:3701 msgid "Fixed escaping issue of track name in playlist modal (#201)" msgstr "" -#: ../../../CHANGELOG:3899 +#: ../../../CHANGELOG.md:3702 msgid "Fixed missing dot when downloading file (#204)" msgstr "" -#: ../../../CHANGELOG:3900 +#: ../../../CHANGELOG.md:3703 msgid "" "In-place imported tracks with non-ascii characters don't break reverse-" "proxy serving (#196)" msgstr "" -#: ../../../CHANGELOG:3902 +#: ../../../CHANGELOG.md:3705 msgid "Removed Python 3.6 dependency (secrets module) (#198)" msgstr "" -#: ../../../CHANGELOG:3903 +#: ../../../CHANGELOG.md:3706 msgid "Uplayable tracks are now properly disabled in the interface (#199)" msgstr "" -#: ../../../CHANGELOG:3907 +#: ../../../CHANGELOG.md:3708 msgid "Instance settings interface" msgstr "" -#: ../../../CHANGELOG:3909 +#: ../../../CHANGELOG.md:3710 msgid "" "Prior to this release, the only way to update instance settings (such as " "instance description, signup policy, federation configuration, etc.) was " @@ -7361,46 +7689,46 @@ msgid "" "which power the API)." msgstr "" -#: ../../../CHANGELOG:3913 +#: ../../../CHANGELOG.md:3714 msgid "This interface worked, but was not really-user friendly and intuitive." msgstr "" -#: ../../../CHANGELOG:3915 +#: ../../../CHANGELOG.md:3716 msgid "" "Starting from this release, we now offer a dedicated interface directly " "in the front-end. You can view and edit all your instance settings from " "here, assuming you have the required permissions." msgstr "" -#: ../../../CHANGELOG:3919 +#: ../../../CHANGELOG.md:3720 msgid "" -"This interface is available at ``/manage/settings`` and via link in the " +"This interface is available at `/manage/settings` and via link in the " "sidebar." msgstr "" -#: ../../../CHANGELOG:3923 +#: ../../../CHANGELOG.md:3722 msgid "Storage of bitrate, size and length in database" msgstr "" -#: ../../../CHANGELOG:3925 +#: ../../../CHANGELOG.md:3724 msgid "" "Starting with this release, when importing files, Funkwhale will store " "additional information about audio files:" msgstr "" -#: ../../../CHANGELOG:3928 +#: ../../../CHANGELOG.md:3727 msgid "Bitrate" msgstr "" -#: ../../../CHANGELOG:3929 +#: ../../../CHANGELOG.md:3728 msgid "Size (in bytes)" msgstr "" -#: ../../../CHANGELOG:3930 +#: ../../../CHANGELOG.md:3729 msgid "Duration" msgstr "" -#: ../../../CHANGELOG:3932 +#: ../../../CHANGELOG.md:3731 msgid "" "This change is not retroactive, meaning already imported files will lack " "those information. The interface and API should work as before in such " @@ -7408,15 +7736,7 @@ msgid "" "the missing values." msgstr "" -#: ../../../CHANGELOG:3936 ../../../CHANGELOG:3976 -msgid "On docker setups:" -msgstr "" - -#: ../../../CHANGELOG:3943 ../../../CHANGELOG:3982 -msgid "On non-docker setups:" -msgstr "" - -#: ../../../CHANGELOG:3952 +#: ../../../CHANGELOG.md:3749 msgid "" "The execution time for this command is proportional to the number of " "audio files stored on your instance. This is because we need to read the " @@ -7424,87 +7744,87 @@ msgid "" " Funkwhale is up." msgstr "" -#: ../../../CHANGELOG:3957 +#: ../../../CHANGELOG.md:3754 msgid "" "It's also safe to interrupt this command and rerun it at a later point, " "or run it multiple times." msgstr "" -#: ../../../CHANGELOG:3960 +#: ../../../CHANGELOG.md:3757 msgid "Use the --dry-run flag to check how many files would be impacted." msgstr "" -#: ../../../CHANGELOG:3964 +#: ../../../CHANGELOG.md:3760 msgid "Simpler permission system" msgstr "" -#: ../../../CHANGELOG:3966 +#: ../../../CHANGELOG.md:3762 msgid "" "Starting from this release, the permission system is much simpler. Up " "until now, we were using Django's built-in permission system, which was " "working, but also quite complex to deal with." msgstr "" -#: ../../../CHANGELOG:3970 +#: ../../../CHANGELOG.md:3766 msgid "" "The new implementation relies on simpler logic, which will make " "integration on the front-end in upcoming releases faster and easier." msgstr "" -#: ../../../CHANGELOG:3973 +#: ../../../CHANGELOG.md:3769 msgid "" "If you have manually given permissions to users on your instance, you can" " migrate those to the new system." msgstr "" -#: ../../../CHANGELOG:3989 +#: ../../../CHANGELOG.md:3785 msgid "" "There is still no dedicated interface to manage user permissions, but you" -" can use the admin interface at ``/api/admin/users/user/`` for that " -"purpose in the meantime." +" can use the admin interface at `/api/admin/users/user/` for that purpose" +" in the meantime." msgstr "" -#: ../../../CHANGELOG:3995 +#: ../../../CHANGELOG.md:3789 msgid "0.12 (2018-05-09)" msgstr "" -#: ../../../CHANGELOG:4002 +#: ../../../CHANGELOG.md:3796 msgid "" "Subsonic API implementation to offer compatibility with existing clients " "such as DSub (#75)" msgstr "" -#: ../../../CHANGELOG:4004 +#: ../../../CHANGELOG.md:3798 msgid "Use nodeinfo standard for publishing instance information (#192)" msgstr "" -#: ../../../CHANGELOG:4009 +#: ../../../CHANGELOG.md:3802 msgid "" "Play button now play tracks immediately instead of appending them to the " "queue (#99, #156)" msgstr "" -#: ../../../CHANGELOG:4015 +#: ../../../CHANGELOG.md:3807 msgid "Fix broken federated import (#193)" msgstr "" -#: ../../../CHANGELOG:4020 +#: ../../../CHANGELOG.md:3811 msgid "" "Up-to-date documentation for upgrading front-end files on docker setup " "(#132)" msgstr "" -#: ../../../CHANGELOG:4024 +#: ../../../CHANGELOG.md:3813 msgid "Subsonic API" msgstr "" -#: ../../../CHANGELOG:4026 +#: ../../../CHANGELOG.md:3815 msgid "" "This release implements some core parts of the Subsonic API, which is " "widely deployed in various projects and supported by numerous clients." msgstr "" -#: ../../../CHANGELOG:4029 +#: ../../../CHANGELOG.md:3818 msgid "" "By offering this API in Funkwhale, we make it possible to access the " "instance library and listen to the music without from existing Subsonic " @@ -7512,40 +7832,40 @@ msgid "" " every platform." msgstr "" -#: ../../../CHANGELOG:4033 +#: ../../../CHANGELOG.md:3822 msgid "" "Most advanced Subsonic clients support offline caching of music files, " "playlist management and search, which makes them well-suited for nomadic " "use." msgstr "" -#: ../../../CHANGELOG:4036 +#: ../../../CHANGELOG.md:3825 msgid "" -"Please see `our list of supported apps " -"<https://funkwhale.audio/en_US/apps>`_ for more information about " +"Please see [our list of supported " +"apps](https://funkwhale.audio/en_US/apps) for more information about " "supported clients and user instructions." msgstr "" -#: ../../../CHANGELOG:4039 +#: ../../../CHANGELOG.md:3828 msgid "" "At the instance-level, the Subsonic API is enabled by default, but " "require and additional endpoint to be added in you reverse-proxy " "configuration." msgstr "" -#: ../../../CHANGELOG:4042 -msgid "On nginx, add the following block::" +#: ../../../CHANGELOG.md:3831 +msgid "On nginx, add the following block:" msgstr "" -#: ../../../CHANGELOG:4049 -msgid "On Apache, add the following block::" +#: ../../../CHANGELOG.md:3840 +msgid "On Apache, add the following block:" msgstr "" -#: ../../../CHANGELOG:4056 +#: ../../../CHANGELOG.md:3849 msgid "The Subsonic can be disabled at the instance level from the django admin." msgstr "" -#: ../../../CHANGELOG:4060 +#: ../../../CHANGELOG.md:3852 msgid "" "Because of Subsonic's API design which assumes cleartext storing of user " "passwords, we chose to have a dedicated, separate password for that " @@ -7553,25 +7873,25 @@ msgid "" " web client." msgstr "" -#: ../../../CHANGELOG:4067 +#: ../../../CHANGELOG.md:3858 msgid "Nodeinfo standard for instance information and stats" msgstr "" -#: ../../../CHANGELOG:4071 +#: ../../../CHANGELOG.md:3861 msgid "" "The ``/api/v1/instance/stats/`` endpoint which was used to display " "instance data in the about page is removed in favor of the new " "``/api/v1/instance/nodeinfo/2.0/`` endpoint." msgstr "" -#: ../../../CHANGELOG:4075 +#: ../../../CHANGELOG.md:3866 msgid "" "In earlier version, we where using a custom endpoint and format for our " "instance information and statistics. While this was working, this was not" " compatible with anything else on the fediverse." msgstr "" -#: ../../../CHANGELOG:4079 +#: ../../../CHANGELOG.md:3870 msgid "" "We now offer a nodeinfo 2.0 endpoint which provides, in a single place, " "all the instance information such as library and user activity " @@ -7579,18 +7899,18 @@ msgid "" "federation status, etc.)." msgstr "" -#: ../../../CHANGELOG:4083 +#: ../../../CHANGELOG.md:3874 msgid "We offer two settings to manage nodeinfo in your Funkwhale instance:" msgstr "" -#: ../../../CHANGELOG:4085 +#: ../../../CHANGELOG.md:3876 msgid "" "One setting to completely disable nodeinfo, but this is not recommended " "as the exposed data may be needed to make some parts of the front-end " "work (especially the about page)." msgstr "" -#: ../../../CHANGELOG:4088 +#: ../../../CHANGELOG.md:3879 msgid "" "One setting to disable only usage and library statistics in the nodeinfo " "endpoint. This is useful if you want the nodeinfo endpoint to work, but " @@ -7598,42 +7918,42 @@ msgid "" "and user activity." msgstr "" -#: ../../../CHANGELOG:4093 +#: ../../../CHANGELOG.md:3884 msgid "" "To make your instance fully compatible with the nodeinfo protocol, you " -"need to to edit your nginx configuration file::" +"need to to edit your nginx configuration file:" msgstr "" -#: ../../../CHANGELOG:4112 -msgid "You can do the same if you use apache::" +#: ../../../CHANGELOG.md:3905 +msgid "You can do the same if you use apache:" msgstr "" -#: ../../../CHANGELOG:4130 +#: ../../../CHANGELOG.md:3925 msgid "" "This will ensure all well-known endpoints are proxied to funkwhale, and " "not just webfinger one." msgstr "" -#: ../../../CHANGELOG:4133 +#: ../../../CHANGELOG.md:3928 msgid "Links:" msgstr "" -#: ../../../CHANGELOG:4135 +#: ../../../CHANGELOG.md:3930 msgid "About nodeinfo: https://github.com/jhass/nodeinfo" msgstr "" -#: ../../../CHANGELOG:4139 +#: ../../../CHANGELOG.md:3932 msgid "0.11 (2018-05-06)" msgstr "" -#: ../../../CHANGELOG:4143 +#: ../../../CHANGELOG.md:3936 msgid "" "Special thanks for this release go to @renon:matrix.org (@Hazmo on " "Gitlab) for bringing Apache2 support to Funkwhale and contributing on " "other issues. Thank you!" msgstr "" -#: ../../../CHANGELOG:4149 +#: ../../../CHANGELOG.md:3942 msgid "" "Funkwhale now works behind an Apache2 reverse proxy (!165) check out the " "brand new documentation at " @@ -7641,270 +7961,269 @@ msgid "" "to try it!" msgstr "" -#: ../../../CHANGELOG:4152 +#: ../../../CHANGELOG.md:3945 msgid "" "Users can now request password reset by email, assuming a SMTP server was" " correctly configured (#187)" msgstr "" -#: ../../../CHANGELOG:4157 +#: ../../../CHANGELOG.md:3950 msgid "" "Added a fix_track_files command to run checks and fixes against library " "(#183)" msgstr "" -#: ../../../CHANGELOG:4159 +#: ../../../CHANGELOG.md:3952 msgid "Avoid fetching Actor object on every request authentication" msgstr "" -#: ../../../CHANGELOG:4160 +#: ../../../CHANGELOG.md:3953 msgid "Can now relaunch errored jobs and batches (#176)" msgstr "" -#: ../../../CHANGELOG:4161 +#: ../../../CHANGELOG.md:3954 msgid "" "List pending requests by default, added a status filter for requests " "(#109)" msgstr "" -#: ../../../CHANGELOG:4162 +#: ../../../CHANGELOG.md:3955 msgid "More structured menus in sidebar, added labels with notifications" msgstr "" -#: ../../../CHANGELOG:4163 +#: ../../../CHANGELOG.md:3956 msgid "Sample virtual-host file for Apache2 reverse-proxy (!165)" msgstr "" -#: ../../../CHANGELOG:4164 +#: ../../../CHANGELOG.md:3957 msgid "" "Store high-level settings (such as federation or auth-related ones) in " "database (#186)" msgstr "" -#: ../../../CHANGELOG:4170 +#: ../../../CHANGELOG.md:3962 msgid "Ensure in place imported files get a proper mimetype (#183)" msgstr "" -#: ../../../CHANGELOG:4171 +#: ../../../CHANGELOG.md:3963 msgid "" "Federation cache suppression is now simpler and also deletes orphaned " "files (#189)" msgstr "" -#: ../../../CHANGELOG:4173 +#: ../../../CHANGELOG.md:3965 msgid "Fixed small UI glitches/bugs in federation tabs (#184)" msgstr "" -#: ../../../CHANGELOG:4174 +#: ../../../CHANGELOG.md:3966 msgid "X-sendfile not working with in place import (#182)" msgstr "" -#: ../../../CHANGELOG:4179 +#: ../../../CHANGELOG.md:3970 msgid "Added a documentation area for third-party projects (#180)" msgstr "" -#: ../../../CHANGELOG:4180 +#: ../../../CHANGELOG.md:3971 msgid "" "Added documentation for optimizing Funkwhale and reduce its memory " "footprint." msgstr "" -#: ../../../CHANGELOG:4181 +#: ../../../CHANGELOG.md:3972 msgid "Document that the database should use an utf-8 encoding (#185)" msgstr "" -#: ../../../CHANGELOG:4182 +#: ../../../CHANGELOG.md:3973 msgid "Foundations for API documentation with Swagger (#178)" msgstr "" -#: ../../../CHANGELOG:4186 +#: ../../../CHANGELOG.md:3975 msgid "Database storage for high-level settings" msgstr "" -#: ../../../CHANGELOG:4188 +#: ../../../CHANGELOG.md:3977 msgid "" "Due to the work done in #186, the following environment variables have " "been deprecated:" msgstr "" -#: ../../../CHANGELOG:4191 +#: ../../../CHANGELOG.md:3980 msgid "FEDERATION_ENABLED" msgstr "" -#: ../../../CHANGELOG:4192 +#: ../../../CHANGELOG.md:3981 msgid "FEDERATION_COLLECTION_PAGE_SIZE" msgstr "" -#: ../../../CHANGELOG:4193 +#: ../../../CHANGELOG.md:3982 msgid "FEDERATION_MUSIC_NEEDS_APPROVAL" msgstr "" -#: ../../../CHANGELOG:4194 +#: ../../../CHANGELOG.md:3983 msgid "FEDERATION_ACTOR_FETCH_DELAY" msgstr "" -#: ../../../CHANGELOG:4195 +#: ../../../CHANGELOG.md:3984 msgid "PLAYLISTS_MAX_TRACKS" msgstr "" -#: ../../../CHANGELOG:4196 +#: ../../../CHANGELOG.md:3985 msgid "API_AUTHENTICATION_REQUIRED" msgstr "" -#: ../../../CHANGELOG:4198 +#: ../../../CHANGELOG.md:3987 msgid "" "Configuration for this settings has been moved to database, as it will " "provide a better user-experience, by allowing you to edit these values " "on-the-fly, without restarting Funkwhale processes." msgstr "" -#: ../../../CHANGELOG:4202 +#: ../../../CHANGELOG.md:3991 msgid "" "You can leave those environment variables in your .env file for now, as " "the values will be used to populate the database entries. We'll make a " "proper announcement when the variables won't be used anymore." msgstr "" -#: ../../../CHANGELOG:4206 +#: ../../../CHANGELOG.md:3995 msgid "" "Please browse https://docs.funkwhale.audio/configuration.html#instance-" "settings for more information about instance configuration using the web " "interface." msgstr "" -#: ../../../CHANGELOG:4211 +#: ../../../CHANGELOG.md:3998 msgid "System emails" msgstr "" -#: ../../../CHANGELOG:4213 +#: ../../../CHANGELOG.md:4000 msgid "Starting from this release, Funkwhale will send two types of emails:" msgstr "" -#: ../../../CHANGELOG:4216 +#: ../../../CHANGELOG.md:4003 msgid "Email confirmation emails, to ensure a user's email is valid" msgstr "" -#: ../../../CHANGELOG:4217 +#: ../../../CHANGELOG.md:4004 msgid "" "Password reset emails, enabling user to reset their password without an " "admin's intervention" msgstr "" -#: ../../../CHANGELOG:4219 +#: ../../../CHANGELOG.md:4006 msgid "" "Email sending is disabled by default, as it requires additional " "configuration. In this mode, emails are simply outputted on stdout." msgstr "" -#: ../../../CHANGELOG:4222 +#: ../../../CHANGELOG.md:4009 msgid "" "If you want to actually send those emails to your users, you should edit " -"your .env file and tweak the ``EMAIL_CONFIG`` variable. See " +"your .env file and tweak the `EMAIL_CONFIG` variable. See " ":data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` for more " "details." msgstr "" -#: ../../../CHANGELOG:4228 +#: ../../../CHANGELOG.md:4014 msgid "" "As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, " "which was not documented, has no effect anymore. You can safely remove it" " from your .env file if it is set." msgstr "" -#: ../../../CHANGELOG:4234 +#: ../../../CHANGELOG.md:4019 msgid "Proxy headers for non-docker deployments" msgstr "" -#: ../../../CHANGELOG:4236 +#: ../../../CHANGELOG.md:4021 msgid "" -"For non-docker deployments, add ``--proxy-headers`` at the end of the " -"``daphne`` command in :file:`/etc/systemd/system/funkwhale-" -"server.service`." +"For non-docker deployments, add `--proxy-headers` at the end of the " +"`daphne` command in :file:`/etc/systemd/system/funkwhale-server.service`." msgstr "" -#: ../../../CHANGELOG:4239 +#: ../../../CHANGELOG.md:4024 msgid "" "This will ensure the application receive the correct IP address from the " "client and not the proxy's one." msgstr "" -#: ../../../CHANGELOG:4244 +#: ../../../CHANGELOG.md:4027 msgid "0.10 (2018-04-23)" msgstr "" -#: ../../../CHANGELOG:4248 +#: ../../../CHANGELOG.md:4031 msgid "Can now import files in-place from the CLI importer (#155)" msgstr "" -#: ../../../CHANGELOG:4253 +#: ../../../CHANGELOG.md:4035 msgid "Avoid downloading audio files multiple times from remote libraries (#163)" msgstr "" -#: ../../../CHANGELOG:4254 +#: ../../../CHANGELOG.md:4036 msgid "Better file import performance and error handling (#144)" msgstr "" -#: ../../../CHANGELOG:4255 +#: ../../../CHANGELOG.md:4037 msgid "" "Import job and batch API and front-end have been improved with better " "performance, pagination and additional filters (#171)" msgstr "" -#: ../../../CHANGELOG:4257 +#: ../../../CHANGELOG.md:4039 msgid "" "Increased max_length on TrackFile.source, this will help when importing " "files with a really long path (#142)" msgstr "" -#: ../../../CHANGELOG:4259 +#: ../../../CHANGELOG.md:4041 msgid "Player is back in Queue tab (#150)" msgstr "" -#: ../../../CHANGELOG:4264 +#: ../../../CHANGELOG.md:4045 msgid "Fail graciously when AP representation includes a null_value for mediaType" msgstr "" -#: ../../../CHANGELOG:4265 +#: ../../../CHANGELOG.md:4046 msgid "Fix sidebar tabs not showing under small resolution under Chrome (#173)" msgstr "" -#: ../../../CHANGELOG:4266 +#: ../../../CHANGELOG.md:4047 msgid "Fixed broken login due to badly configured Axios (#172)" msgstr "" -#: ../../../CHANGELOG:4267 +#: ../../../CHANGELOG.md:4048 msgid "Fixed broken playlist modal after login (#155)" msgstr "" -#: ../../../CHANGELOG:4268 +#: ../../../CHANGELOG.md:4049 msgid "" "Fixed queue reorder or track deletion restarting currently playing track " "(#151)" msgstr "" -#: ../../../CHANGELOG:4270 +#: ../../../CHANGELOG.md:4051 msgid "" "Radio will now append new track if you delete the last track in queue " "(#145)" msgstr "" -#: ../../../CHANGELOG:4271 +#: ../../../CHANGELOG.md:4052 msgid "Reset all sensitive front-end data on logout (#124)" msgstr "" -#: ../../../CHANGELOG:4272 +#: ../../../CHANGELOG.md:4053 msgid "Typos/not showing text due to i18n work (#175)" msgstr "" -#: ../../../CHANGELOG:4277 +#: ../../../CHANGELOG.md:4057 msgid "Better documentation for hardware requirements and memory usage (#165)" msgstr "" -#: ../../../CHANGELOG:4281 +#: ../../../CHANGELOG.md:4059 msgid "In-place import" msgstr "" -#: ../../../CHANGELOG:4283 +#: ../../../CHANGELOG.md:4061 msgid "" "This release includes in-place imports for the CLI import. This means you" " can load gigabytes of music into funkwhale without worrying about about " @@ -7912,120 +8231,119 @@ msgid "" "your disk space." msgstr "" -#: ../../../CHANGELOG:4287 +#: ../../../CHANGELOG.md:4065 msgid "" -"`This new feature is documented here <https://docs.funkwhale.audio" -"/importing-music.html#in-place-import>`_ and require additional " +"[This new feature is documented here](https://docs.funkwhale.audio" +"/importing-music.html#in-place-import) and require additional " "configuration to ensure funkwhale and your webserver can serve those " "files properly." msgstr "" -#: ../../../CHANGELOG:4291 +#: ../../../CHANGELOG.md:4069 msgid "**Non-docker users:**" msgstr "" -#: ../../../CHANGELOG:4293 ../../../CHANGELOG:4307 +#: ../../../CHANGELOG.md:4071 ../../../CHANGELOG.md:4089 msgid "" -"Assuming your music is stored in ``/srv/funkwhale/data/music``, add the " -"following block to your nginx configuration::" +"Assuming your music is stored in `/srv/funkwhale/data/music`, add the " +"following block to your nginx configuration:" msgstr "" -#: ../../../CHANGELOG:4301 -msgid "And the following to your .env file::" +#: ../../../CHANGELOG.md:4081 +msgid "And the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4305 +#: ../../../CHANGELOG.md:4087 msgid "**Docker users:**" msgstr "" -#: ../../../CHANGELOG:4315 +#: ../../../CHANGELOG.md:4099 msgid "" -"Assuming you have the following volume directive in your ``docker-" -"compose.yml`` (it's the default): " -"``/srv/funkwhale/data/music:/music:ro``, then add the following to your " -".env file::" +"Assuming you have the following volume directive in your `docker-" +"compose.yml` (it's the default): `/srv/funkwhale/data/music:/music:ro`, " +"then add the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4326 +#: ../../../CHANGELOG.md:4110 msgid "0.9.1 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4330 +#: ../../../CHANGELOG.md:4114 msgid "Allow null values for musicbrainz_id in Audio ActivityPub representation" msgstr "" -#: ../../../CHANGELOG:4331 +#: ../../../CHANGELOG.md:4115 msgid "" "Fixed broken permission check on library scanning and too aggressive page" " validation" msgstr "" -#: ../../../CHANGELOG:4336 +#: ../../../CHANGELOG.md:4118 msgid "0.9 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4340 +#: ../../../CHANGELOG.md:4122 msgid "Add internationalization support (#5)" msgstr "" -#: ../../../CHANGELOG:4341 +#: ../../../CHANGELOG.md:4123 msgid "Can now follow and import music from remote libraries (#136, #137)" msgstr "" -#: ../../../CHANGELOG:4346 +#: ../../../CHANGELOG.md:4127 msgid "Added a i18n-extract yarn script to extract strings to PO files (#162)" msgstr "" -#: ../../../CHANGELOG:4347 +#: ../../../CHANGELOG.md:4128 msgid "User admin now includes signup and last login dates (#148)" msgstr "" -#: ../../../CHANGELOG:4348 +#: ../../../CHANGELOG.md:4129 msgid "" "We now use a proper user agent including instance version and url during " "outgoing requests" msgstr "" -#: ../../../CHANGELOG:4353 +#: ../../../CHANGELOG.md:4132 msgid "Federation is here!" msgstr "" -#: ../../../CHANGELOG:4355 +#: ../../../CHANGELOG.md:4134 msgid "This is for real this time, and includes:" msgstr "" -#: ../../../CHANGELOG:4357 +#: ../../../CHANGELOG.md:4136 msgid "Following other Funkwhale libraries" msgstr "" -#: ../../../CHANGELOG:4358 +#: ../../../CHANGELOG.md:4137 msgid "" "Importing tracks from remote libraries (tracks are hotlinked, and only " "cached for a short amount of time)" msgstr "" -#: ../../../CHANGELOG:4359 +#: ../../../CHANGELOG.md:4138 msgid "Searching across federated catalogs" msgstr "" -#: ../../../CHANGELOG:4361 +#: ../../../CHANGELOG.md:4140 msgid "" "Note that by default, federation is opt-in, on a per-instance basis: " "instances will request access to your catalog, and you can accept or " "refuse those requests. You can also revoke the access at any time." msgstr "" -#: ../../../CHANGELOG:4365 +#: ../../../CHANGELOG.md:4144 msgid "" "Documentation was updated with relevant instructions to use and benefit " "from this new feature: https://docs.funkwhale.audio/federation.html" msgstr "" -#: ../../../CHANGELOG:4369 +#: ../../../CHANGELOG.md:4147 msgid "Preparing internationalization" msgstr "" -#: ../../../CHANGELOG:4371 +#: ../../../CHANGELOG.md:4149 msgid "" "Funkwhale's front-end as always been english-only, and this is a barrier " "to new users. The work make Funkwhale's interface translatable was " @@ -8034,24 +8352,24 @@ msgid "" " in the near future." msgstr "" -#: ../../../CHANGELOG:4377 +#: ../../../CHANGELOG.md:4155 msgid "" "Many thank to Baptiste for the hard work and for figuring out a proper " "solution to this difficult problem." msgstr "" -#: ../../../CHANGELOG:4381 +#: ../../../CHANGELOG.md:4158 msgid "Upgrade path" msgstr "" -#: ../../../CHANGELOG:4383 +#: ../../../CHANGELOG.md:4160 msgid "" "In addition to the usual instructions from " "https://docs.funkwhale.audio/upgrading.html, non-docker users will have " "to setup an additional systemd unit file for recurrent tasks." msgstr "" -#: ../../../CHANGELOG:4387 +#: ../../../CHANGELOG.md:4164 msgid "" "This was forgotten in the deployment documentation, but recurrent tasks, " "managed by the celery beat process, will be needed more and more in " @@ -8059,97 +8377,97 @@ msgid "" "federated music files and keep disk usage to a minimum." msgstr "" -#: ../../../CHANGELOG:4392 +#: ../../../CHANGELOG.md:4169 msgid "" "In the future, they will also be needed to refetch music metadata or " "federated information periodically." msgstr "" -#: ../../../CHANGELOG:4395 -msgid "Celery beat can be enabled easily::" +#: ../../../CHANGELOG.md:4172 +msgid "Celery beat can be enabled easily:" msgstr "" -#: ../../../CHANGELOG:4405 +#: ../../../CHANGELOG.md:4184 msgid "Docker users already have celerybeat enabled." msgstr "" -#: ../../../CHANGELOG:4409 +#: ../../../CHANGELOG.md:4186 msgid "0.8 (2018-04-02)" msgstr "" -#: ../../../CHANGELOG:4413 +#: ../../../CHANGELOG.md:4190 msgid "Add a detail page for radios (#64)" msgstr "" -#: ../../../CHANGELOG:4414 +#: ../../../CHANGELOG.md:4191 msgid "Implemented page title binding (#1)" msgstr "" -#: ../../../CHANGELOG:4415 +#: ../../../CHANGELOG.md:4192 msgid "Previous Track button restart playback after 3 seconds (#146)" msgstr "" -#: ../../../CHANGELOG:4420 +#: ../../../CHANGELOG.md:4196 msgid "Added credits to Francis Gading for the logotype (#101)" msgstr "" -#: ../../../CHANGELOG:4421 +#: ../../../CHANGELOG.md:4197 msgid "" "API endpoint for fetching instance activity and updated timeline to use " "this new endpoint (#141)" msgstr "" -#: ../../../CHANGELOG:4423 +#: ../../../CHANGELOG.md:4199 msgid "Better error messages in case of missing environment variables (#140)" msgstr "" -#: ../../../CHANGELOG:4424 +#: ../../../CHANGELOG.md:4200 msgid "" "Implemented a @test@yourfunkwhaledomain bot to ensure federation works " "properly. Send it \"/ping\" and it will answer back :)" msgstr "" -#: ../../../CHANGELOG:4426 +#: ../../../CHANGELOG.md:4202 msgid "Queue shuffle now apply only to tracks after the current one (#97)" msgstr "" -#: ../../../CHANGELOG:4427 +#: ../../../CHANGELOG.md:4203 msgid "" "Removed player from queue tab and consistently show current track in " "queue (#131)" msgstr "" -#: ../../../CHANGELOG:4429 +#: ../../../CHANGELOG.md:4205 msgid "We now restrict some usernames from being used during signup (#139)" msgstr "" -#: ../../../CHANGELOG:4434 +#: ../../../CHANGELOG.md:4209 msgid "Better error handling during file import (#120)" msgstr "" -#: ../../../CHANGELOG:4435 +#: ../../../CHANGELOG.md:4210 msgid "Better handling of utf-8 filenames during file import (#138)" msgstr "" -#: ../../../CHANGELOG:4436 +#: ../../../CHANGELOG.md:4211 msgid "Converted favicon from .ico to .png (#130)" msgstr "" -#: ../../../CHANGELOG:4437 +#: ../../../CHANGELOG.md:4212 msgid "" "Upgraded to Python 3.6 to fix weird but harmless weakref error on django " "task (#121)" msgstr "" -#: ../../../CHANGELOG:4443 +#: ../../../CHANGELOG.md:4217 msgid "Documented the upgrade process (#127)" msgstr "" -#: ../../../CHANGELOG:4447 +#: ../../../CHANGELOG.md:4219 msgid "Preparing for federation" msgstr "" -#: ../../../CHANGELOG:4449 +#: ../../../CHANGELOG.md:4221 msgid "" "Federation of music libraries is one of the most asked feature. While " "there is still a lot of work to do, this version includes the foundation " @@ -8157,162 +8475,162 @@ msgid "" "and with other federated software, such as Mastodon." msgstr "" -#: ../../../CHANGELOG:4455 +#: ../../../CHANGELOG.md:4227 msgid "Funkwhale will use ActivityPub as it's federation protocol." msgstr "" -#: ../../../CHANGELOG:4457 +#: ../../../CHANGELOG.md:4229 msgid "" "In order to prepare for federation (see #136 and #137), new API endpoints" " have been added under /federation and /.well-known/webfinger." msgstr "" -#: ../../../CHANGELOG:4460 +#: ../../../CHANGELOG.md:4232 msgid "" "For these endpoints to work, you will need to update your nginx " -"configuration, and add the following snippets::" +"configuration, and add the following snippets:" msgstr "" -#: ../../../CHANGELOG:4473 +#: ../../../CHANGELOG.md:4246 msgid "" "This will ensure federation endpoints will be reachable in the future. " "You can of course skip this part if you know you will not federate your " "instance." msgstr "" -#: ../../../CHANGELOG:4476 +#: ../../../CHANGELOG.md:4249 msgid "" -"A new ``FEDERATION_ENABLED`` env var have also been added to control " +"A new `FEDERATION_ENABLED` env var have also been added to control " "whether federation is enabled or not on the application side. This " "settings defaults to True, which should have no consequences at the " "moment, since actual federation is not implemented and the only available" " endpoints are for testing purposes." msgstr "" -#: ../../../CHANGELOG:4482 +#: ../../../CHANGELOG.md:4255 msgid "" -"Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation " -"on the application side." +"Add `FEDERATION_ENABLED=false` to your .env file to disable federation on" +" the application side." msgstr "" -#: ../../../CHANGELOG:4485 +#: ../../../CHANGELOG.md:4258 msgid "" "To test and troubleshoot federation, we've added a bot account. This bot " "is available at @test@yourinstancedomain, and sending it \"/ping\", for " "example, via Mastodon, should trigger a response." msgstr "" -#: ../../../CHANGELOG:4492 +#: ../../../CHANGELOG.md:4262 msgid "0.7 (2018-03-21)" msgstr "" -#: ../../../CHANGELOG:4496 +#: ../../../CHANGELOG.md:4266 msgid "Can now filter artists and albums with no listenable tracks (#114)" msgstr "" -#: ../../../CHANGELOG:4497 +#: ../../../CHANGELOG.md:4267 msgid "" "Improve the style of the sidebar to make it easier to understand which " "tab is selected (#118)" msgstr "" -#: ../../../CHANGELOG:4499 +#: ../../../CHANGELOG.md:4269 msgid "On artist page, albums are not sorted by release date, if any (#116)" msgstr "" -#: ../../../CHANGELOG:4500 +#: ../../../CHANGELOG.md:4270 msgid "Playlists are here \\o/ :tada: (#3, #93, #94)" msgstr "" -#: ../../../CHANGELOG:4501 +#: ../../../CHANGELOG.md:4271 msgid "Use django-cacheops to cache common ORM requests (#117)" msgstr "" -#: ../../../CHANGELOG:4506 +#: ../../../CHANGELOG.md:4275 msgid "Fixed broken import request admin (#115)" msgstr "" -#: ../../../CHANGELOG:4507 +#: ../../../CHANGELOG.md:4276 msgid "" "Fixed forced redirection to login event with " "API_AUTHENTICATION_REQUIRED=False (#119)" msgstr "" -#: ../../../CHANGELOG:4509 +#: ../../../CHANGELOG.md:4278 msgid "" "Fixed position not being reset properly when playing the same track " "multiple times in a row" msgstr "" -#: ../../../CHANGELOG:4511 +#: ../../../CHANGELOG.md:4280 msgid "Fixed synchronized start/stop radio buttons for all custom radios (#103)" msgstr "" -#: ../../../CHANGELOG:4512 +#: ../../../CHANGELOG.md:4281 msgid "Fixed typo and missing icon on homepage (#96)" msgstr "" -#: ../../../CHANGELOG:4517 +#: ../../../CHANGELOG.md:4285 msgid "" "Up-to-date and complete development and contribution instructions in " "README.rst (#123)" msgstr "" -#: ../../../CHANGELOG:4522 +#: ../../../CHANGELOG.md:4288 msgid "0.6.1 (2018-03-06)" msgstr "" -#: ../../../CHANGELOG:4526 +#: ../../../CHANGELOG.md:4292 msgid "Can now skip acoustid on file import with the --no-acoustid flag (#111)" msgstr "" -#: ../../../CHANGELOG:4531 +#: ../../../CHANGELOG.md:4296 msgid "Added missing batch id in output during import (#112)" msgstr "" -#: ../../../CHANGELOG:4532 +#: ../../../CHANGELOG.md:4297 msgid "Added some feedback on the play button (#100)" msgstr "" -#: ../../../CHANGELOG:4533 +#: ../../../CHANGELOG.md:4298 msgid "Smarter pagination which takes a fixed size (#84)" msgstr "" -#: ../../../CHANGELOG:4538 +#: ../../../CHANGELOG.md:4302 msgid "" "Completely removed django-cachalot from the codebase (#110). You can " "safely remove the CACHALOT_ENABLED setting from your .env file" msgstr "" -#: ../../../CHANGELOG:4543 +#: ../../../CHANGELOG.md:4305 msgid "0.6 (2018-03-04)" msgstr "" -#: ../../../CHANGELOG:4547 +#: ../../../CHANGELOG.md:4309 msgid "Basic activity stream for listening and favorites (#23)" msgstr "" -#: ../../../CHANGELOG:4548 +#: ../../../CHANGELOG.md:4310 msgid "" "Switched to django-channels and daphne for serving HTTP and websocket " "(#34)" msgstr "" -#: ../../../CHANGELOG:4551 +#: ../../../CHANGELOG.md:4312 msgid "Upgrades notes" msgstr "" -#: ../../../CHANGELOG:4553 +#: ../../../CHANGELOG.md:4314 msgid "" "This version contains breaking changes in the way funkwhale is deployed, " "please read the notes carefully." msgstr "" -#: ../../../CHANGELOG:4557 +#: ../../../CHANGELOG.md:4317 msgid "Instance timeline" msgstr "" -#: ../../../CHANGELOG:4559 +#: ../../../CHANGELOG.md:4319 msgid "" "A new \"Activity\" page is now available from the sidebar, where you can " "browse your instance activity. At the moment, this includes other users " @@ -8320,14 +8638,14 @@ msgid "" "the future." msgstr "" -#: ../../../CHANGELOG:4564 +#: ../../../CHANGELOG.md:4324 msgid "" "Internally, we implemented those events by following the Activity Stream " "specification, which will help us to be compatible with other networks in" " the long-term." msgstr "" -#: ../../../CHANGELOG:4568 +#: ../../../CHANGELOG.md:4328 msgid "" "A new settings page has been added to control the visibility of your " "activity. By default, your activity will be browsable by anyone on your " @@ -8335,15 +8653,15 @@ msgid "" "shared." msgstr "" -#: ../../../CHANGELOG:4572 +#: ../../../CHANGELOG.md:4332 msgid "The setting form is available in your profile." msgstr "" -#: ../../../CHANGELOG:4575 +#: ../../../CHANGELOG.md:4334 msgid "Switch from gunicorn to daphne" msgstr "" -#: ../../../CHANGELOG:4577 +#: ../../../CHANGELOG.md:4336 msgid "" "This release include an important change in the way we serve the HTTP " "API. To prepare for new realtime features and enable websocket support in" @@ -8351,190 +8669,190 @@ msgid "" " websocket traffic." msgstr "" -#: ../../../CHANGELOG:4581 +#: ../../../CHANGELOG.md:4340 msgid "" "This replaces gunicorn and the switch should be easy assuming you follow " "the upgrade process described below." msgstr "" -#: ../../../CHANGELOG:4584 +#: ../../../CHANGELOG.md:4343 msgid "" "If you are using docker, please remove the command instruction inside the" " api service, as the up-to-date command is now included directly in the " "image as the default entry point:" msgstr "" -#: ../../../CHANGELOG:4595 +#: ../../../CHANGELOG.md:4355 msgid "" -"On non docker setups, you'll have to update the [Service] block of your " -"funkwhale-server systemd unit file to launch the application server using" -" daphne instead of gunicorn." +"On non docker setups, you'll have to update the `[Service]` block of your" +" funkwhale-server systemd unit file to launch the application server " +"using daphne instead of gunicorn." msgstr "" -#: ../../../CHANGELOG:4598 +#: ../../../CHANGELOG.md:4358 msgid "The new configuration should be similar to this:" msgstr "" -#: ../../../CHANGELOG:4609 +#: ../../../CHANGELOG.md:4369 msgid "" "Ensure you update funkwhale's dependencies as usual to install the " "required packages." msgstr "" -#: ../../../CHANGELOG:4612 +#: ../../../CHANGELOG.md:4372 msgid "" "On both docker and non-docker setup, you'll also have to update your " "nginx configuration for websocket support. Ensure you have the following " "blocks included in your virtualhost file:" msgstr "" -#: ../../../CHANGELOG:4630 +#: ../../../CHANGELOG.md:4390 msgid "Remember to reload your nginx server after the edit." msgstr "" -#: ../../../CHANGELOG:4634 +#: ../../../CHANGELOG.md:4392 msgid "0.5.4 (2018-02-28)" msgstr "" -#: ../../../CHANGELOG:4638 +#: ../../../CHANGELOG.md:4396 msgid "Now stop running radio when clearing queue (#98)" msgstr "" -#: ../../../CHANGELOG:4642 +#: ../../../CHANGELOG.md:4400 msgid "Fixed queue skipping tracks (#91)" msgstr "" -#: ../../../CHANGELOG:4643 +#: ../../../CHANGELOG.md:4401 msgid "Now loop properly on queue when we only have one track (#95)" msgstr "" -#: ../../../CHANGELOG:4647 +#: ../../../CHANGELOG.md:4403 msgid "0.5.3 (2018-02-27)" msgstr "" -#: ../../../CHANGELOG:4651 +#: ../../../CHANGELOG.md:4407 msgid "" "Added admin interface for radios, track files, favorites and import " "requests (#80)" msgstr "" -#: ../../../CHANGELOG:4652 +#: ../../../CHANGELOG.md:4408 msgid "Added basic instance stats on /about (#82)" msgstr "" -#: ../../../CHANGELOG:4653 +#: ../../../CHANGELOG.md:4409 msgid "" "Search now unaccent letters for queries like \"The Dø\" or \"Björk\" " "yielding more results (#81)" msgstr "" -#: ../../../CHANGELOG:4658 +#: ../../../CHANGELOG.md:4413 msgid "Always use username in sidebar (#89)" msgstr "" -#: ../../../CHANGELOG:4659 +#: ../../../CHANGELOG.md:4414 msgid "Click event outside of player icons (#83)" msgstr "" -#: ../../../CHANGELOG:4660 +#: ../../../CHANGELOG.md:4415 msgid "Fixed broken import because of missing transaction" msgstr "" -#: ../../../CHANGELOG:4661 +#: ../../../CHANGELOG.md:4416 msgid "Now always load next radio track on last queue track ended (#87)" msgstr "" -#: ../../../CHANGELOG:4662 +#: ../../../CHANGELOG.md:4417 msgid "Now exclude tracks without file from radio candidates (#88)" msgstr "" -#: ../../../CHANGELOG:4663 +#: ../../../CHANGELOG.md:4418 msgid "skip to next track properly on 40X errors (#86)" msgstr "" -#: ../../../CHANGELOG:4668 +#: ../../../CHANGELOG.md:4422 msgid "Switched to towncrier for changelog management and compilation" msgstr "" -#: ../../../CHANGELOG:4672 +#: ../../../CHANGELOG.md:4424 msgid "0.5.2 (2018-02-26)" msgstr "" -#: ../../../CHANGELOG:4674 +#: ../../../CHANGELOG.md:4426 msgid "Fixed broken file import due to wrong url (#73)" msgstr "" -#: ../../../CHANGELOG:4675 +#: ../../../CHANGELOG.md:4427 msgid "More accurate mimetype detection" msgstr "" -#: ../../../CHANGELOG:4676 +#: ../../../CHANGELOG.md:4428 msgid "Fixed really small size on small screens" msgstr "" -#: ../../../CHANGELOG:4677 +#: ../../../CHANGELOG.md:4429 msgid "Added masonry layout for artists, requests and radios (#68)" msgstr "" -#: ../../../CHANGELOG:4678 +#: ../../../CHANGELOG.md:4430 msgid "We now have a favicon!" msgstr "" -#: ../../../CHANGELOG:4679 +#: ../../../CHANGELOG.md:4431 msgid "Fixed truncated play icon (#65)" msgstr "" -#: ../../../CHANGELOG:4683 +#: ../../../CHANGELOG.md:4433 msgid "0.5.1 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4685 +#: ../../../CHANGELOG.md:4435 msgid "Front: Fixed broken ajax call on radio builder (#69)" msgstr "" -#: ../../../CHANGELOG:4686 +#: ../../../CHANGELOG.md:4436 msgid "Front: Shuffle now restart next track from beginning (#70)" msgstr "" -#: ../../../CHANGELOG:4687 +#: ../../../CHANGELOG.md:4437 msgid "Front: volume slider should now have the same style everywhere (#72)" msgstr "" -#: ../../../CHANGELOG:4691 +#: ../../../CHANGELOG.md:4439 msgid "0.5 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4693 +#: ../../../CHANGELOG.md:4441 msgid "Front: Now reset player colors when track has no cover (#46)" msgstr "" -#: ../../../CHANGELOG:4694 +#: ../../../CHANGELOG.md:4442 msgid "Front: play button now disabled for unplayable tracks" msgstr "" -#: ../../../CHANGELOG:4695 +#: ../../../CHANGELOG.md:4443 msgid "" "API: You can now enable or disable registration on the fly, via a " "preference (#58)" msgstr "" -#: ../../../CHANGELOG:4696 +#: ../../../CHANGELOG.md:4444 msgid "Front: can now signup via the web interface (#35)" msgstr "" -#: ../../../CHANGELOG:4697 +#: ../../../CHANGELOG.md:4445 msgid "Front: Fixed broken redirection on login" msgstr "" -#: ../../../CHANGELOG:4698 +#: ../../../CHANGELOG.md:4446 msgid "Front: Fixed broken error handling on settings and login form" msgstr "" -#: ../../../CHANGELOG:4700 +#: ../../../CHANGELOG.md:4448 msgid "About page:" msgstr "" -#: ../../../CHANGELOG:4702 +#: ../../../CHANGELOG.md:4450 msgid "" "There is a brand new about page on instances (/about), and instance owner" " can now provide a name, a short and a long description for their " @@ -8542,21 +8860,21 @@ msgid "" "(/api/admin/dynamic_preferences/globalpreferencemodel/)." msgstr "" -#: ../../../CHANGELOG:4705 +#: ../../../CHANGELOG.md:4453 msgid "Transcoding:" msgstr "" -#: ../../../CHANGELOG:4707 +#: ../../../CHANGELOG.md:4455 msgid "" "Basic transcoding is now available to/from the following formats : ogg " "and mp3." msgstr "" -#: ../../../CHANGELOG:4709 -msgid "*This is still an alpha feature at the moment, please report any bug.*" +#: ../../../CHANGELOG.md:4457 +msgid "_This is still an alpha feature at the moment, please report any bug._" msgstr "" -#: ../../../CHANGELOG:4711 +#: ../../../CHANGELOG.md:4459 msgid "" "This relies internally on FFMPEG and can put some load on your server. " "It's definitely recommended you setup some caching for the transcoded " @@ -8564,251 +8882,1201 @@ msgid "" "deploy/nginx.conf for an implementation." msgstr "" -#: ../../../CHANGELOG:4716 +#: ../../../CHANGELOG.md:4464 msgid "On the frontend, usage of transcoding should be transparent in the player." msgstr "" -#: ../../../CHANGELOG:4718 +#: ../../../CHANGELOG.md:4466 msgid "Music Requests:" msgstr "" -#: ../../../CHANGELOG:4720 +#: ../../../CHANGELOG.md:4468 msgid "" "This release includes a new feature, music requests, which allows users " "to request music they'd like to see imported. Admins can browse those " "requests and mark them as completed when an import is made." msgstr "" -#: ../../../CHANGELOG:4726 +#: ../../../CHANGELOG.md:4473 msgid "0.4 (2018-02-18)" msgstr "" -#: ../../../CHANGELOG:4728 +#: ../../../CHANGELOG.md:4475 msgid "Front: ambiant colors in player based on current track cover (#59)" msgstr "" -#: ../../../CHANGELOG:4729 +#: ../../../CHANGELOG.md:4476 msgid "Front: simplified front dev setup thanks to webpack proxy (#59)" msgstr "" -#: ../../../CHANGELOG:4730 +#: ../../../CHANGELOG.md:4477 msgid "Front: added some unittests for the store (#55)" msgstr "" -#: ../../../CHANGELOG:4731 +#: ../../../CHANGELOG.md:4478 msgid "Front: fixed broken login redirection when 401" msgstr "" -#: ../../../CHANGELOG:4732 +#: ../../../CHANGELOG.md:4479 msgid "Front: Removed autoplay on page reload" msgstr "" -#: ../../../CHANGELOG:4733 +#: ../../../CHANGELOG.md:4480 msgid "API: Added a /instance/settings endpoint" msgstr "" -#: ../../../CHANGELOG:4734 +#: ../../../CHANGELOG.md:4481 msgid "Front: load /instance/settings on page load" msgstr "" -#: ../../../CHANGELOG:4735 +#: ../../../CHANGELOG.md:4482 msgid "" "Added settings to report JS and Python error to a Sentry instance This is" " disabled by default, but feel free to enable it if you want to help us " "by sending your error reports :) (#8)" msgstr "" -#: ../../../CHANGELOG:4741 +#: ../../../CHANGELOG.md:4486 msgid "0.3.5 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4743 +#: ../../../CHANGELOG.md:4488 msgid "Smarter BACKEND_URL in frontend" msgstr "" -#: ../../../CHANGELOG:4747 +#: ../../../CHANGELOG.md:4490 msgid "0.3.4 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4749 +#: ../../../CHANGELOG.md:4492 msgid "Fixed wrong URL construction in ajax call" msgstr "" -#: ../../../CHANGELOG:4753 +#: ../../../CHANGELOG.md:4494 msgid "0.3.3 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4755 +#: ../../../CHANGELOG.md:4496 msgid "Users can now create their own dynamic radios (#51)" msgstr "" -#: ../../../CHANGELOG:4759 +#: ../../../CHANGELOG.md:4498 msgid "0.3.2" msgstr "" -#: ../../../CHANGELOG:4761 +#: ../../../CHANGELOG.md:4500 msgid "Fixed an issue in the main dockerfile" msgstr "" -#: ../../../CHANGELOG:4765 +#: ../../../CHANGELOG.md:4502 msgid "0.3.1" msgstr "" -#: ../../../CHANGELOG:4767 +#: ../../../CHANGELOG.md:4504 msgid "Revamped all import logic, everything is more tested and consistent" msgstr "" -#: ../../../CHANGELOG:4768 +#: ../../../CHANGELOG.md:4505 msgid "" "Can now use Acoustid in file imports to automatically grab metadata from " "musicbrainz" msgstr "" -#: ../../../CHANGELOG:4769 +#: ../../../CHANGELOG.md:4506 msgid "Brand new file import wizard" msgstr "" -#: ../../../CHANGELOG:4773 +#: ../../../CHANGELOG.md:4508 msgid "0.2.7" msgstr "" -#: ../../../CHANGELOG:4775 +#: ../../../CHANGELOG.md:4510 msgid "" -"Shortcuts: can now use the ``f`` shortcut to toggle the currently playing" -" track as a favorite (#53)" +"Shortcuts: can now use the `f` shortcut to toggle the currently playing " +"track as a favorite (#53)" msgstr "" -#: ../../../CHANGELOG:4777 +#: ../../../CHANGELOG.md:4512 msgid "" "Shortcuts: avoid collisions between shortcuts by using the exact modifier" " (#53)" msgstr "" -#: ../../../CHANGELOG:4778 +#: ../../../CHANGELOG.md:4513 msgid "Player: Added looping controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4779 +#: ../../../CHANGELOG.md:4514 msgid "Player: Added shuffling controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4780 +#: ../../../CHANGELOG.md:4515 msgid "Favorites: can now modify the ordering of track list (#50)" msgstr "" -#: ../../../CHANGELOG:4781 +#: ../../../CHANGELOG.md:4516 msgid "Library: can now search/reorder results on artist browsing view (#50)" msgstr "" -#: ../../../CHANGELOG:4782 +#: ../../../CHANGELOG.md:4517 msgid "" "Upgraded celery to 4.1, added endpoint logic for fingerprinting audio " "files" msgstr "" -#: ../../../CHANGELOG:4783 +#: ../../../CHANGELOG.md:4518 msgid "" "Fixed #56: invalidate tokens on password change, also added change " "password form" msgstr "" -#: ../../../CHANGELOG:4784 +#: ../../../CHANGELOG.md:4519 msgid "Fixed #57: now refresh jwt token on page refresh" msgstr "" -#: ../../../CHANGELOG:4785 +#: ../../../CHANGELOG.md:4520 msgid "removed ugly dividers in batch import list" msgstr "" -#: ../../../CHANGELOG:4786 +#: ../../../CHANGELOG.md:4521 msgid "Fixed a few padding issues" msgstr "" -#: ../../../CHANGELOG:4787 +#: ../../../CHANGELOG.md:4522 msgid "Now persist/restore queue/radio/player state automatically" msgstr "" -#: ../../../CHANGELOG:4788 +#: ../../../CHANGELOG.md:4523 msgid "Removed old broken imports" msgstr "" -#: ../../../CHANGELOG:4789 +#: ../../../CHANGELOG.md:4524 msgid "Now force tests paths" msgstr "" -#: ../../../CHANGELOG:4790 +#: ../../../CHANGELOG.md:4525 msgid "Fixed #54: Now use pytest everywhere \\o/" msgstr "" -#: ../../../CHANGELOG:4791 +#: ../../../CHANGELOG.md:4526 msgid "Now use vuex to manage state for favorites" msgstr "" -#: ../../../CHANGELOG:4792 +#: ../../../CHANGELOG.md:4527 msgid "Now use vuex to manage state for authentication" msgstr "" -#: ../../../CHANGELOG:4793 +#: ../../../CHANGELOG.md:4528 msgid "Now use vuex to manage state for player/queue/radios" msgstr "" -#: ../../../CHANGELOG:4797 +#: ../../../CHANGELOG.md:4530 msgid "0.2.6 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4799 +#: ../../../CHANGELOG.md:4532 msgid "Fixed broken Dockerfile" msgstr "" -#: ../../../CHANGELOG:4803 +#: ../../../CHANGELOG.md:4534 msgid "0.2.5 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4807 +#: ../../../CHANGELOG.md:4538 msgid "Import: can now specify search template when querying import sources (#45)" msgstr "" -#: ../../../CHANGELOG:4808 +#: ../../../CHANGELOG.md:4539 msgid "Login form: now redirect to previous page after login (#2)" msgstr "" -#: ../../../CHANGELOG:4809 +#: ../../../CHANGELOG.md:4540 msgid "404: a decent 404 template, at least (#48)" msgstr "" -#: ../../../CHANGELOG:4813 +#: ../../../CHANGELOG.md:4544 msgid "Player: better handling of errors when fetching the audio file (#46)" msgstr "" -#: ../../../CHANGELOG:4814 +#: ../../../CHANGELOG.md:4545 msgid "" "Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues " "on admin (#49)" msgstr "" -#: ../../../CHANGELOG:4816 +#: ../../../CHANGELOG.md:4547 msgid "Tech:" msgstr "" -#: ../../../CHANGELOG:4818 +#: ../../../CHANGELOG.md:4549 msgid "Django 2 compatibility, lot of packages upgrades (#47)" msgstr "" -#: ../../../CHANGELOG:4822 +#: ../../../CHANGELOG.md:4551 msgid "0.2.4 (2017-12-14)" msgstr "" -#: ../../../CHANGELOG:4826 +#: ../../../CHANGELOG.md:4555 msgid "Models: now store release group mbid on Album model (#7)" msgstr "" -#: ../../../CHANGELOG:4827 +#: ../../../CHANGELOG.md:4556 msgid "Models: now bind import job to track files (#44)" msgstr "" -#: ../../../CHANGELOG:4831 +#: ../../../CHANGELOG.md:4560 msgid "" "Library: fixen broken \"play all albums\" button on artist cards in " "Artist browsing view (#43)" msgstr "" +#~ msgid "" +#~ "Following `@funkwhale@fosstodon.org " +#~ "<https://fosstodon.org/@funkwhale>`_ on Mastodon" +#~ msgstr "" + +#~ msgid "" +#~ "``` export FUNKWHALE_VERSION=\"1.3.0\" cd " +#~ "/srv/funkwhale docker-compose down mv " +#~ "docker-compose.yml docker-compose.bak curl " +#~ "-L -o /srv/funkwhale/docker-compose.yml " +#~ "\"https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy" +#~ "/docker-compose.yml\" ```" +#~ msgstr "" + +#~ msgid "" +#~ "If you need to customize your " +#~ "nginx template, e.g. to work around " +#~ "`problems with Docker's resolver " +#~ "<https://docs.funkwhale.audio/admin/external-storages.html" +#~ "#no-resolver-found>`_, you can mount " +#~ "your custom nginx configuration into the" +#~ " container. Uncomment the commented volumes" +#~ " in the `nginx` section of your " +#~ "`docker-compose.yml`. Additionally you need" +#~ " to update the paths in " +#~ "`nginx/funkwhale.template`. Replace all occurrences" +#~ " of `/funkwhale` by `/usr/share/nginx/html`. " +#~ "This loads the templates from your " +#~ "`nginx` folder and overrides the " +#~ "template files in the Docker container." +#~ msgstr "" + +#~ msgid "``` docker-compose up -d ```" +#~ msgstr "" + +#~ msgid "" +#~ "Download the `Docker compose plugin " +#~ "<https://docs.docker.com/compose/install/linux/#install-" +#~ "using-the-repository>`_" +#~ msgstr "" + +#~ msgid "```sh sudo docker-compose down ```" +#~ msgstr "" + +#~ msgid "```sh sudo docker compose up -d ```" +#~ msgstr "" + +#~ msgid "" +#~ "Update dependency vue-template-compiler " +#~ "to 2.6.14 Update dependency vue to " +#~ "^2.6.14 Update dependency vuex-persistedstate" +#~ " to ^2.7.1 Update dependency vuedraggable" +#~ " to ^2.24.3 Update dependency vue-" +#~ "lazyload to ^1.3.3 Update dependency " +#~ "vue-plyr to ^5.1.3 Update dependency " +#~ "vue-upload-component to ^2.8.22 Update " +#~ "dependency vue-gettext to ^2.1.12 Update" +#~ " dependency showdown to ^1.9.1 Update " +#~ "dependency js-logger to ^1.6.1 Update" +#~ " dependency register-service-worker to " +#~ "^1.7.2 Update dependency howler to " +#~ "^2.2.3 Update dependency fomantic-ui-css" +#~ " to ^2.8.8 Update dependency diff to" +#~ " ^4.0.2 Update dependency axios-auth-" +#~ "refresh to ^2.2.8" +#~ msgstr "" + +#~ msgid "" +#~ "Ciarán Ainsworth Georg Krause Jakob " +#~ "Schürz Mathieu Jourdan Micha Gläß-Stöcker " +#~ "petitminion" +#~ msgstr "" + +#~ msgid "Committers: Dignified Silence Georg Krause JuniorJPDJ nztvar" +#~ msgstr "" + +#~ msgid "" +#~ "`DETAIL: The data directory was " +#~ "initialized by PostgreSQL version 11, " +#~ "which is not compatible with this " +#~ "version 13.5.`" +#~ msgstr "" + +#~ msgid "" +#~ "Alexandra Parker Alyssa Ross appzer0 " +#~ "Arthur Brugière Asier Iturralde Sarasola " +#~ "bittin Blopware Brian McMillen Christoph " +#~ "Pomaska Ciaran Ainsworth Ciarán Ainsworth " +#~ "Classified Connor Hay Damian Szetela " +#~ "David Marzal Deleted User Dignified " +#~ "Silence Dominik Danelski egon0 Erik " +#~ "Präntare Georg Abenthung Georgios B " +#~ "Georgios Brellas Georg Krause ghose " +#~ "greengekota heyarne ian Vatega Janek " +#~ "jovuit JuniorJPDJ Konstantinos G manuelviens" +#~ " Manuel Viens Marcos Marcos Peña " +#~ "Martin Giger Matthew J Micha " +#~ "Gläß-Stöcker petitminion Petitminion Philipp " +#~ "Wolfer Porrumentzio Quentin PAGÈS Raphael " +#~ "Lullis Riccardo Sacchetto Romain Failliot " +#~ "Rubén Cabrera Ryan Harg Sergio Varela" +#~ " SpcCw Stefano Pigozzi Thomas Tony " +#~ "Simoes Tony Wasserka vachan-maker " +#~ "Virgile Robles" +#~ msgstr "" + +#~ msgid "" +#~ "AMoonRabbit Agate Antoine POPINEAU Arthur " +#~ "Brugière Ciarán Ainsworth Connor Hay " +#~ "Creak David Marzal Georg Krause Gerhard" +#~ " Beck Greg Poole JuniorJPDJ Kuba " +#~ "Orlik Lunar Control Marcos Peña Mateusz" +#~ " Korzeniewski Mathieu Jourdan Micha " +#~ "Gläß-Stöcker Philipp Wolfer Porrumentzio " +#~ "Thomas Tony Wasserka Ville Ranki arkhi" +#~ " heyarne interfect jovuit mal petitminion" +#~ " vachan-maker" +#~ msgstr "" + +#~ msgid "" +#~ "Agate Arthur Brugière Ciarán Ainsworth " +#~ "Connor Hay David Marzal Distopico Fanyx" +#~ " Georg Abenthung Georg Krause Janek " +#~ "JuniorJPDJ Kasper Seweryn Marcos Peña " +#~ "Mathieu Jourdan Matthew J. Micha " +#~ "Gläß-Stöcker Philipp Wolfer Thomas Tony " +#~ "Wasserka heyarne jovuit petitminion thanksd" +#~ msgstr "" + +#~ msgid "" +#~ "Adam Novak Agate alemairebe Alicia " +#~ "Blasco Leon anonymous Amaranthe appzer0 " +#~ "Arne Asier Iturralde Sarasola Christian " +#~ "Paul Ciarán Ainsworth Daniel David " +#~ "Dominik Danelski Eorn le goéland Eleos" +#~ " Erik Duxstad Esteban Fred Uggla " +#~ "Freyja Wildes Georg Krause ghose " +#~ "hellekin heyarne interfect Jess Jing " +#~ "Johannes H. jovuit marzzzello Meliurwen " +#~ "Mehdi Nitai Bezerra da Silva Philipp " +#~ "Wolfer Pierre Couy Porrumentzio Reg " +#~ "Robert Kaye Rubén Cabrera Silver Fox " +#~ "Snack Capt SpcCw Strom Lin vicdorke " +#~ "x" +#~ msgstr "" + +#~ msgid "" +#~ "With Funkwhale 1.0, we're dropping " +#~ "support for Python 3.5. Before " +#~ "upgrading, ensure ``python3 --version`` " +#~ "returns ``3.6`` or higher." +#~ msgstr "" + +#~ msgid "If it returns ``3.6`` or higher, you have nothing to do." +#~ msgstr "" + +#~ msgid "" +#~ "If it returns ``3.5``, you will " +#~ "need to upgrade your Python " +#~ "version/Host, then recreate your virtual " +#~ "environment::" +#~ msgstr "" + +#~ msgid "delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory" +#~ msgstr "" + +#~ msgid "" +#~ "run ``python manage.py fw media " +#~ "generate-thumbnails`` to regenerate thumbnails" +#~ " with the enhanced quality" +#~ msgstr "" + +#~ msgid "" +#~ "If you don't want to regenerate " +#~ "thumbnails, you can keep the old " +#~ "ones by adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70``" +#~ " to your .env file." +#~ msgstr "" + +#~ msgid "Small API breaking change in ``/api/v1/libraries``" +#~ msgstr "" + +#~ msgid "" +#~ "To allow easier crawling of public " +#~ "libraries on a pod,we had to make" +#~ " a slight breaking change to the " +#~ "behaviour of ``GET /api/v1/libraries``." +#~ msgstr "" + +#~ msgid "" +#~ "If you are consuming the API via" +#~ " a third-party client and need " +#~ "to retrieve your libraries, use the " +#~ "``scope`` parameter, like this: ``GET " +#~ "/api/v1/libraries?scope=me``" +#~ msgstr "" + +#~ msgid "API breaking change in ``/api/v1/albums``" +#~ msgstr "" + +#~ msgid "" +#~ "To increase performance, querying " +#~ "``/api/v1/albums`` doesn't return album tracks" +#~ " anymore. This caused some performance " +#~ "issues, especially as some albums and" +#~ " series have dozens or even hundreds" +#~ " of tracks." +#~ msgstr "" + +#~ msgid "" +#~ "If you want to retrieve tracks for" +#~ " an album, you can query " +#~ "``/api/v1/tracks/?album=<albumid>``." +#~ msgstr "" + +#~ msgid "" +#~ "Support a --watch mode with " +#~ "``import_files`` to automatically add, update" +#~ " and remove files when filesystem is" +#~ " updated (#721)" +#~ msgstr "" + +#~ msgid "" +#~ "Fixed mimetype detection issue that " +#~ "broke transcoding on some tracks " +#~ "(#1093). Run ``python manage.py fix_uploads" +#~ " --mimetype`` to set proper mimetypes " +#~ "on existing uploads." +#~ msgstr "" + +#~ msgid "" +#~ "We plan to remove the old engine" +#~ " in an upcoming release. In the " +#~ "meantime, if anything goes wrong, you" +#~ " can switch back by setting " +#~ "``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` " +#~ "file." +#~ msgstr "" + +#~ msgid "" +#~ "The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE``" +#~ " setting can be used to make " +#~ "email verification mandatory for your " +#~ "users. It defaults to ``false``, and " +#~ "doesn't apply to superuser accounts " +#~ "created through the CLI." +#~ msgstr "" + +#~ msgid "" +#~ "If you use the ``import_files`` command," +#~ " this means you should replace " +#~ "scripts that look like this::" +#~ msgstr "" + +#~ msgid "By this::" +#~ msgstr "" + +#~ msgid "" +#~ "All user-related commands are available" +#~ " under the ``python manage.py fw " +#~ "users`` namespace. Please refer to the" +#~ " `Admin documentation " +#~ "<https://docs.funkwhale.audio/admin/commands.html#user-" +#~ "management>`_ for more information and " +#~ "instructions." +#~ msgstr "" + +#~ msgid "" +#~ "Progressive web app [Manual action " +#~ "sugFull list of changes " +#~ "^^^^^^^^^^^^^^^^^^^^gested, non-docker only] " +#~ "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" +#~ msgstr "" + +#~ msgid "" +#~ "In order to fully benefit from " +#~ "this change, if your pod isn't " +#~ "deployed using Docker, ensure the " +#~ "following instruction is present in your" +#~ " nginx configuration::" +#~ msgstr "" + +#~ msgid "" +#~ "You need to add this to your " +#~ ".env file: ``POSTGRES_HOST_AUTH_METHOD=trust``" +#~ msgstr "" + +#~ msgid "" +#~ "With our upgrade to Alpine 3.10, " +#~ "the ``funkwhale/all-in-one`` image now" +#~ " includes PostgreSQL 11." +#~ msgstr "" + +#~ msgid "" +#~ "In order to update to Funkwhale " +#~ "0.21, you will first need to " +#~ "upgrade Funkwhale's PostgreSQL database, " +#~ "following the steps below::" +#~ msgstr "" + +#~ msgid "" +#~ "Once you have completed the Funkwhale" +#~ " upgrade with our regular instructions " +#~ "and everything works properly, you can" +#~ " remove the backups/old files::" +#~ msgstr "" + +#~ msgid "" +#~ "Make media and static files serving " +#~ "more reliable when reverse proxy " +#~ "X_FORWARDED_* headers are incorrect (#947)" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to try it now, " +#~ "add ``MUSIC_USE_DENORMALIZATION=True`` to your " +#~ "``.env`` file, restart Funkwhale, and " +#~ "run the following command::" +#~ msgstr "" + +#~ msgid "" +#~ "Starting with Funkwhale 0.20, Funkwhale " +#~ "will automatically extract genre information" +#~ " from uploaded files and associate it" +#~ " with the corresponding tracks in the" +#~ " form of tags (similar to Mastodon" +#~ " or Twitter hashtags). Please refer " +#~ "to `our tagging documentation " +#~ "<https://docs.funkwhale.audio/users/upload.html#tagging-files>`_" +#~ " for more information regarding the " +#~ "tagging process." +#~ msgstr "" + +#~ msgid "" +#~ "If you are a pod admin and " +#~ "want to extract tags from already " +#~ "uploaded content, you run `this snippet" +#~ " <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__" +#~ " and `this snippet " +#~ "<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ " +#~ "in a ``python manage.py shell``." +#~ msgstr "" + +#~ msgid "" +#~ "`User documentation " +#~ "<https://docs.funkwhale.audio/moderator/reports.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "`Moderator documentation " +#~ "<https://docs.funkwhale.audio/users/reports.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "`User documentation " +#~ "<https://docs.funkwhale.audio/users/account.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "We recommend taking a few moments " +#~ "to fill these accordingly to your " +#~ "needs, by visiting ``/manage/settings``." +#~ msgstr "" + +#~ msgid "" +#~ "If you want to enable this feature" +#~ " on your pod, or learn more, " +#~ "please refer to `our documentation " +#~ "<https://docs.funkwhale.audio/moderator/listing.html>`_!" +#~ msgstr "" + +#~ msgid "" +#~ "To benefit from this enhancement on " +#~ "existing instances, you need to add " +#~ "``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` " +#~ "file (use a higher number if you" +#~ " want to have more web worker " +#~ "processes)." +#~ msgstr "" + +#~ msgid "" +#~ "Then, edit your ``/etc/systemd/system/funkwhale-" +#~ "server.service`` and replace the " +#~ "``ExecStart=`` line with " +#~ "``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn " +#~ "config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} " +#~ "-k uvicorn.workers.UvicornWorker -b " +#~ "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}``" +#~ msgstr "" + +#~ msgid "" +#~ "Then reload the configuration change " +#~ "with ``sudo systemctl daemon-reload`` " +#~ "and ``sudo systemctl restart funkwhale-" +#~ "server``." +#~ msgstr "" + +#~ msgid "..note::" +#~ msgstr "" + +#~ msgid "" +#~ "**On non-docker setups**, in " +#~ "``/etc/nginx/sites-available/funkwhale.conf``::" +#~ msgstr "" + +#~ msgid "Then reload nginx with ``systemctl reload nginx``." +#~ msgstr "" + +#~ msgid "**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``::" +#~ msgstr "" + +#~ msgid "Then reload nginx with ``docker-compose restart nginx``." +#~ msgstr "" + +#~ msgid "" +#~ "You can disable the rate-limiting " +#~ "feature by adding `THROTTLING_ENABLED=false` " +#~ "to your ``.env`` file and restarting " +#~ "the services. If you are using the" +#~ " Funkwhale API in your project or " +#~ "app and want to know more about" +#~ " the limits, please consult " +#~ "https://docs.funkwhale.audio/swagger/." +#~ msgstr "" + +#~ msgid "" +#~ "Some Subsonic clients, such as DSub, " +#~ "are sending an Authorization headers " +#~ "which was forwarded to the S3 " +#~ "storage when streaming, causing some " +#~ "issues. If you are using S3 or " +#~ "a compatible storage such as Minio, " +#~ "please add the following in your " +#~ "nginx ``~ /_protected/media/(.+)`` location::" +#~ msgstr "" + +#~ msgid "" +#~ "To help with that, we now offer" +#~ " a ``prune_library`` management command you" +#~ " can run to purge your database " +#~ "from obsolete entries. `Please refer to" +#~ " our documentation for usage instructions" +#~ " <https://docs.funkwhale.audio/admin/commands.html#pruning-" +#~ "library>`__." +#~ msgstr "" + +#~ msgid "" +#~ "To help with that, we now offer" +#~ " a ``check_inplace_files`` management command " +#~ "you can run to purge your database" +#~ " from obsolete files. `Please refer " +#~ "to our documentation for usage " +#~ "instructions <https://docs.funkwhale.audio/admin/commands.html" +#~ "#remove-obsolete-files-from-database>`__." +#~ msgstr "" + +#~ msgid "" +#~ "Added twitter:* meta tags to detect " +#~ "tracks and albums players automatically " +#~ "on more sites (#578) Improved " +#~ "responsiveness of embedded player" +#~ msgstr "" + +#~ msgid "" +#~ "*You are only concerned if you use" +#~ " the mono-container docker deployment " +#~ "behind a reverse proxy*" +#~ msgstr "" + +#~ msgid "" +#~ "Because of `an issue in our " +#~ "mono-container configuration " +#~ "<https://github.com/thetarkus/docker-funkwhale/issues/19>`_, " +#~ "users deploying Funkwhale via docker " +#~ "using our `funkwhale/all-in-one` image" +#~ " could face some mixed content " +#~ "warnings (and possibly other troubles) " +#~ "when browsing the Web UI." +#~ msgstr "" + +#~ msgid "" +#~ "This is fixed in this release, but" +#~ " on existing deployments, you'll need " +#~ "to add ``NESTED_PROXY=1`` in your " +#~ "container environment (either in your " +#~ "``.env`` file, or via your container " +#~ "management tool), then recreate your " +#~ "funkwhale container." +#~ msgstr "" + +#~ msgid "" +#~ "We've removed the risky content-types" +#~ " from our nginx template files, to" +#~ " ensure new instances are safe, " +#~ "however, if you already have an " +#~ "instance, you need to double check " +#~ "that your host nginx virtualhost do " +#~ "not include the following values for " +#~ "the ``gzip_types`` settings::" +#~ msgstr "" + +#~ msgid "" +#~ "For convenience, you can also replace" +#~ " the whole setting with the following" +#~ " snippet::" +#~ msgstr "" + +#~ msgid "" +#~ "If you are on an Apache setup, " +#~ "you will have to replace the " +#~ "`<Location \"/api\">` block with the " +#~ "following::" +#~ msgstr "" + +#~ msgid "" +#~ "And add some more `ProxyPass` directives" +#~ " so that the `Alias` part of " +#~ "your configuration file looks this way::" +#~ msgstr "" + +#~ msgid "" +#~ "In case you are using custom css" +#~ " and theming, you also need to " +#~ "match this block::" +#~ msgstr "" + +#~ msgid "" +#~ "Upgrade instructions are available at " +#~ "https://docs.funkwhale.audio/admin/upgrading.html, ensure " +#~ "you also execute the instructions marked" +#~ " with ``[manual action required]`` and " +#~ "``[manual action suggested]``." +#~ msgstr "" + +#~ msgid "See ``Full changelog`` below for an exhaustive list of changes!" +#~ msgstr "" + +#~ msgid "" +#~ "License matching is done on the " +#~ "content of the ``License`` tag in " +#~ "the files, with a fallback on the" +#~ " ``Copyright`` tag." +#~ msgstr "" + +#~ msgid "" +#~ "**On docker setups**, edit your " +#~ "``/srv/funkwhale/nginx/funkwhale.template`` and replace" +#~ " the ``location /api/`` and `location " +#~ "/` blocks by the following snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "**On non-docker setups**, edit your " +#~ "``/etc/nginx/sites-available/funkwhale.conf`` file, " +#~ "and replace the ``location /api/`` and" +#~ " `location /` blocks by the following" +#~ " snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the " +#~ "corresponding variable from your .env " +#~ "file, which should be " +#~ "``/srv/funkwhale/front/dist`` by default, then " +#~ "reload your nginx process with ``sudo" +#~ " systemctl reload nginx``." +#~ msgstr "" + +#~ msgid "" +#~ "On non-docker deployments, earlier " +#~ "versions required you to source the " +#~ "config/.env file before launching any " +#~ "Funkwhale command, with ``export $(cat " +#~ "config/.env | grep -v ^# | " +#~ "xargs)`` This led to more complex " +#~ "and error prone deployment / setup." +#~ msgstr "" + +#~ msgid "On docker setups::" +#~ msgstr "" + +#~ msgid "On non-docker setups::" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to benefit from gzip" +#~ " compression on your instance, edit " +#~ "your reverse proxy virtualhost file " +#~ "(located at ``/etc/nginx/sites-" +#~ "available/funkwhale.conf``) and add the " +#~ "following snippet in the server block," +#~ " then reload your nginx server::" +#~ msgstr "" + +#~ msgid "First, tweak your .env file::" +#~ msgstr "" + +#~ msgid "" +#~ "Then, add the following block at " +#~ "the end of your docker-compose.yml " +#~ "file::" +#~ msgstr "" + +#~ msgid "" +#~ "Update the funkwhale.conf configuration of " +#~ "your server's reverse-proxy::" +#~ msgstr "" + +#~ msgid "sudo nginx -t sudo systemctl reload nginx" +#~ msgstr "" + +#~ msgid "On Apache2 setups, you have to replace the following line::" +#~ msgstr "" + +#~ msgid "with::" +#~ msgstr "" + +#~ msgid "You can now restart your server::" +#~ msgstr "" + +#~ msgid "" +#~ "``hello world``: search for \"hello\" " +#~ "and \"world\" in all the available " +#~ "fields" +#~ msgstr "" + +#~ msgid "``hello in:artist`` search for results where artist name is \"hello\"" +#~ msgstr "" + +#~ msgid "" +#~ "``spring in:artist,album`` search for results" +#~ " where artist name or album title " +#~ "contain \"spring\"" +#~ msgstr "" + +#~ msgid "``artist:hello`` search for results where artist name equals \"hello\"" +#~ msgstr "" + +#~ msgid "" +#~ "``artist:\"System of a Down\" " +#~ "domain:instance.funkwhale`` search for results " +#~ "where artist name equals \"System of " +#~ "a Down\" and inside \"instance.funkwhale\" " +#~ "library" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure MEDIA_ROOT, STATIC_ROOT and " +#~ "MUSIC_DIRECTORY_* are set explicitly [Manual" +#~ " action required]" +#~ msgstr "" + +#~ msgid "" +#~ "This will only affect new deployments" +#~ " though. If you want to benefit " +#~ "from this on an existing instance, " +#~ "do a backup of your ``.env`` and" +#~ " ``docker-compose.yml`` files and apply " +#~ "the following changes:" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure ``MEDIA_ROOT`` is uncommented in " +#~ "your .env file and match the " +#~ "absolute path where media files are " +#~ "stored on your host " +#~ "(``/srv/funkwhale/data/media`` by default)" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure ``STATIC_ROOT`` is uncommented in " +#~ "your .env file and match the " +#~ "absolute path where static files are " +#~ "stored on your host " +#~ "(``/srv/funkwhale/data/static`` by default)" +#~ msgstr "" + +#~ msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented " +#~ "and set to the absolute path on" +#~ " your host were your music files " +#~ "are stored (``/srv/funkwhale/data/music`` by " +#~ "default)" +#~ msgstr "" + +#~ msgid "" +#~ "Search for volumes (there should be " +#~ "two occurrences) that contains " +#~ "``/app/funkwhale_api/media`` on the right " +#~ "side, and replace the whole line " +#~ "with ``- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"``" +#~ msgstr "" + +#~ msgid "" +#~ "Search for a volume that contains " +#~ "``/app/staticfiles`` on the right side, " +#~ "and replace the whole line with " +#~ "``- \"${STATIC_ROOT}:${STATIC_ROOT}\"``" +#~ msgstr "" + +#~ msgid "" +#~ "If you use in-place import, search" +#~ " for volumes (there should be two " +#~ "occurrences) that contains ``/music:ro`` on" +#~ " the right side, and replace the " +#~ "whole line with ``- " +#~ "\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"``" +#~ msgstr "" + +#~ msgid "" +#~ "In the end, the ``volumes`` directives" +#~ " of your containers should look like" +#~ " that::" +#~ msgstr "" + +#~ msgid "" +#~ "You can safely remove this dependency" +#~ " in your environment with ``pip " +#~ "uninstall django-cacheops`` if you're " +#~ "not using docker." +#~ msgstr "" + +#~ msgid "" +#~ "You can also safely remove any " +#~ "``CACHEOPS_ENABLED`` setting from your " +#~ "environment file." +#~ msgstr "" + +#~ msgid "" +#~ "Up until now, our Apache2 configuration" +#~ " was not working with websockets. " +#~ "This is now solved by adding this" +#~ " at the beginning of your Apache2 " +#~ "configuration file::" +#~ msgstr "" + +#~ msgid "And this, before the \"/api\" block::" +#~ msgstr "" + +#~ msgid "Here is how to modify your `funkwhale.conf` apache2 configuration::" +#~ msgstr "" + +#~ msgid "You may sometimes get the following warning while applying migrations::" +#~ msgstr "" + +#~ msgid "" +#~ "This is a warning, not an error," +#~ " and it can be safely ignored. " +#~ "Never run the ``makemigrations`` command " +#~ "yourself." +#~ msgstr "" + +#~ msgid "" +#~ "Added warning about _protected/music location" +#~ " in nginx configuration (#247)" +#~ msgstr "" + +#~ msgid "" +#~ "You don't have to do anything on" +#~ " your side, but you may want to" +#~ " remove the now obsolete configuration " +#~ "from your reverse proxy file (nginx " +#~ "only)::" +#~ msgstr "" + +#~ msgid "Upgrade instructions are available at" +#~ msgstr "" + +#~ msgid "https://docs.funkwhale.audio/upgrading.html" +#~ msgstr "" + +#~ msgid "Then launch it::" +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/artists`` does not includes a " +#~ "list of tracks anymore. It was to" +#~ " heavy to return all of this " +#~ "data all the time. You can get " +#~ "all tracks for an artist using " +#~ "``/api/v1/tracks?artist=artist_id``" +#~ msgstr "" + +#~ msgid "" +#~ "Additionally, ``/api/v1/tracks`` now support " +#~ "an ``album`` filter to filter tracks " +#~ "matching an album" +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/artists/search``, ``/api/v1/albums/search`` and" +#~ " ``/api/v1/tracks/search`` endpoints are removed." +#~ " Use ``/api/v1/{artists|albums|tracks}/?q=yourquery`` " +#~ "instead. It's also more powerful, since" +#~ " you can combine search with other" +#~ " filters and ordering options." +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/requests/import-requests/search`` endpoint " +#~ "is removed as well. Use " +#~ "``/api/v1/requests/import-requests/?q=yourquery`` instead." +#~ " It's also more powerful, since you" +#~ " can combine search with other " +#~ "filters and ordering options." +#~ msgstr "" + +#~ msgid "" +#~ "You have nothing to do to benefit" +#~ " from this, however, since Flac files" +#~ " tend to be a lot bigger than" +#~ " other files, you may want to " +#~ "increase the ``client_max_body_size`` value in" +#~ " your Nginx configuration if you plan" +#~ " to upload flac files." +#~ msgstr "" + +#~ msgid "Nginx::" +#~ msgstr "" + +#~ msgid "Apache2::" +#~ msgstr "" + +#~ msgid "" +#~ "This interface is available at " +#~ "``/manage/settings`` and via link in the" +#~ " sidebar." +#~ msgstr "" + +#~ msgid "" +#~ "There is still no dedicated interface" +#~ " to manage user permissions, but you" +#~ " can use the admin interface at " +#~ "``/api/admin/users/user/`` for that purpose in" +#~ " the meantime." +#~ msgstr "" + +#~ msgid "" +#~ "Please see `our list of supported " +#~ "apps <https://funkwhale.audio/en_US/apps>`_ for more" +#~ " information about supported clients and" +#~ " user instructions." +#~ msgstr "" + +#~ msgid "On nginx, add the following block::" +#~ msgstr "" + +#~ msgid "On Apache, add the following block::" +#~ msgstr "" + +#~ msgid "" +#~ "To make your instance fully compatible" +#~ " with the nodeinfo protocol, you need" +#~ " to to edit your nginx configuration" +#~ " file::" +#~ msgstr "" + +#~ msgid "You can do the same if you use apache::" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to actually send those" +#~ " emails to your users, you should " +#~ "edit your .env file and tweak the" +#~ " ``EMAIL_CONFIG`` variable. See " +#~ ":data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` " +#~ "for more details." +#~ msgstr "" + +#~ msgid "" +#~ "For non-docker deployments, add " +#~ "``--proxy-headers`` at the end of the" +#~ " ``daphne`` command in :file:`/etc/systemd/system" +#~ "/funkwhale-server.service`." +#~ msgstr "" + +#~ msgid "" +#~ "`This new feature is documented here " +#~ "<https://docs.funkwhale.audio/importing-music.html#in-" +#~ "place-import>`_ and require additional " +#~ "configuration to ensure funkwhale and " +#~ "your webserver can serve those files " +#~ "properly." +#~ msgstr "" + +#~ msgid "" +#~ "Assuming your music is stored in " +#~ "``/srv/funkwhale/data/music``, add the following " +#~ "block to your nginx configuration::" +#~ msgstr "" + +#~ msgid "And the following to your .env file::" +#~ msgstr "" + +#~ msgid "" +#~ "Assuming you have the following volume" +#~ " directive in your ``docker-compose.yml``" +#~ " (it's the default): " +#~ "``/srv/funkwhale/data/music:/music:ro``, then add " +#~ "the following to your .env file::" +#~ msgstr "" + +#~ msgid "Celery beat can be enabled easily::" +#~ msgstr "" + +#~ msgid "" +#~ "For these endpoints to work, you " +#~ "will need to update your nginx " +#~ "configuration, and add the following " +#~ "snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "A new ``FEDERATION_ENABLED`` env var " +#~ "have also been added to control " +#~ "whether federation is enabled or not " +#~ "on the application side. This settings" +#~ " defaults to True, which should have" +#~ " no consequences at the moment, since" +#~ " actual federation is not implemented " +#~ "and the only available endpoints are " +#~ "for testing purposes." +#~ msgstr "" + +#~ msgid "" +#~ "Add ``FEDERATION_ENABLED=false`` to your .env" +#~ " file to disable federation on the" +#~ " application side." +#~ msgstr "" + +#~ msgid "" +#~ "On non docker setups, you'll have " +#~ "to update the [Service] block of " +#~ "your funkwhale-server systemd unit file" +#~ " to launch the application server " +#~ "using daphne instead of gunicorn." +#~ msgstr "" + +#~ msgid "*This is still an alpha feature at the moment, please report any bug.*" +#~ msgstr "" + +#~ msgid "" +#~ "Shortcuts: can now use the ``f`` " +#~ "shortcut to toggle the currently playing" +#~ " track as a favorite (#53)" +#~ msgstr "" + diff --git a/docs/locales/en_GB/LC_MESSAGES/developer/api/authentication.po b/docs/locales/en_GB/LC_MESSAGES/developer/api/authentication.po index de7c389f4..a3ee0ebd1 100644 --- a/docs/locales/en_GB/LC_MESSAGES/developer/api/authentication.po +++ b/docs/locales/en_GB/LC_MESSAGES/developer/api/authentication.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth <sporiff@funkwhale.audio>\n" +"Language-Team: English (United Kingdom) <https://translate.funkwhale.audio/" +"projects/documentation/developer-api-authentication/en_GB/>\n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/api/authentication.md:1 @@ -74,7 +77,7 @@ msgstr "" #: ../../developer_documentation/api/authentication.md:48 msgid "Description" -msgstr "" +msgstr "Description" #: ../../developer_documentation/api/authentication.md:49 msgid "`read`" @@ -361,4 +364,3 @@ msgid "" "See [the OAuth spec](https://www.rfc-editor.org/rfc/rfc6749#section-6) " "for more information about this response." msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/developer/api/subsonic.po b/docs/locales/en_GB/LC_MESSAGES/developer/api/subsonic.po index 3c7e363f3..be9409721 100644 --- a/docs/locales/en_GB/LC_MESSAGES/developer/api/subsonic.po +++ b/docs/locales/en_GB/LC_MESSAGES/developer/api/subsonic.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth <sporiff@funkwhale.audio>\n" +"Language-Team: English (United Kingdom) <https://translate.funkwhale.audio/" +"projects/documentation/developer-api-subsonic/en_GB/>\n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/api/subsonic.md:1 @@ -174,11 +177,11 @@ msgstr "" #: ../../developer_documentation/api/subsonic.md:48 msgid "Data type" -msgstr "" +msgstr "Data type" #: ../../developer_documentation/api/subsonic.md:49 msgid "Description" -msgstr "" +msgstr "Description" #: ../../developer_documentation/api/subsonic.md:50 msgid "`type`" @@ -217,4 +220,3 @@ msgid "" "directly by calling an endpoint. For example, call this URL to test the " "`ping` endpoint: <https://demo.funkwhale.audio/rest/ping.view?f=json>" msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/developer/federation/index.po b/docs/locales/en_GB/LC_MESSAGES/developer/federation/index.po index 6c33e8123..b19f646d2 100644 --- a/docs/locales/en_GB/LC_MESSAGES/developer/federation/index.po +++ b/docs/locales/en_GB/LC_MESSAGES/developer/federation/index.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth <sporiff@funkwhale.audio>\n" +"Language-Team: English (United Kingdom) <https://translate.funkwhale.audio/" +"projects/documentation/developer-federation-index/en_GB/>\n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/federation/index.md:1 @@ -318,7 +321,7 @@ msgstr "" #: ../../developer_documentation/federation/index.md:560 #: ../../developer_documentation/federation/index.md:627 msgid "Example" -msgstr "" +msgstr "Example" #: ../../developer_documentation/federation/index.md:99 msgid "" @@ -553,7 +556,7 @@ msgstr "" #: ../../developer_documentation/federation/index.md:532 #: ../../developer_documentation/federation/index.md:590 msgid "Data type" -msgstr "" +msgstr "Data type" #: ../../developer_documentation/federation/index.md:374 #: ../../developer_documentation/federation/index.md:415 @@ -561,7 +564,7 @@ msgstr "" #: ../../developer_documentation/federation/index.md:533 #: ../../developer_documentation/federation/index.md:591 msgid "Description" -msgstr "" +msgstr "Description" #: ../../developer_documentation/federation/index.md:375 #: ../../developer_documentation/federation/index.md:416 @@ -1002,4 +1005,3 @@ msgid "" "Funkwhale also attributes all objects on a domain with the domain's " "[Service actor](#service-actor)" msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/developer/plugins/create.po b/docs/locales/en_GB/LC_MESSAGES/developer/plugins/create.po index a2a85e811..ca8c4fd89 100644 --- a/docs/locales/en_GB/LC_MESSAGES/developer/plugins/create.po +++ b/docs/locales/en_GB/LC_MESSAGES/developer/plugins/create.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth <sporiff@funkwhale.audio>\n" +"Language-Team: English (United Kingdom) <https://translate.funkwhale.audio/" +"projects/documentation/developer-plugins-create/en_GB/>\n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/plugins/create.md:1 @@ -191,15 +194,15 @@ msgstr "" #: ../../developer_documentation/plugins/create.md:98 msgid "Parameter" -msgstr "" +msgstr "Parameter" #: ../../developer_documentation/plugins/create.md:99 msgid "Data type" -msgstr "" +msgstr "Data type" #: ../../developer_documentation/plugins/create.md:100 msgid "Description" -msgstr "" +msgstr "Description" #: ../../developer_documentation/plugins/create.md:101 msgid "`name`" @@ -334,4 +337,3 @@ msgstr "" #: ../../developer_documentation/plugins/create.md:200 msgid "The browser returns the message \"You're a wizard Harry\"" msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/developer/workflows/release.po b/docs/locales/en_GB/LC_MESSAGES/developer/workflows/release.po index 3787df5b8..88249b7f7 100644 --- a/docs/locales/en_GB/LC_MESSAGES/developer/workflows/release.po +++ b/docs/locales/en_GB/LC_MESSAGES/developer/workflows/release.po @@ -8,80 +8,83 @@ msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:05+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" -#: ../../developer_documentation/workflows/release.md:1 +#: ../../developer/workflows/release.md:1 msgid "Make a release" msgstr "" -#: ../../developer_documentation/workflows/release.md:3 +#: ../../developer/workflows/release.md:3 msgid "" "Once we're ready to release a new version of the software, we can use the" " following process:" msgstr "" -#: ../../developer_documentation/workflows/release.md:5 +#: ../../developer/workflows/release.md:5 msgid "Export the new release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:11 +#: ../../developer/workflows/release.md:11 msgid "Export the previous release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:17 +#: ../../developer/workflows/release.md:17 msgid "" "Pull the latest version of the `develop` branch. Use `stable` if you're " "releasing a bugfix." msgstr "" -#: ../../developer_documentation/workflows/release.md +#: ../../developer/workflows/release.md msgid "Bugfix release" msgstr "" -#: ../../developer_documentation/workflows/release.md +#: ../../developer/workflows/release.md msgid "Feature release" msgstr "" -#: ../../developer_documentation/workflows/release.md:43 +#: ../../developer/workflows/release.md:43 msgid "Compile the changelog" msgstr "" -#: ../../developer_documentation/workflows/release.md:49 +#: ../../developer/workflows/release.md:49 msgid "Check the output and fix typos and mistakes" msgstr "" -#: ../../developer_documentation/workflows/release.md:50 +#: ../../developer/workflows/release.md:50 msgid "Add a list of contributors" msgstr "" -#: ../../developer_documentation/workflows/release.md:58 -msgid "Update the `__version__` variable to the next release version" +#: ../../developer/workflows/release.md:58 +msgid "Update the next release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:64 +#: ../../developer/workflows/release.md:66 msgid "Commit all changes" msgstr "" -#: ../../developer_documentation/workflows/release.md:71 +#: ../../developer/workflows/release.md:73 msgid "Create a tag" msgstr "" -#: ../../developer_documentation/workflows/release.md:77 +#: ../../developer/workflows/release.md:79 msgid "Publish the new tag to GitLab" msgstr "" -#: ../../developer_documentation/workflows/release.md:83 +#: ../../developer/workflows/release.md:85 msgid "Merge your changes into the alternate branch" msgstr "" -#: ../../developer_documentation/workflows/release.md:107 +#: ../../developer/workflows/release.md:109 msgid "Don't forget to create a blog post to announce the new release!" msgstr "" +#~ msgid "Update the `__version__` variable to the next release version" +#~ msgstr "" + diff --git a/docs/locales/en_GB/LC_MESSAGES/user/info/cli.po b/docs/locales/en_GB/LC_MESSAGES/user/info/cli.po index 707d66154..ebd254820 100644 --- a/docs/locales/en_GB/LC_MESSAGES/user/info/cli.po +++ b/docs/locales/en_GB/LC_MESSAGES/user/info/cli.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth <sporiff@funkwhale.audio>\n" +"Language-Team: English (United Kingdom) <https://translate.funkwhale.audio/" +"projects/documentation/user-info-cli/en_GB/>\n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/info/cli.rst:2 @@ -266,7 +269,7 @@ msgstr "" #: ../../user_documentation/info/cli.rst:118 msgid "Description" -msgstr "" +msgstr "Description" #: ../../user_documentation/info/cli.rst:120 msgid "``-e``, ``--env-file``" @@ -585,4 +588,3 @@ msgid "" "**Goal**: Variation of the previous example, but instead of downloading " "an artist discography, we listen to an album in VLC" msgstr "" - diff --git a/docs/locales/en_GB/LC_MESSAGES/user/libraries/content/tag.po b/docs/locales/en_GB/LC_MESSAGES/user/libraries/content/tag.po index 519bdf44f..7ddf71d6d 100644 --- a/docs/locales/en_GB/LC_MESSAGES/user/libraries/content/tag.po +++ b/docs/locales/en_GB/LC_MESSAGES/user/libraries/content/tag.po @@ -3,19 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" +"PO-Revision-Date: 2023-06-06 10:50+0000\n" +"Last-Translator: Ciarán Ainsworth <sporiff@funkwhale.audio>\n" +"Language-Team: English (United Kingdom) <https://translate.funkwhale.audio/" +"projects/documentation/user-libraries-content-tag/en_GB/>\n" +"Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" +"Generated-By: Babel 2.12.1\n" #: ../../user/libraries/content/tag.md:1 msgid "Tag your content with Picard" @@ -23,9 +26,10 @@ msgstr "" #: ../../user/libraries/content/tag.md:3 msgid "" -"Funkwhale relies on [ID3 tags](https://id3.org/) to sort audio content. " -"ID3 tags tell Funkwhale information about your files. Funkwhale uses this" -" information to display your content in your {term}`pod`." +"Funkwhale relies on [ID3 tags](https://wikipedia.org/wiki/ID3) to sort " +"audio content. ID3 tags tell Funkwhale information about your files. " +"Funkwhale uses this information to display your content in your " +"{term}`pod`." msgstr "" #: ../../user/libraries/content/tag.md:5 @@ -50,7 +54,7 @@ msgstr "" #: ../../user/libraries/content/tag.md:22 msgid "Description" -msgstr "" +msgstr "Description" #: ../../user/libraries/content/tag.md:23 msgid "Example value" @@ -356,3 +360,11 @@ msgstr "" #~ " these to a library](upload_content.md)" #~ msgstr "" +#~ msgid "" +#~ "Funkwhale relies on [ID3 " +#~ "tags](https://id3.org/) to sort audio content." +#~ " ID3 tags tell Funkwhale information " +#~ "about your files. Funkwhale uses this" +#~ " information to display your content " +#~ "in your {term}`pod`." +#~ msgstr "" diff --git a/docs/locales/en_US/LC_MESSAGES/changelog.po b/docs/locales/en_US/LC_MESSAGES/changelog.po index 571c020b5..ee95129a1 100644 --- a/docs/locales/en_US/LC_MESSAGES/changelog.po +++ b/docs/locales/en_US/LC_MESSAGES/changelog.po @@ -8,1397 +8,1534 @@ msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:05+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" -#: ../../../CHANGELOG:2 +#: ../../../CHANGELOG.md:2 msgid "Changelog" msgstr "" -#: ../../../CHANGELOG:4 +#: ../../../CHANGELOG.md:4 msgid "You can subscribe to release announcements by:" msgstr "" -#: ../../../CHANGELOG:6 +#: ../../../CHANGELOG.md:6 msgid "" -"Following `@funkwhale@fosstodon.org <https://fosstodon.org/@funkwhale>`_ " -"on Mastodon" +"Following [@funkwhale@fosstodon.org](https://fosstodon.org/@funkwhale) on" +" Mastodon" msgstr "" -#: ../../../CHANGELOG:7 +#: ../../../CHANGELOG.md:7 msgid "" "Subscribing to the following Atom feed: " "https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag" msgstr "" -#: ../../../CHANGELOG:9 +#: ../../../CHANGELOG.md:9 msgid "" "This changelog is viewable on the web at " "https://docs.funkwhale.audio/changelog.html." msgstr "" -#: ../../../CHANGELOG:14 -msgid "1.3.0-rc3 (2023-01-23)" +#: ../../../CHANGELOG.md:13 +msgid "1.3.0-rc4 (2023-03-24)" msgstr "" -#: ../../../CHANGELOG:16 +#: ../../../CHANGELOG.md:15 ../../../CHANGELOG.md:22 msgid "Update since 1.3.0-rc2:" msgstr "" -#: ../../../CHANGELOG:18 +#: ../../../CHANGELOG.md:16 +msgid "" +"Resolved an issue where queue text with mouse over has dark text on dark " +"background (#2058) (2058)" +msgstr "" + +#: ../../../CHANGELOG.md:17 +msgid "Improve signal handling for service and containers" +msgstr "" + +#: ../../../CHANGELOG.md:18 +msgid "" +"Fixes an issue which made it possible to download all media files without" +" access control (#2101)" +msgstr "" + +#: ../../../CHANGELOG.md:20 +msgid "1.3.0-rc3 (2023-01-23)" +msgstr "" + +#: ../../../CHANGELOG.md:24 msgid "Fix pipeline execution for tags" msgstr "" -#: ../../../CHANGELOG:21 +#: ../../../CHANGELOG.md:26 msgid "1.3.0-rc2 (2023-01-23)" msgstr "" -#: ../../../CHANGELOG:23 +#: ../../../CHANGELOG.md:28 msgid "Update since 1.3.0-rc1:" msgstr "" -#: ../../../CHANGELOG:25 ../../../CHANGELOG:101 ../../../CHANGELOG:465 -#: ../../../CHANGELOG:517 ../../../CHANGELOG:563 ../../../CHANGELOG:731 -#: ../../../CHANGELOG:922 ../../../CHANGELOG:941 ../../../CHANGELOG:960 -#: ../../../CHANGELOG:980 ../../../CHANGELOG:1080 ../../../CHANGELOG:1142 -#: ../../../CHANGELOG:1232 ../../../CHANGELOG:1311 ../../../CHANGELOG:1348 -#: ../../../CHANGELOG:1596 ../../../CHANGELOG:1738 ../../../CHANGELOG:2023 -#: ../../../CHANGELOG:2109 ../../../CHANGELOG:2276 ../../../CHANGELOG:2392 -#: ../../../CHANGELOG:2429 ../../../CHANGELOG:2530 ../../../CHANGELOG:2769 -#: ../../../CHANGELOG:2863 ../../../CHANGELOG:3079 ../../../CHANGELOG:3161 -#: ../../../CHANGELOG:3394 ../../../CHANGELOG:3465 ../../../CHANGELOG:3586 -#: ../../../CHANGELOG:3685 ../../../CHANGELOG:3887 ../../../CHANGELOG:4007 -#: ../../../CHANGELOG:4155 ../../../CHANGELOG:4251 ../../../CHANGELOG:4344 -#: ../../../CHANGELOG:4418 +#: ../../../CHANGELOG.md:30 ../../../CHANGELOG.md:107 ../../../CHANGELOG.md:453 +#: ../../../CHANGELOG.md:502 ../../../CHANGELOG.md:543 +#: ../../../CHANGELOG.md:702 ../../../CHANGELOG.md:885 +#: ../../../CHANGELOG.md:901 ../../../CHANGELOG.md:916 +#: ../../../CHANGELOG.md:933 ../../../CHANGELOG.md:1026 +#: ../../../CHANGELOG.md:1085 ../../../CHANGELOG.md:1165 +#: ../../../CHANGELOG.md:1237 ../../../CHANGELOG.md:1269 +#: ../../../CHANGELOG.md:1507 ../../../CHANGELOG.md:1646 +#: ../../../CHANGELOG.md:1917 ../../../CHANGELOG.md:1999 +#: ../../../CHANGELOG.md:2148 ../../../CHANGELOG.md:2258 +#: ../../../CHANGELOG.md:2290 ../../../CHANGELOG.md:2393 +#: ../../../CHANGELOG.md:2620 ../../../CHANGELOG.md:2707 +#: ../../../CHANGELOG.md:2922 ../../../CHANGELOG.md:3001 +#: ../../../CHANGELOG.md:3223 ../../../CHANGELOG.md:3286 +#: ../../../CHANGELOG.md:3400 ../../../CHANGELOG.md:3495 +#: ../../../CHANGELOG.md:3691 ../../../CHANGELOG.md:3800 +#: ../../../CHANGELOG.md:3948 ../../../CHANGELOG.md:4033 +#: ../../../CHANGELOG.md:4125 ../../../CHANGELOG.md:4194 msgid "Enhancements:" msgstr "" -#: ../../../CHANGELOG:27 +#: ../../../CHANGELOG.md:32 msgid "" "Retry fetching new radio track 5 times if error occurred before resetting" " radio session (#2022)" msgstr "" -#: ../../../CHANGELOG:29 ../../../CHANGELOG:177 ../../../CHANGELOG:287 -#: ../../../CHANGELOG:334 ../../../CHANGELOG:388 ../../../CHANGELOG:413 -#: ../../../CHANGELOG:470 ../../../CHANGELOG:522 ../../../CHANGELOG:569 -#: ../../../CHANGELOG:622 ../../../CHANGELOG:679 ../../../CHANGELOG:751 -#: ../../../CHANGELOG:926 ../../../CHANGELOG:946 ../../../CHANGELOG:965 -#: ../../../CHANGELOG:994 ../../../CHANGELOG:1066 ../../../CHANGELOG:1095 -#: ../../../CHANGELOG:1148 ../../../CHANGELOG:1257 ../../../CHANGELOG:1319 -#: ../../../CHANGELOG:1358 ../../../CHANGELOG:1624 ../../../CHANGELOG:1748 -#: ../../../CHANGELOG:2053 ../../../CHANGELOG:2123 ../../../CHANGELOG:2311 -#: ../../../CHANGELOG:2400 ../../../CHANGELOG:2436 ../../../CHANGELOG:2540 -#: ../../../CHANGELOG:2807 ../../../CHANGELOG:2873 ../../../CHANGELOG:3045 -#: ../../../CHANGELOG:3061 ../../../CHANGELOG:3089 ../../../CHANGELOG:3179 -#: ../../../CHANGELOG:3400 ../../../CHANGELOG:3476 ../../../CHANGELOG:3595 -#: ../../../CHANGELOG:3702 ../../../CHANGELOG:3894 ../../../CHANGELOG:4013 -#: ../../../CHANGELOG:4168 ../../../CHANGELOG:4262 ../../../CHANGELOG:4328 -#: ../../../CHANGELOG:4432 ../../../CHANGELOG:4504 ../../../CHANGELOG:4529 -#: ../../../CHANGELOG:4640 ../../../CHANGELOG:4656 ../../../CHANGELOG:4811 -#: ../../../CHANGELOG:4829 +#: ../../../CHANGELOG.md:34 ../../../CHANGELOG.md:181 ../../../CHANGELOG.md:287 +#: ../../../CHANGELOG.md:330 ../../../CHANGELOG.md:381 +#: ../../../CHANGELOG.md:404 ../../../CHANGELOG.md:457 +#: ../../../CHANGELOG.md:506 ../../../CHANGELOG.md:549 +#: ../../../CHANGELOG.md:599 ../../../CHANGELOG.md:653 +#: ../../../CHANGELOG.md:721 ../../../CHANGELOG.md:889 +#: ../../../CHANGELOG.md:905 ../../../CHANGELOG.md:921 +#: ../../../CHANGELOG.md:946 ../../../CHANGELOG.md:1015 +#: ../../../CHANGELOG.md:1040 ../../../CHANGELOG.md:1090 +#: ../../../CHANGELOG.md:1188 ../../../CHANGELOG.md:1244 +#: ../../../CHANGELOG.md:1278 ../../../CHANGELOG.md:1535 +#: ../../../CHANGELOG.md:1655 ../../../CHANGELOG.md:1946 +#: ../../../CHANGELOG.md:2012 ../../../CHANGELOG.md:2183 +#: ../../../CHANGELOG.md:2265 ../../../CHANGELOG.md:2296 +#: ../../../CHANGELOG.md:2402 ../../../CHANGELOG.md:2657 +#: ../../../CHANGELOG.md:2717 ../../../CHANGELOG.md:2893 +#: ../../../CHANGELOG.md:2906 ../../../CHANGELOG.md:2931 +#: ../../../CHANGELOG.md:3018 ../../../CHANGELOG.md:3228 +#: ../../../CHANGELOG.md:3297 ../../../CHANGELOG.md:3409 +#: ../../../CHANGELOG.md:3511 ../../../CHANGELOG.md:3697 +#: ../../../CHANGELOG.md:3805 ../../../CHANGELOG.md:3960 +#: ../../../CHANGELOG.md:4043 ../../../CHANGELOG.md:4112 +#: ../../../CHANGELOG.md:4207 ../../../CHANGELOG.md:4273 +#: ../../../CHANGELOG.md:4294 ../../../CHANGELOG.md:4398 +#: ../../../CHANGELOG.md:4411 ../../../CHANGELOG.md:4542 +#: ../../../CHANGELOG.md:4558 msgid "Bugfixes:" msgstr "" -#: ../../../CHANGELOG:31 +#: ../../../CHANGELOG.md:36 msgid "Docker setup: do not export the API port 5000 publicly" msgstr "" -#: ../../../CHANGELOG:32 +#: ../../../CHANGELOG.md:37 msgid "Fix artist name submission in Maloja plugin" msgstr "" -#: ../../../CHANGELOG:34 +#: ../../../CHANGELOG.md:39 msgid "Deprecations:" msgstr "" -#: ../../../CHANGELOG:36 +#: ../../../CHANGELOG.md:41 msgid "" "That's the last minor version series that supports python3.7. Funkwhale " "1.4 will remove support for it. #1693" msgstr "" -#: ../../../CHANGELOG:37 +#: ../../../CHANGELOG.md:42 msgid "" "Deprecate the api manage.py script in favor of the funkwhale-manage " "entrypoint" msgstr "" -#: ../../../CHANGELOG:40 +#: ../../../CHANGELOG.md:44 msgid "1.3.0-rc1 (2023-01-20)" msgstr "" -#: ../../../CHANGELOG:42 ../../../CHANGELOG:284 ../../../CHANGELOG:326 -#: ../../../CHANGELOG:385 ../../../CHANGELOG:410 ../../../CHANGELOG:462 -#: ../../../CHANGELOG:514 ../../../CHANGELOG:560 ../../../CHANGELOG:619 -#: ../../../CHANGELOG:676 ../../../CHANGELOG:707 ../../../CHANGELOG:911 -#: ../../../CHANGELOG:919 ../../../CHANGELOG:938 ../../../CHANGELOG:957 -#: ../../../CHANGELOG:977 ../../../CHANGELOG:1063 ../../../CHANGELOG:1077 -#: ../../../CHANGELOG:1139 ../../../CHANGELOG:1164 ../../../CHANGELOG:1308 -#: ../../../CHANGELOG:1340 ../../../CHANGELOG:1716 ../../../CHANGELOG:1781 -#: ../../../CHANGELOG:2106 ../../../CHANGELOG:2155 ../../../CHANGELOG:2375 -#: ../../../CHANGELOG:2426 ../../../CHANGELOG:2447 +#: ../../../CHANGELOG.md:46 ../../../CHANGELOG.md:285 ../../../CHANGELOG.md:324 +#: ../../../CHANGELOG.md:379 ../../../CHANGELOG.md:402 +#: ../../../CHANGELOG.md:451 ../../../CHANGELOG.md:500 +#: ../../../CHANGELOG.md:541 ../../../CHANGELOG.md:597 +#: ../../../CHANGELOG.md:651 ../../../CHANGELOG.md:680 +#: ../../../CHANGELOG.md:877 ../../../CHANGELOG.md:883 +#: ../../../CHANGELOG.md:899 ../../../CHANGELOG.md:914 +#: ../../../CHANGELOG.md:931 ../../../CHANGELOG.md:1013 +#: ../../../CHANGELOG.md:1024 ../../../CHANGELOG.md:1083 +#: ../../../CHANGELOG.md:1105 ../../../CHANGELOG.md:1235 +#: ../../../CHANGELOG.md:1263 ../../../CHANGELOG.md:1626 +#: ../../../CHANGELOG.md:1684 ../../../CHANGELOG.md:1997 +#: ../../../CHANGELOG.md:2041 ../../../CHANGELOG.md:2245 +#: ../../../CHANGELOG.md:2288 ../../../CHANGELOG.md:2305 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html" msgstr "" -#: ../../../CHANGELOG:45 +#: ../../../CHANGELOG.md:48 msgid "Update instructions:" msgstr "" -#: ../../../CHANGELOG:47 +#: ../../../CHANGELOG.md:50 msgid "" "If you are running the docker deployment, make sure to update our compose" " file. In this small example we show you how to save the old config and " "update it correctly:" msgstr "" -#: ../../../CHANGELOG:51 +#: ../../../CHANGELOG.md:62 msgid "" -"``` export FUNKWHALE_VERSION=\"1.3.0\" cd /srv/funkwhale docker-compose " -"down mv docker-compose.yml docker-compose.bak curl -L -o /srv/funkwhale" -"/docker-compose.yml " -"\"https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy" -"/docker-compose.yml\" ```" +".. note:: If you need to customize your nginx template, e.g. to work " +"around `problems with Docker's resolver " +"<https://docs.funkwhale.audio/admin/external-storages.html#no-resolver-" +"found>`_, you can mount your custom nginx configuration into the " +"container. Uncomment the commented volumes in the `nginx` section of your" +" `docker-compose.yml`. Additionally you need to update the paths in " +"`nginx/funkwhale.template`. Replace all occurrences of `/funkwhale` by " +"`/usr/share/nginx/html`. This loads the templates from your `nginx` " +"folder and overrides the template files in the Docker container." msgstr "" -#: ../../../CHANGELOG:60 -msgid "" -"If you need to customize your nginx template, e.g. to work around " -"`problems with Docker's resolver <https://docs.funkwhale.audio/admin" -"/external-storages.html#no-resolver-found>`_, you can mount your custom " -"nginx configuration into the container. Uncomment the commented volumes " -"in the `nginx` section of your `docker-compose.yml`. Additionally you " -"need to update the paths in `nginx/funkwhale.template`. Replace all " -"occurrences of `/funkwhale` by `/usr/share/nginx/html`. This loads the " -"templates from your `nginx` folder and overrides the template files in " -"the Docker container." -msgstr "" - -#: ../../../CHANGELOG:67 -msgid "``` docker-compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:71 +#: ../../../CHANGELOG.md:76 msgid "" "The Docker instructions now use the updated Docker compose plugin. If you" " previously used the ``docker-compose`` standalone installation, do the " "following while upgrading:" msgstr "" -#: ../../../CHANGELOG:73 +#: ../../../CHANGELOG.md:78 msgid "" -"Download the `Docker compose plugin " -"<https://docs.docker.com/compose/install/linux/#install-using-the-" -"repository>`_" +"The Docker instructions now use the updated Docker compose plugin. If you" +" previously used the `docker-compose` standalone installation, do the " +"following while upgrading:" msgstr "" -#: ../../../CHANGELOG:74 +#: ../../../CHANGELOG.md:80 +msgid "" +"Download the [Docker compose " +"plugin](https://docs.docker.com/compose/install/linux/#install-using-the-" +"repository)" +msgstr "" + +#: ../../../CHANGELOG.md:81 msgid "Stop your containers using the **docker-compose** syntax." msgstr "" -#: ../../../CHANGELOG:76 -msgid "```sh sudo docker-compose down ```" -msgstr "" - -#: ../../../CHANGELOG:80 +#: ../../../CHANGELOG.md:87 msgid "Bring the containers back up using the **docker compose** syntax." msgstr "" -#: ../../../CHANGELOG:82 -msgid "```sh sudo docker compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:86 +#: ../../../CHANGELOG.md:93 msgid "" "After this you can continue to use the **docker compose** syntax for all " "Docker management tasks." msgstr "" -#: ../../../CHANGELOG:87 +#: ../../../CHANGELOG.md:95 msgid "" "Upgrade Postgres to version 15. [Make sure to " "migrate!](https://docs.funkwhale.audio/administrator_documentation/upgrade_docs/docker.html" "#upgrade-the-postgres-container)" msgstr "" -#: ../../../CHANGELOG:88 +#: ../../../CHANGELOG.md:96 msgid "" "With this update Funkwhale starts using poetry to maintain its " "dependencies. We therefore recommend removing the old virtualenv by " "running `rm -rf /srv/funkwhale/virtualenv`." msgstr "" -#: ../../../CHANGELOG:92 ../../../CHANGELOG:329 ../../../CHANGELOG:724 -#: ../../../CHANGELOG:1224 ../../../CHANGELOG:1344 ../../../CHANGELOG:1585 -#: ../../../CHANGELOG:2010 ../../../CHANGELOG:2263 ../../../CHANGELOG:2761 -#: ../../../CHANGELOG:2857 ../../../CHANGELOG:3075 ../../../CHANGELOG:3150 -#: ../../../CHANGELOG:3383 ../../../CHANGELOG:3675 ../../../CHANGELOG:3879 -#: ../../../CHANGELOG:4000 ../../../CHANGELOG:4147 ../../../CHANGELOG:4246 -#: ../../../CHANGELOG:4338 ../../../CHANGELOG:4411 ../../../CHANGELOG:4494 -#: ../../../CHANGELOG:4524 ../../../CHANGELOG:4545 ../../../CHANGELOG:4636 -#: ../../../CHANGELOG:4649 ../../../CHANGELOG:4805 ../../../CHANGELOG:4824 +#: ../../../CHANGELOG.md:99 ../../../CHANGELOG.md:326 ../../../CHANGELOG.md:696 +#: ../../../CHANGELOG.md:1158 ../../../CHANGELOG.md:1265 +#: ../../../CHANGELOG.md:1496 ../../../CHANGELOG.md:1905 +#: ../../../CHANGELOG.md:2136 ../../../CHANGELOG.md:2613 +#: ../../../CHANGELOG.md:2702 ../../../CHANGELOG.md:2918 +#: ../../../CHANGELOG.md:2991 ../../../CHANGELOG.md:3213 +#: ../../../CHANGELOG.md:3486 ../../../CHANGELOG.md:3684 +#: ../../../CHANGELOG.md:3794 ../../../CHANGELOG.md:3940 +#: ../../../CHANGELOG.md:4029 ../../../CHANGELOG.md:4120 +#: ../../../CHANGELOG.md:4188 ../../../CHANGELOG.md:4264 +#: ../../../CHANGELOG.md:4290 ../../../CHANGELOG.md:4307 +#: ../../../CHANGELOG.md:4394 ../../../CHANGELOG.md:4405 +#: ../../../CHANGELOG.md:4536 ../../../CHANGELOG.md:4553 msgid "Features:" msgstr "" -#: ../../../CHANGELOG:94 +#: ../../../CHANGELOG.md:101 msgid "Add a management command to create a new library for a user" msgstr "" -#: ../../../CHANGELOG:95 +#: ../../../CHANGELOG.md:102 msgid "Add Gitpod configuration and guide" msgstr "" -#: ../../../CHANGELOG:96 +#: ../../../CHANGELOG.md:103 msgid "Add Sentry SDK to collect #1479" msgstr "" -#: ../../../CHANGELOG:97 +#: ../../../CHANGELOG.md:104 msgid "Prepare API for the upcoming version 2" msgstr "" -#: ../../../CHANGELOG:98 +#: ../../../CHANGELOG.md:105 msgid "Rewrite player to be based on Web Audio API" msgstr "" -#: ../../../CHANGELOG:103 +#: ../../../CHANGELOG.md:109 msgid "Add a celery task to scan remote library (#1712)" msgstr "" -#: ../../../CHANGELOG:104 +#: ../../../CHANGELOG.md:110 msgid "Add coverage report for Frontend Tests" msgstr "" -#: ../../../CHANGELOG:105 +#: ../../../CHANGELOG.md:111 msgid "Add hint which serializer is used for OembedView (#1901)" msgstr "" -#: ../../../CHANGELOG:106 +#: ../../../CHANGELOG.md:112 msgid "Add music visualizer (#1135)" msgstr "" -#: ../../../CHANGELOG:107 +#: ../../../CHANGELOG.md:113 msgid "Add playlists radio to search page (#1968)" msgstr "" -#: ../../../CHANGELOG:108 +#: ../../../CHANGELOG.md:114 msgid "Add proper serialization for TextPreviewView (#1903)" msgstr "" -#: ../../../CHANGELOG:109 +#: ../../../CHANGELOG.md:115 msgid "Add Serializer for SpaManifest endpoint" msgstr "" -#: ../../../CHANGELOG:110 +#: ../../../CHANGELOG.md:116 msgid "Add support for python 3.11" msgstr "" -#: ../../../CHANGELOG:111 +#: ../../../CHANGELOG.md:117 msgid "Added proper serializers for the rate-limit endpoint." msgstr "" -#: ../../../CHANGELOG:112 +#: ../../../CHANGELOG.md:118 msgid "Added type hints to the API." msgstr "" -#: ../../../CHANGELOG:113 +#: ../../../CHANGELOG.md:119 msgid "" "All administrator documentation has been rewritten to improve clarity and" " update outdated information." msgstr "" -#: ../../../CHANGELOG:114 +#: ../../../CHANGELOG.md:120 msgid "Allow arbitrary length names for artists, albums and tracks" msgstr "" -#: ../../../CHANGELOG:115 +#: ../../../CHANGELOG.md:121 msgid "Allow installing the funkwhale_api package" msgstr "" -#: ../../../CHANGELOG:116 +#: ../../../CHANGELOG.md:122 msgid "Allow using default browser dark mode and update UI dynamically on change" msgstr "" -#: ../../../CHANGELOG:117 +#: ../../../CHANGELOG.md:123 msgid "Apply migrations on API container start (!1879)" msgstr "" -#: ../../../CHANGELOG:118 +#: ../../../CHANGELOG.md:124 msgid "Automatically fetch next page of tracks (#1526)" msgstr "" -#: ../../../CHANGELOG:119 +#: ../../../CHANGELOG.md:125 msgid "Build frontend natively for cross-arch docker images" msgstr "" -#: ../../../CHANGELOG:120 ../../../CHANGELOG:566 +#: ../../../CHANGELOG.md:126 ../../../CHANGELOG.md:546 msgid "" "Change unmaintained PyMemoize library to django-cache-memoize to enable " "Python 3.10 support" msgstr "" -#: ../../../CHANGELOG:122 +#: ../../../CHANGELOG.md:128 msgid "Cleaned up frontend docker container" msgstr "" -#: ../../../CHANGELOG:123 +#: ../../../CHANGELOG.md:129 msgid "Cleanup Gitlab CI and Dockerfiles (!1796)" msgstr "" -#: ../../../CHANGELOG:124 +#: ../../../CHANGELOG.md:130 msgid "Create the funkwhale-manage entrypoint in the api package" msgstr "" -#: ../../../CHANGELOG:125 +#: ../../../CHANGELOG.md:131 msgid "Created migration guide for the deprecated all-in-one docker container." msgstr "" -#: ../../../CHANGELOG:126 +#: ../../../CHANGELOG.md:132 msgid "Don't buffer python stdout/err in docker" msgstr "" -#: ../../../CHANGELOG:127 +#: ../../../CHANGELOG.md:133 msgid "Don't compile python byte code in docker" msgstr "" -#: ../../../CHANGELOG:128 +#: ../../../CHANGELOG.md:134 msgid "Don't use poetry in production deployments" msgstr "" -#: ../../../CHANGELOG:129 +#: ../../../CHANGELOG.md:135 msgid "Drop direct dependency on pyopenssl (#1975)" msgstr "" -#: ../../../CHANGELOG:130 +#: ../../../CHANGELOG.md:136 msgid "" "Exclude /api/v1/oauth/authorize from the specs since its not supported " "yet (#1899)" msgstr "" -#: ../../../CHANGELOG:131 +#: ../../../CHANGELOG.md:137 msgid "Fix openapi specs for user endpoints (#1892, #1894)" msgstr "" -#: ../../../CHANGELOG:132 +#: ../../../CHANGELOG.md:138 msgid "Fix Serializer for inline channel artists (#1833)" msgstr "" -#: ../../../CHANGELOG:133 +#: ../../../CHANGELOG.md:139 msgid "Fix specs for ListenViewSet (#1898)" msgstr "" -#: ../../../CHANGELOG:134 +#: ../../../CHANGELOG.md:140 msgid "" "Handle PWA correctly and provide better cache strategy for album covers " "(#1721)" msgstr "" -#: ../../../CHANGELOG:135 +#: ../../../CHANGELOG.md:141 msgid "Improve docker caching" msgstr "" -#: ../../../CHANGELOG:136 +#: ../../../CHANGELOG.md:142 msgid "Improve specification of LibraryFollowViewSet (#1896)" msgstr "" -#: ../../../CHANGELOG:137 +#: ../../../CHANGELOG.md:143 msgid "Install API python package in docker image" msgstr "" -#: ../../../CHANGELOG:138 +#: ../../../CHANGELOG.md:144 msgid "Make CI always run all tests on protected branches." msgstr "" -#: ../../../CHANGELOG:139 +#: ../../../CHANGELOG.md:145 msgid "Make mutations endpoint appear in openapi specs" msgstr "" -#: ../../../CHANGELOG:140 +#: ../../../CHANGELOG.md:146 msgid "Make Python 3.10 tests in CI mandatory" msgstr "" -#: ../../../CHANGELOG:141 +#: ../../../CHANGELOG.md:147 msgid "Make sure ChannelViewSet always has a serializer (#1895)" msgstr "" -#: ../../../CHANGELOG:142 +#: ../../../CHANGELOG.md:148 msgid "Migrate to new queue system from old localStorage keys" msgstr "" -#: ../../../CHANGELOG:143 +#: ../../../CHANGELOG.md:149 msgid "Migrate to Vue 3" msgstr "" -#: ../../../CHANGELOG:144 +#: ../../../CHANGELOG.md:150 msgid "Migrate to vue-i18n (#1831) Fix locale changing (#1862)" msgstr "" -#: ../../../CHANGELOG:146 +#: ../../../CHANGELOG.md:152 msgid "Migrated to sphinx-design." msgstr "" -#: ../../../CHANGELOG:147 +#: ../../../CHANGELOG.md:153 msgid "" "New task checking if remote instance is reachable to avoid playback " "latence (#1711)" msgstr "" -#: ../../../CHANGELOG:148 +#: ../../../CHANGELOG.md:154 msgid "" "OAuth Application client secrets are now hashed before storing them to " "the DB. Those are only displayed once from now on!" msgstr "" -#: ../../../CHANGELOG:149 ../../../CHANGELOG:467 +#: ../../../CHANGELOG.md:155 ../../../CHANGELOG.md:455 msgid "Parameterize the default S3 ACL when uploading objects. (#1319)" msgstr "" -#: ../../../CHANGELOG:150 +#: ../../../CHANGELOG.md:156 msgid "" "Pin Alpine package versions in API Dockerfile (fixes part of CI build " "issues)." msgstr "" -#: ../../../CHANGELOG:151 +#: ../../../CHANGELOG.md:157 msgid "Prefer using the funkwhale-manage entrypoint" msgstr "" -#: ../../../CHANGELOG:152 +#: ../../../CHANGELOG.md:158 msgid "Prevent running two pipelines for MRs" msgstr "" -#: ../../../CHANGELOG:153 +#: ../../../CHANGELOG.md:159 msgid "" "Random and less listened radio filter out un-owned content on library " "section (#2007)" msgstr "" -#: ../../../CHANGELOG:154 +#: ../../../CHANGELOG.md:160 msgid "Refactor node info endpoint to use proper serializers" msgstr "" -#: ../../../CHANGELOG:155 +#: ../../../CHANGELOG.md:161 msgid "Refactor SettingsView to use a proper serializer" msgstr "" -#: ../../../CHANGELOG:156 +#: ../../../CHANGELOG.md:162 msgid "Remove unnecessary or wrong `is` keyword usage from backend" msgstr "" -#: ../../../CHANGELOG:157 +#: ../../../CHANGELOG.md:163 msgid "Rename OpenAPI schema's operation ids for nicer API client method names." msgstr "" -#: ../../../CHANGELOG:158 +#: ../../../CHANGELOG.md:164 msgid "" "Replace django-channels package with web socket implementation from " "@vueuse/core (#1715)" msgstr "" -#: ../../../CHANGELOG:159 +#: ../../../CHANGELOG.md:165 msgid "Rewrite embedded player to petite-vue" msgstr "" -#: ../../../CHANGELOG:160 +#: ../../../CHANGELOG.md:166 msgid "Split DATABASE_URL into multiple configuration variables" msgstr "" -#: ../../../CHANGELOG:161 +#: ../../../CHANGELOG.md:167 msgid "The ListenBrainz plugin submits the track duration" msgstr "" -#: ../../../CHANGELOG:162 +#: ../../../CHANGELOG.md:168 msgid "Update Django OAuth Toolkit to version 2, ref #1944" msgstr "" -#: ../../../CHANGELOG:163 +#: ../../../CHANGELOG.md:169 msgid "Update migration after django update (#1815)" msgstr "" -#: ../../../CHANGELOG:164 +#: ../../../CHANGELOG.md:170 msgid "Update upload status when import fails (#1999)" msgstr "" -#: ../../../CHANGELOG:165 +#: ../../../CHANGELOG.md:171 msgid "Updated the installation guides to make installation steps clearer." msgstr "" -#: ../../../CHANGELOG:166 +#: ../../../CHANGELOG.md:172 msgid "Upgrade docker base image to alpine 3.17" msgstr "" -#: ../../../CHANGELOG:167 +#: ../../../CHANGELOG.md:173 msgid "Use proper serializer for Search endpoint (#1902)" msgstr "" -#: ../../../CHANGELOG:170 +#: ../../../CHANGELOG.md:175 msgid "Refactoring:" msgstr "" -#: ../../../CHANGELOG:172 +#: ../../../CHANGELOG.md:177 msgid "" "Instead of requesting the right spa content from the API using a " "middleware we now serve the Frontend directly with nginx and only proxy-" "forward for API endpoints" msgstr "" -#: ../../../CHANGELOG:174 +#: ../../../CHANGELOG.md:179 msgid "Replace django-rest-auth with dj-rest-auth (#1877)" msgstr "" -#: ../../../CHANGELOG:179 +#: ../../../CHANGELOG.md:183 msgid "Allow enabling systemd funkwhale.target" msgstr "" -#: ../../../CHANGELOG:180 +#: ../../../CHANGELOG.md:184 msgid "Allow playback of media from external frontend (#1937)." msgstr "" -#: ../../../CHANGELOG:181 +#: ../../../CHANGELOG.md:185 msgid "Channel overview was displaying foreign tracks (#1773) (1773)" msgstr "" -#: ../../../CHANGELOG:182 +#: ../../../CHANGELOG.md:186 msgid "Fix adding same track multiple times (#1933)" msgstr "" -#: ../../../CHANGELOG:183 +#: ../../../CHANGELOG.md:187 msgid "Fix changing visualizer CORS error (#1934)." msgstr "" -#: ../../../CHANGELOG:184 +#: ../../../CHANGELOG.md:188 msgid "" "Fix content form autofocus despite `autofocus` prop being set to `false` " "(#1924)" msgstr "" -#: ../../../CHANGELOG:185 +#: ../../../CHANGELOG.md:189 msgid "Fix CSP header issues" msgstr "" -#: ../../../CHANGELOG:186 +#: ../../../CHANGELOG.md:190 msgid "Fix CSP issue caused by django-channels package (#1752)" msgstr "" -#: ../../../CHANGELOG:187 +#: ../../../CHANGELOG.md:191 msgid "" "Fix docker API image building with removing autobahn workaround version " "pin" msgstr "" -#: ../../../CHANGELOG:188 +#: ../../../CHANGELOG.md:192 msgid "Fix docker builds on armv7" msgstr "" -#: ../../../CHANGELOG:189 +#: ../../../CHANGELOG.md:193 msgid "Fix docker nginx entrypoint" msgstr "" -#: ../../../CHANGELOG:190 +#: ../../../CHANGELOG.md:194 msgid "Fix editing playlist tracks (#1362)" msgstr "" -#: ../../../CHANGELOG:191 +#: ../../../CHANGELOG.md:195 msgid "Fix embedded player not working on social posts (1946)" msgstr "" -#: ../../../CHANGELOG:192 +#: ../../../CHANGELOG.md:196 msgid "Fix favorite button in queue" msgstr "" -#: ../../../CHANGELOG:193 +#: ../../../CHANGELOG.md:197 msgid "Fix fetching pages of albums in album detail view (#1927)" msgstr "" -#: ../../../CHANGELOG:194 +#: ../../../CHANGELOG.md:198 msgid "Fix global keyboard shortcuts firing when input is focused (#1876)" msgstr "" -#: ../../../CHANGELOG:195 +#: ../../../CHANGELOG.md:199 msgid "Fix OAuth login (#1890)" msgstr "" -#: ../../../CHANGELOG:196 +#: ../../../CHANGELOG.md:200 msgid "Fix play button in albums with multi-page volumes (#1928)" msgstr "" -#: ../../../CHANGELOG:197 +#: ../../../CHANGELOG.md:201 msgid "Fix player closing when queue ends (#1931)" msgstr "" -#: ../../../CHANGELOG:198 +#: ../../../CHANGELOG.md:202 msgid "Fix purging of dangling files #1929" msgstr "" -#: ../../../CHANGELOG:199 +#: ../../../CHANGELOG.md:203 msgid "Fix remote search (#1857)" msgstr "" -#: ../../../CHANGELOG:200 +#: ../../../CHANGELOG.md:204 msgid "Fix search by text in affected views (#1858)" msgstr "" -#: ../../../CHANGELOG:201 +#: ../../../CHANGELOG.md:205 msgid "Fix timeout on spa manifest requests" msgstr "" -#: ../../../CHANGELOG:202 +#: ../../../CHANGELOG.md:206 msgid "" "Fix track table showing all tracks and double pagination in some cases " "(#1923)" msgstr "" -#: ../../../CHANGELOG:203 +#: ../../../CHANGELOG.md:207 msgid "Fix user requests and reports filtering (#1924)" msgstr "" -#: ../../../CHANGELOG:204 +#: ../../../CHANGELOG.md:208 msgid "Fix validity issues in openapi/swagger spec files (#1171)" msgstr "" -#: ../../../CHANGELOG:205 +#: ../../../CHANGELOG.md:209 msgid "" "Fixed an issue which caused links in Markdown forms to not render " "correctly. (#2023)" msgstr "" -#: ../../../CHANGELOG:206 +#: ../../../CHANGELOG.md:210 msgid "Fixed login redirect (1736)" msgstr "" -#: ../../../CHANGELOG:207 +#: ../../../CHANGELOG.md:211 msgid "Fixed remote subscription form in Podcast and search views (#1708)" msgstr "" -#: ../../../CHANGELOG:208 +#: ../../../CHANGELOG.md:212 msgid "Fixed upload form VUE errors (#1738) (1738)" msgstr "" -#: ../../../CHANGELOG:209 ../../../CHANGELOG:473 +#: ../../../CHANGELOG.md:213 ../../../CHANGELOG.md:460 msgid "Fixes channel page (#1729) (1729)" msgstr "" -#: ../../../CHANGELOG:210 +#: ../../../CHANGELOG.md:214 msgid "Fixes development environment set-up with docker (1726)" msgstr "" -#: ../../../CHANGELOG:211 +#: ../../../CHANGELOG.md:215 msgid "Fixes embed player (#1783) (1783)" msgstr "" -#: ../../../CHANGELOG:212 +#: ../../../CHANGELOG.md:216 msgid "Fixes service worker (#1634)" msgstr "" -#: ../../../CHANGELOG:213 +#: ../../../CHANGELOG.md:217 msgid "Fixes track listenings not being sent when tab is not focused" msgstr "" -#: ../../../CHANGELOG:214 +#: ../../../CHANGELOG.md:218 msgid "Hide create custom radio to un-authenticated users (#1720)" msgstr "" -#: ../../../CHANGELOG:215 +#: ../../../CHANGELOG.md:219 msgid "Remove trailing slash from reverse proxy configuration" msgstr "" -#: ../../../CHANGELOG:216 +#: ../../../CHANGELOG.md:220 msgid "Remove unused Footer component (#1660)" msgstr "" -#: ../../../CHANGELOG:217 +#: ../../../CHANGELOG.md:221 msgid "Remove usage of deprecated Model and Serializer fields (#1663)" msgstr "" -#: ../../../CHANGELOG:218 +#: ../../../CHANGELOG.md:222 msgid "" "Skip refreshing local actors in celery federation.refresh_actor_data task" " - fixes disappearing avatars (!1873)" msgstr "" -#: ../../../CHANGELOG:221 ../../../CHANGELOG:527 ../../../CHANGELOG:774 -#: ../../../CHANGELOG:1273 ../../../CHANGELOG:1760 ../../../CHANGELOG:2337 -#: ../../../CHANGELOG:2417 ../../../CHANGELOG:2554 ../../../CHANGELOG:2838 -#: ../../../CHANGELOG:2888 ../../../CHANGELOG:3196 ../../../CHANGELOG:3409 -#: ../../../CHANGELOG:3484 ../../../CHANGELOG:3608 ../../../CHANGELOG:3721 -#: ../../../CHANGELOG:4018 ../../../CHANGELOG:4177 ../../../CHANGELOG:4275 -#: ../../../CHANGELOG:4441 ../../../CHANGELOG:4515 +#: ../../../CHANGELOG.md:224 ../../../CHANGELOG.md:510 +#: ../../../CHANGELOG.md:743 ../../../CHANGELOG.md:1203 +#: ../../../CHANGELOG.md:1666 ../../../CHANGELOG.md:2208 +#: ../../../CHANGELOG.md:2281 ../../../CHANGELOG.md:2415 +#: ../../../CHANGELOG.md:2687 ../../../CHANGELOG.md:2731 +#: ../../../CHANGELOG.md:3034 ../../../CHANGELOG.md:3236 +#: ../../../CHANGELOG.md:3304 ../../../CHANGELOG.md:3421 +#: ../../../CHANGELOG.md:3530 ../../../CHANGELOG.md:3809 +#: ../../../CHANGELOG.md:3968 ../../../CHANGELOG.md:4055 +#: ../../../CHANGELOG.md:4215 ../../../CHANGELOG.md:4283 msgid "Documentation:" msgstr "" -#: ../../../CHANGELOG:223 +#: ../../../CHANGELOG.md:226 msgid "Add ability to translate documentation into multiple languages" msgstr "" -#: ../../../CHANGELOG:224 +#: ../../../CHANGELOG.md:227 msgid "Add restore instructions to backup docs (#1627)." msgstr "" -#: ../../../CHANGELOG:225 +#: ../../../CHANGELOG.md:228 msgid "Added virtualenv upgrade instructions for Debian (#1562)." msgstr "" -#: ../../../CHANGELOG:226 +#: ../../../CHANGELOG.md:229 msgid "Cleaned up documentation" msgstr "" -#: ../../../CHANGELOG:227 +#: ../../../CHANGELOG.md:230 msgid "Document the new login flow of the CLI-tool (#1800)" msgstr "" -#: ../../../CHANGELOG:228 +#: ../../../CHANGELOG.md:231 msgid "Documented LOGLEVEL command (#1541)." msgstr "" -#: ../../../CHANGELOG:229 +#: ../../../CHANGELOG.md:232 msgid "Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624)." msgstr "" -#: ../../../CHANGELOG:230 +#: ../../../CHANGELOG.md:233 msgid "Harden security for debian install docs" msgstr "" -#: ../../../CHANGELOG:231 +#: ../../../CHANGELOG.md:234 msgid "Rewrote documentation contributor guide." msgstr "" -#: ../../../CHANGELOG:232 +#: ../../../CHANGELOG.md:235 msgid "Rewrote the architecture file (#1908)" msgstr "" -#: ../../../CHANGELOG:233 +#: ../../../CHANGELOG.md:236 msgid "Rewrote the federation developer documentation (#1911)" msgstr "" -#: ../../../CHANGELOG:234 +#: ../../../CHANGELOG.md:237 msgid "Rewrote the plugins documentation (#1910)" msgstr "" -#: ../../../CHANGELOG:235 +#: ../../../CHANGELOG.md:238 msgid "Rewrote translators file" msgstr "" -#: ../../../CHANGELOG:236 +#: ../../../CHANGELOG.md:239 msgid "Updated API developer documentation (#1912, #1909)" msgstr "" -#: ../../../CHANGELOG:237 +#: ../../../CHANGELOG.md:240 msgid "" "Updated CONTRIBUTING guide with up-to-date documentation. Created layout " "in documentation hub." msgstr "" -#: ../../../CHANGELOG:240 ../../../CHANGELOG:423 ../../../CHANGELOG:784 -#: ../../../CHANGELOG:2893 ../../../CHANGELOG:3489 ../../../CHANGELOG:3727 -#: ../../../CHANGELOG:4536 ../../../CHANGELOG:4666 +#: ../../../CHANGELOG.md:242 ../../../CHANGELOG.md:413 +#: ../../../CHANGELOG.md:752 ../../../CHANGELOG.md:2735 +#: ../../../CHANGELOG.md:3308 ../../../CHANGELOG.md:3535 +#: ../../../CHANGELOG.md:4300 ../../../CHANGELOG.md:4420 msgid "Other:" msgstr "" -#: ../../../CHANGELOG:242 +#: ../../../CHANGELOG.md:244 msgid "Add a CI job to check if changelog snippet is available" msgstr "" -#: ../../../CHANGELOG:243 +#: ../../../CHANGELOG.md:245 msgid "Add CI broken links checker" msgstr "" -#: ../../../CHANGELOG:244 +#: ../../../CHANGELOG.md:246 msgid "Add pre-commit hooks" msgstr "" -#: ../../../CHANGELOG:246 +#: ../../../CHANGELOG.md:248 msgid "flake8" msgstr "" -#: ../../../CHANGELOG:247 +#: ../../../CHANGELOG.md:249 msgid "black" msgstr "" -#: ../../../CHANGELOG:248 +#: ../../../CHANGELOG.md:250 msgid "isort" msgstr "" -#: ../../../CHANGELOG:249 +#: ../../../CHANGELOG.md:251 msgid "pyupgrade" msgstr "" -#: ../../../CHANGELOG:250 +#: ../../../CHANGELOG.md:252 msgid "prettier" msgstr "" -#: ../../../CHANGELOG:251 +#: ../../../CHANGELOG.md:253 msgid "codespell" msgstr "" -#: ../../../CHANGELOG:252 +#: ../../../CHANGELOG.md:255 msgid "Add pre-commit to development tools" msgstr "" -#: ../../../CHANGELOG:253 +#: ../../../CHANGELOG.md:256 msgid "Align the openapi spec to the actual API wherever possible" msgstr "" -#: ../../../CHANGELOG:254 +#: ../../../CHANGELOG.md:257 msgid "Cache lychee checked urls for 1 day in CI" msgstr "" -#: ../../../CHANGELOG:255 +#: ../../../CHANGELOG.md:258 msgid "Fix api tests warnings by renaming fixtures" msgstr "" -#: ../../../CHANGELOG:256 +#: ../../../CHANGELOG.md:259 msgid "Fix permissions for build artifacts" msgstr "" -#: ../../../CHANGELOG:257 +#: ../../../CHANGELOG.md:260 msgid "Fix shell scripts lint errors" msgstr "" -#: ../../../CHANGELOG:258 +#: ../../../CHANGELOG.md:261 msgid "Format api pyproject.toml" msgstr "" -#: ../../../CHANGELOG:259 +#: ../../../CHANGELOG.md:262 msgid "Format or fix files using pre-commit" msgstr "" -#: ../../../CHANGELOG:261 +#: ../../../CHANGELOG.md:264 msgid "Upgrade code to >=python3.7" msgstr "" -#: ../../../CHANGELOG:262 +#: ../../../CHANGELOG.md:265 msgid "Fix flake8 warnings" msgstr "" -#: ../../../CHANGELOG:263 +#: ../../../CHANGELOG.md:266 msgid "Fix spelling errors" msgstr "" -#: ../../../CHANGELOG:264 +#: ../../../CHANGELOG.md:267 msgid "Format files using black" msgstr "" -#: ../../../CHANGELOG:265 +#: ../../../CHANGELOG.md:268 msgid "Format files using isort" msgstr "" -#: ../../../CHANGELOG:266 +#: ../../../CHANGELOG.md:269 msgid "Format files using prettier" msgstr "" -#: ../../../CHANGELOG:267 +#: ../../../CHANGELOG.md:271 msgid "Move api tools config to pyproject.toml" msgstr "" -#: ../../../CHANGELOG:268 +#: ../../../CHANGELOG.md:272 msgid "Move database url composition from custom script to django settings" msgstr "" -#: ../../../CHANGELOG:269 +#: ../../../CHANGELOG.md:273 msgid "Remove docker_all_in_one_release ci job" msgstr "" -#: ../../../CHANGELOG:270 +#: ../../../CHANGELOG.md:274 msgid "Rename api composer/django/ dir to docker/" msgstr "" -#: ../../../CHANGELOG:271 +#: ../../../CHANGELOG.md:275 msgid "Unpin asgiref in API dependencies" msgstr "" -#: ../../../CHANGELOG:272 +#: ../../../CHANGELOG.md:276 msgid "Use vite for building the frontend, #1644" msgstr "" -#: ../../../CHANGELOG:275 +#: ../../../CHANGELOG.md:278 msgid "Removal:" msgstr "" -#: ../../../CHANGELOG:277 +#: ../../../CHANGELOG.md:280 msgid "" "This release removes support for Python 3.6. Please make sure you update " "your python version before Updating Funkwhale!" msgstr "" -#: ../../../CHANGELOG:282 +#: ../../../CHANGELOG.md:283 msgid "1.2.9 (2022-11-25)" msgstr "" -#: ../../../CHANGELOG:289 +#: ../../../CHANGELOG.md:289 msgid "Ensure index.html files get loaded with UTF-8 encoding" msgstr "" -#: ../../../CHANGELOG:290 +#: ../../../CHANGELOG.md:290 msgid "Fixed invitation reuse after the invited user has been deleted (#1952)" msgstr "" -#: ../../../CHANGELOG:291 +#: ../../../CHANGELOG.md:291 msgid "Fixed unplayable skipped upload (#1349)" msgstr "" -#: ../../../CHANGELOG:293 ../../../CHANGELOG:343 ../../../CHANGELOG:392 -#: ../../../CHANGELOG:427 ../../../CHANGELOG:475 ../../../CHANGELOG:550 -#: ../../../CHANGELOG:788 +#: ../../../CHANGELOG.md:293 ../../../CHANGELOG.md:339 +#: ../../../CHANGELOG.md:385 ../../../CHANGELOG.md:417 +#: ../../../CHANGELOG.md:462 ../../../CHANGELOG.md:533 +#: ../../../CHANGELOG.md:671 ../../../CHANGELOG.md:756 msgid "Committers:" msgstr "" -#: ../../../CHANGELOG:295 ../../../CHANGELOG:303 ../../../CHANGELOG:316 -#: ../../../CHANGELOG:346 ../../../CHANGELOG:356 ../../../CHANGELOG:375 -#: ../../../CHANGELOG:394 ../../../CHANGELOG:404 ../../../CHANGELOG:429 -#: ../../../CHANGELOG:438 ../../../CHANGELOG:455 ../../../CHANGELOG:477 -#: ../../../CHANGELOG:488 ../../../CHANGELOG:503 ../../../CHANGELOG:536 -#: ../../../CHANGELOG:545 ../../../CHANGELOG:552 ../../../CHANGELOG:585 -#: ../../../CHANGELOG:599 ../../../CHANGELOG:609 ../../../CHANGELOG:649 -#: ../../../CHANGELOG:660 ../../../CHANGELOG:667 ../../../CHANGELOG:695 -#: ../../../CHANGELOG:1126 +#: ../../../CHANGELOG.md:295 ../../../CHANGELOG.md:303 +#: ../../../CHANGELOG.md:316 ../../../CHANGELOG.md:342 +#: ../../../CHANGELOG.md:352 ../../../CHANGELOG.md:371 +#: ../../../CHANGELOG.md:387 ../../../CHANGELOG.md:397 +#: ../../../CHANGELOG.md:419 ../../../CHANGELOG.md:428 +#: ../../../CHANGELOG.md:445 ../../../CHANGELOG.md:464 +#: ../../../CHANGELOG.md:475 ../../../CHANGELOG.md:490 +#: ../../../CHANGELOG.md:519 ../../../CHANGELOG.md:528 +#: ../../../CHANGELOG.md:535 ../../../CHANGELOG.md:565 +#: ../../../CHANGELOG.md:579 ../../../CHANGELOG.md:589 +#: ../../../CHANGELOG.md:626 ../../../CHANGELOG.md:637 +#: ../../../CHANGELOG.md:644 ../../../CHANGELOG.md:661 +#: ../../../CHANGELOG.md:669 ../../../CHANGELOG.md:674 +#: ../../../CHANGELOG.md:781 ../../../CHANGELOG.md:826 +#: ../../../CHANGELOG.md:859 ../../../CHANGELOG.md:986 +#: ../../../CHANGELOG.md:1071 msgid "Georg Krause" msgstr "" -#: ../../../CHANGELOG:296 ../../../CHANGELOG:306 ../../../CHANGELOG:318 -#: ../../../CHANGELOG:347 ../../../CHANGELOG:360 ../../../CHANGELOG:378 -#: ../../../CHANGELOG:395 ../../../CHANGELOG:400 ../../../CHANGELOG:405 -#: ../../../CHANGELOG:430 ../../../CHANGELOG:439 ../../../CHANGELOG:456 -#: ../../../CHANGELOG:490 ../../../CHANGELOG:505 ../../../CHANGELOG:538 -#: ../../../CHANGELOG:547 ../../../CHANGELOG:553 ../../../CHANGELOG:588 -#: ../../../CHANGELOG:602 ../../../CHANGELOG:651 ../../../CHANGELOG:662 -#: ../../../CHANGELOG:670 +#: ../../../CHANGELOG.md:296 ../../../CHANGELOG.md:306 +#: ../../../CHANGELOG.md:318 ../../../CHANGELOG.md:343 +#: ../../../CHANGELOG.md:356 ../../../CHANGELOG.md:374 +#: ../../../CHANGELOG.md:388 ../../../CHANGELOG.md:393 +#: ../../../CHANGELOG.md:398 ../../../CHANGELOG.md:420 +#: ../../../CHANGELOG.md:429 ../../../CHANGELOG.md:446 +#: ../../../CHANGELOG.md:477 ../../../CHANGELOG.md:492 +#: ../../../CHANGELOG.md:521 ../../../CHANGELOG.md:530 +#: ../../../CHANGELOG.md:536 ../../../CHANGELOG.md:568 +#: ../../../CHANGELOG.md:582 ../../../CHANGELOG.md:628 +#: ../../../CHANGELOG.md:639 ../../../CHANGELOG.md:647 +#: ../../../CHANGELOG.md:793 ../../../CHANGELOG.md:832 +#: ../../../CHANGELOG.md:863 msgid "Marcos Peña" msgstr "" -#: ../../../CHANGELOG:297 ../../../CHANGELOG:319 ../../../CHANGELOG:1131 +#: ../../../CHANGELOG.md:297 ../../../CHANGELOG.md:319 +#: ../../../CHANGELOG.md:799 ../../../CHANGELOG.md:836 +#: ../../../CHANGELOG.md:867 ../../../CHANGELOG.md:998 +#: ../../../CHANGELOG.md:1076 msgid "Philipp Wolfer" msgstr "" -#: ../../../CHANGELOG:298 +#: ../../../CHANGELOG.md:298 msgid "Travis Briggs" msgstr "" -#: ../../../CHANGELOG:300 ../../../CHANGELOG:351 ../../../CHANGELOG:397 -#: ../../../CHANGELOG:434 ../../../CHANGELOG:482 ../../../CHANGELOG:531 -#: ../../../CHANGELOG:579 ../../../CHANGELOG:646 ../../../CHANGELOG:684 -#: ../../../CHANGELOG:848 +#: ../../../CHANGELOG.md:300 ../../../CHANGELOG.md:347 +#: ../../../CHANGELOG.md:390 ../../../CHANGELOG.md:424 +#: ../../../CHANGELOG.md:469 ../../../CHANGELOG.md:514 +#: ../../../CHANGELOG.md:559 ../../../CHANGELOG.md:623 +#: ../../../CHANGELOG.md:658 ../../../CHANGELOG.md:816 msgid "Contributors to our Issues:" msgstr "" -#: ../../../CHANGELOG:302 ../../../CHANGELOG:345 ../../../CHANGELOG:355 -#: ../../../CHANGELOG:374 ../../../CHANGELOG:399 ../../../CHANGELOG:442 -#: ../../../CHANGELOG:487 ../../../CHANGELOG:502 ../../../CHANGELOG:535 -#: ../../../CHANGELOG:584 ../../../CHANGELOG:598 ../../../CHANGELOG:648 -#: ../../../CHANGELOG:659 ../../../CHANGELOG:666 ../../../CHANGELOG:1123 -#: ../../../CHANGELOG:1158 ../../../CHANGELOG:1285 ../../../CHANGELOG:1334 -#: ../../../CHANGELOG:1391 ../../../CHANGELOG:1675 ../../../CHANGELOG:1767 -#: ../../../CHANGELOG:2077 ../../../CHANGELOG:2140 ../../../CHANGELOG:2347 +#: ../../../CHANGELOG.md:302 ../../../CHANGELOG.md:341 +#: ../../../CHANGELOG.md:351 ../../../CHANGELOG.md:370 +#: ../../../CHANGELOG.md:392 ../../../CHANGELOG.md:432 +#: ../../../CHANGELOG.md:474 ../../../CHANGELOG.md:489 +#: ../../../CHANGELOG.md:518 ../../../CHANGELOG.md:564 +#: ../../../CHANGELOG.md:578 ../../../CHANGELOG.md:625 +#: ../../../CHANGELOG.md:636 ../../../CHANGELOG.md:643 +#: ../../../CHANGELOG.md:660 ../../../CHANGELOG.md:768 +#: ../../../CHANGELOG.md:822 ../../../CHANGELOG.md:853 +#: ../../../CHANGELOG.md:976 ../../../CHANGELOG.md:1068 +#: ../../../CHANGELOG.md:1100 ../../../CHANGELOG.md:1214 +#: ../../../CHANGELOG.md:1259 ../../../CHANGELOG.md:1309 +#: ../../../CHANGELOG.md:1586 ../../../CHANGELOG.md:1672 +#: ../../../CHANGELOG.md:1970 ../../../CHANGELOG.md:2028 +#: ../../../CHANGELOG.md:2218 msgid "Ciarán Ainsworth" msgstr "" -#: ../../../CHANGELOG:304 ../../../CHANGELOG:317 ../../../CHANGELOG:357 -#: ../../../CHANGELOG:376 ../../../CHANGELOG:445 ../../../CHANGELOG:489 -#: ../../../CHANGELOG:504 ../../../CHANGELOG:537 ../../../CHANGELOG:546 -#: ../../../CHANGELOG:586 ../../../CHANGELOG:600 ../../../CHANGELOG:610 -#: ../../../CHANGELOG:650 ../../../CHANGELOG:661 ../../../CHANGELOG:668 +#: ../../../CHANGELOG.md:304 ../../../CHANGELOG.md:317 +#: ../../../CHANGELOG.md:353 ../../../CHANGELOG.md:372 +#: ../../../CHANGELOG.md:435 ../../../CHANGELOG.md:476 +#: ../../../CHANGELOG.md:491 ../../../CHANGELOG.md:520 +#: ../../../CHANGELOG.md:529 ../../../CHANGELOG.md:566 +#: ../../../CHANGELOG.md:580 ../../../CHANGELOG.md:590 +#: ../../../CHANGELOG.md:627 ../../../CHANGELOG.md:638 +#: ../../../CHANGELOG.md:645 ../../../CHANGELOG.md:675 +#: ../../../CHANGELOG.md:788 ../../../CHANGELOG.md:829 +#: ../../../CHANGELOG.md:861 msgid "JuniorJPDJ" msgstr "" -#: ../../../CHANGELOG:305 ../../../CHANGELOG:358 ../../../CHANGELOG:377 -#: ../../../CHANGELOG:587 ../../../CHANGELOG:601 +#: ../../../CHANGELOG.md:305 ../../../CHANGELOG.md:354 +#: ../../../CHANGELOG.md:373 ../../../CHANGELOG.md:567 +#: ../../../CHANGELOG.md:581 ../../../CHANGELOG.md:862 msgid "Kasper Seweryn" msgstr "" -#: ../../../CHANGELOG:307 ../../../CHANGELOG:491 ../../../CHANGELOG:539 -#: ../../../CHANGELOG:589 ../../../CHANGELOG:652 +#: ../../../CHANGELOG.md:307 ../../../CHANGELOG.md:478 +#: ../../../CHANGELOG.md:522 ../../../CHANGELOG.md:569 +#: ../../../CHANGELOG.md:629 ../../../CHANGELOG.md:663 +#: ../../../CHANGELOG.md:834 ../../../CHANGELOG.md:864 msgid "Mathieu Jourdan" msgstr "" -#: ../../../CHANGELOG:308 ../../../CHANGELOG:362 ../../../CHANGELOG:441 -#: ../../../CHANGELOG:493 ../../../CHANGELOG:540 ../../../CHANGELOG:591 -#: ../../../CHANGELOG:653 +#: ../../../CHANGELOG.md:308 ../../../CHANGELOG.md:358 +#: ../../../CHANGELOG.md:431 ../../../CHANGELOG.md:480 +#: ../../../CHANGELOG.md:523 ../../../CHANGELOG.md:571 +#: ../../../CHANGELOG.md:630 ../../../CHANGELOG.md:664 +#: ../../../CHANGELOG.md:796 ../../../CHANGELOG.md:835 +#: ../../../CHANGELOG.md:866 msgid "Micha Gläß-Stöcker" msgstr "" -#: ../../../CHANGELOG:309 ../../../CHANGELOG:320 +#: ../../../CHANGELOG.md:309 ../../../CHANGELOG.md:320 msgid "fuomag9" msgstr "" -#: ../../../CHANGELOG:310 +#: ../../../CHANGELOG.md:310 msgid "gammelalf" msgstr "" -#: ../../../CHANGELOG:311 +#: ../../../CHANGELOG.md:311 msgid "myOmikron" msgstr "" -#: ../../../CHANGELOG:312 ../../../CHANGELOG:369 ../../../CHANGELOG:497 -#: ../../../CHANGELOG:509 ../../../CHANGELOG:541 ../../../CHANGELOG:548 -#: ../../../CHANGELOG:594 ../../../CHANGELOG:604 ../../../CHANGELOG:655 +#: ../../../CHANGELOG.md:312 ../../../CHANGELOG.md:365 +#: ../../../CHANGELOG.md:484 ../../../CHANGELOG.md:496 +#: ../../../CHANGELOG.md:524 ../../../CHANGELOG.md:531 +#: ../../../CHANGELOG.md:574 ../../../CHANGELOG.md:584 +#: ../../../CHANGELOG.md:632 ../../../CHANGELOG.md:665 +#: ../../../CHANGELOG.md:797 ../../../CHANGELOG.md:846 +#: ../../../CHANGELOG.md:872 msgid "petitminion" msgstr "" -#: ../../../CHANGELOG:314 ../../../CHANGELOG:372 ../../../CHANGELOG:402 -#: ../../../CHANGELOG:452 ../../../CHANGELOG:500 ../../../CHANGELOG:543 -#: ../../../CHANGELOG:596 ../../../CHANGELOG:657 ../../../CHANGELOG:693 -#: ../../../CHANGELOG:881 +#: ../../../CHANGELOG.md:314 ../../../CHANGELOG.md:368 +#: ../../../CHANGELOG.md:395 ../../../CHANGELOG.md:442 +#: ../../../CHANGELOG.md:487 ../../../CHANGELOG.md:526 +#: ../../../CHANGELOG.md:576 ../../../CHANGELOG.md:634 +#: ../../../CHANGELOG.md:667 ../../../CHANGELOG.md:849 msgid "Contributors to our Merge Requests:" msgstr "" -#: ../../../CHANGELOG:324 +#: ../../../CHANGELOG.md:322 msgid "1.2.8 (2022-09-12)" msgstr "" -#: ../../../CHANGELOG:331 +#: ../../../CHANGELOG.md:328 msgid "Add Sentry SDK to collect errors at the backend" msgstr "" -#: ../../../CHANGELOG:336 +#: ../../../CHANGELOG.md:332 msgid "" "Fix exponentially growing database when using in-place-imports on a " "regular base #1676" msgstr "" -#: ../../../CHANGELOG:337 +#: ../../../CHANGELOG.md:333 msgid "Fix navigating to registration request not showing anything (#1836)" msgstr "" -#: ../../../CHANGELOG:338 +#: ../../../CHANGELOG.md:334 msgid "Fix player cover image overlapping queue list" msgstr "" -#: ../../../CHANGELOG:339 +#: ../../../CHANGELOG.md:335 msgid "Fixed metadata handling for Various Artists albums (#1201)" msgstr "" -#: ../../../CHANGELOG:340 +#: ../../../CHANGELOG.md:336 msgid "Fixed search behaviour in radio builder's filters (#733)" msgstr "" -#: ../../../CHANGELOG:341 +#: ../../../CHANGELOG.md:337 msgid "Fixed unpredictable subsonic search3 results (#1782)" msgstr "" -#: ../../../CHANGELOG:348 +#: ../../../CHANGELOG.md:344 msgid "Mathias Koehler" msgstr "" -#: ../../../CHANGELOG:349 ../../../CHANGELOG:432 ../../../CHANGELOG:437 -#: ../../../CHANGELOG:454 +#: ../../../CHANGELOG.md:345 ../../../CHANGELOG.md:422 +#: ../../../CHANGELOG.md:427 ../../../CHANGELOG.md:444 msgid "wvffle" msgstr "" -#: ../../../CHANGELOG:353 ../../../CHANGELOG:440 +#: ../../../CHANGELOG.md:349 ../../../CHANGELOG.md:430 +#: ../../../CHANGELOG.md:818 msgid "AMoonRabbit" msgstr "" -#: ../../../CHANGELOG:354 ../../../CHANGELOG:444 ../../../CHANGELOG:484 -#: ../../../CHANGELOG:581 ../../../CHANGELOG:1121 ../../../CHANGELOG:1156 -#: ../../../CHANGELOG:1280 ../../../CHANGELOG:1332 ../../../CHANGELOG:1390 -#: ../../../CHANGELOG:1670 ../../../CHANGELOG:1770 ../../../CHANGELOG:2078 -#: ../../../CHANGELOG:2143 ../../../CHANGELOG:2350 +#: ../../../CHANGELOG.md:350 ../../../CHANGELOG.md:434 +#: ../../../CHANGELOG.md:471 ../../../CHANGELOG.md:561 +#: ../../../CHANGELOG.md:819 ../../../CHANGELOG.md:851 +#: ../../../CHANGELOG.md:967 ../../../CHANGELOG.md:1066 +#: ../../../CHANGELOG.md:1098 ../../../CHANGELOG.md:1209 +#: ../../../CHANGELOG.md:1257 ../../../CHANGELOG.md:1308 +#: ../../../CHANGELOG.md:1581 ../../../CHANGELOG.md:1675 +#: ../../../CHANGELOG.md:1971 ../../../CHANGELOG.md:2031 +#: ../../../CHANGELOG.md:2221 msgid "Agate" msgstr "" -#: ../../../CHANGELOG:359 +#: ../../../CHANGELOG.md:355 msgid "Kelvin Hammond" msgstr "" -#: ../../../CHANGELOG:361 ../../../CHANGELOG:1292 +#: ../../../CHANGELOG.md:357 ../../../CHANGELOG.md:995 +#: ../../../CHANGELOG.md:1221 msgid "Meliurwen" msgstr "" -#: ../../../CHANGELOG:363 +#: ../../../CHANGELOG.md:359 msgid "Miv2nir" msgstr "" -#: ../../../CHANGELOG:364 +#: ../../../CHANGELOG.md:360 msgid "Sam Birch" msgstr "" -#: ../../../CHANGELOG:365 +#: ../../../CHANGELOG.md:361 msgid "Tolriq" msgstr "" -#: ../../../CHANGELOG:366 ../../../CHANGELOG:495 ../../../CHANGELOG:1395 -#: ../../../CHANGELOG:1706 +#: ../../../CHANGELOG.md:362 ../../../CHANGELOG.md:482 +#: ../../../CHANGELOG.md:812 ../../../CHANGELOG.md:839 +#: ../../../CHANGELOG.md:869 ../../../CHANGELOG.md:1313 +#: ../../../CHANGELOG.md:1617 msgid "Tony Wasserka" msgstr "" -#: ../../../CHANGELOG:367 +#: ../../../CHANGELOG.md:363 msgid "f1reflyyyylmao" msgstr "" -#: ../../../CHANGELOG:368 ../../../CHANGELOG:443 ../../../CHANGELOG:1127 +#: ../../../CHANGELOG.md:364 ../../../CHANGELOG.md:433 +#: ../../../CHANGELOG.md:784 ../../../CHANGELOG.md:842 +#: ../../../CHANGELOG.md:870 ../../../CHANGELOG.md:989 +#: ../../../CHANGELOG.md:1072 msgid "heyarne" msgstr "" -#: ../../../CHANGELOG:370 +#: ../../../CHANGELOG.md:366 msgid "troll" msgstr "" -#: ../../../CHANGELOG:379 +#: ../../../CHANGELOG.md:375 msgid "interru" msgstr "" -#: ../../../CHANGELOG:383 +#: ../../../CHANGELOG.md:377 msgid "1.2.7 (2022-07-14)" msgstr "" -#: ../../../CHANGELOG:390 +#: ../../../CHANGELOG.md:383 msgid "Fixed libre.fm plugin not submitting scrobbles (#1817)" msgstr "" -#: ../../../CHANGELOG:408 +#: ../../../CHANGELOG.md:400 msgid "1.2.6 (2022-07-04)" msgstr "" -#: ../../../CHANGELOG:415 +#: ../../../CHANGELOG.md:406 msgid "Channel overview was displaying foreign tracks (#1773)" msgstr "" -#: ../../../CHANGELOG:416 +#: ../../../CHANGELOG.md:407 msgid "" "Fixed login form focusing reset password link instead of next input " "(#1373)" msgstr "" -#: ../../../CHANGELOG:417 +#: ../../../CHANGELOG.md:408 msgid "Fixed missing album contextual menu (#1791)" msgstr "" -#: ../../../CHANGELOG:418 +#: ../../../CHANGELOG.md:409 msgid "Fixed single listening submission when repeating a song (#1312)" msgstr "" -#: ../../../CHANGELOG:419 +#: ../../../CHANGELOG.md:410 msgid "Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263)" msgstr "" -#: ../../../CHANGELOG:420 +#: ../../../CHANGELOG.md:411 msgid "Resolve timeouts if nodeinfo and service actor is not known (#1714)" msgstr "" -#: ../../../CHANGELOG:425 +#: ../../../CHANGELOG.md:415 msgid "Replaced references to #funkwhale-troubleshooting with #funkwhale-support" msgstr "" -#: ../../../CHANGELOG:431 ../../../CHANGELOG:450 ../../../CHANGELOG:457 -#: ../../../CHANGELOG:612 +#: ../../../CHANGELOG.md:421 ../../../CHANGELOG.md:440 +#: ../../../CHANGELOG.md:447 ../../../CHANGELOG.md:592 +#: ../../../CHANGELOG.md:798 msgid "Petitminion" msgstr "" -#: ../../../CHANGELOG:436 +#: ../../../CHANGELOG.md:426 msgid "jeweet" msgstr "" -#: ../../../CHANGELOG:446 +#: ../../../CHANGELOG.md:436 msgid "MichaelBechHansen" msgstr "" -#: ../../../CHANGELOG:447 +#: ../../../CHANGELOG.md:437 msgid "ooZberg" msgstr "" -#: ../../../CHANGELOG:448 +#: ../../../CHANGELOG.md:438 msgid "Esras ." msgstr "" -#: ../../../CHANGELOG:449 ../../../CHANGELOG:507 +#: ../../../CHANGELOG.md:439 ../../../CHANGELOG.md:494 msgid "PhieF" msgstr "" -#: ../../../CHANGELOG:460 +#: ../../../CHANGELOG.md:449 msgid "1.2.5 (2022-05-07)" msgstr "" -#: ../../../CHANGELOG:472 +#: ../../../CHANGELOG.md:459 msgid "Fix stopped player to not show 00:00 when loading a track (#1432)" msgstr "" -#: ../../../CHANGELOG:478 +#: ../../../CHANGELOG.md:465 ../../../CHANGELOG.md:792 msgid "Marcos" msgstr "" -#: ../../../CHANGELOG:479 ../../../CHANGELOG:492 ../../../CHANGELOG:506 -#: ../../../CHANGELOG:554 ../../../CHANGELOG:590 ../../../CHANGELOG:603 -#: ../../../CHANGELOG:611 +#: ../../../CHANGELOG.md:466 ../../../CHANGELOG.md:479 +#: ../../../CHANGELOG.md:493 ../../../CHANGELOG.md:537 +#: ../../../CHANGELOG.md:570 ../../../CHANGELOG.md:583 +#: ../../../CHANGELOG.md:591 msgid "MattDHarding" msgstr "" -#: ../../../CHANGELOG:480 ../../../CHANGELOG:494 ../../../CHANGELOG:508 +#: ../../../CHANGELOG.md:467 ../../../CHANGELOG.md:481 +#: ../../../CHANGELOG.md:495 msgid "Stuart Begley-Miller" msgstr "" -#: ../../../CHANGELOG:485 ../../../CHANGELOG:533 +#: ../../../CHANGELOG.md:472 ../../../CHANGELOG.md:516 msgid "Beto Dealmeida" msgstr "" -#: ../../../CHANGELOG:486 ../../../CHANGELOG:534 +#: ../../../CHANGELOG.md:473 ../../../CHANGELOG.md:517 msgid "Cam Sweeney" msgstr "" -#: ../../../CHANGELOG:496 ../../../CHANGELOG:593 ../../../CHANGELOG:1129 -#: ../../../CHANGELOG:2357 +#: ../../../CHANGELOG.md:483 ../../../CHANGELOG.md:573 +#: ../../../CHANGELOG.md:787 ../../../CHANGELOG.md:844 +#: ../../../CHANGELOG.md:871 ../../../CHANGELOG.md:993 +#: ../../../CHANGELOG.md:1074 ../../../CHANGELOG.md:2228 msgid "jovuit" msgstr "" -#: ../../../CHANGELOG:498 +#: ../../../CHANGELOG.md:485 msgid "pullopen" msgstr "" -#: ../../../CHANGELOG:512 +#: ../../../CHANGELOG.md:498 msgid "1.2.4 (2022-04-23)" msgstr "" -#: ../../../CHANGELOG:519 +#: ../../../CHANGELOG.md:504 msgid "Hand cursor now displayed over artist and album cards" msgstr "" -#: ../../../CHANGELOG:524 +#: ../../../CHANGELOG.md:508 msgid "Fixes docs' SMTP URI configuration (#1749) (1749)" msgstr "" -#: ../../../CHANGELOG:529 +#: ../../../CHANGELOG.md:512 msgid "The documentation is now available in two versions: Develop and Stable" msgstr "" -#: ../../../CHANGELOG:558 +#: ../../../CHANGELOG.md:539 msgid "1.2.3 (2022-03-18)" msgstr "" -#: ../../../CHANGELOG:565 +#: ../../../CHANGELOG.md:545 msgid "Added support for all cover sources in the embedded player (#1697)." msgstr "" -#: ../../../CHANGELOG:571 +#: ../../../CHANGELOG.md:551 msgid "Catch ValueError on radio end (#1596)" msgstr "" -#: ../../../CHANGELOG:572 +#: ../../../CHANGELOG.md:552 msgid "Fix bug that prevents users from creating a new oauth application (#1706)" msgstr "" -#: ../../../CHANGELOG:573 +#: ../../../CHANGELOG.md:553 msgid "Fix failed track adding to playlist being silent (#1020)" msgstr "" -#: ../../../CHANGELOG:574 +#: ../../../CHANGELOG.md:554 msgid "Fix recently added radio not working has expected (#1674)" msgstr "" -#: ../../../CHANGELOG:575 +#: ../../../CHANGELOG.md:555 msgid "" "Fixed an issue where you couldn't load the details page for tracks with " "no associated album (#1703)" msgstr "" -#: ../../../CHANGELOG:576 +#: ../../../CHANGELOG.md:556 msgid "Fixed library visibility dropdown (#1384)" msgstr "" -#: ../../../CHANGELOG:577 +#: ../../../CHANGELOG.md:557 msgid "" "In playlist editor can now click outside the trashcan but inside the " "button to delete entry (#1348)" msgstr "" -#: ../../../CHANGELOG:582 +#: ../../../CHANGELOG.md:562 msgid "Baudouin Feildel" msgstr "" -#: ../../../CHANGELOG:583 +#: ../../../CHANGELOG.md:563 ../../../CHANGELOG.md:766 msgid "Christoph Pomaska" msgstr "" -#: ../../../CHANGELOG:592 +#: ../../../CHANGELOG.md:572 msgid "dnikolov" msgstr "" -#: ../../../CHANGELOG:606 ../../../CHANGELOG:664 +#: ../../../CHANGELOG.md:586 ../../../CHANGELOG.md:641 msgid "Committers" msgstr "" -#: ../../../CHANGELOG:608 +#: ../../../CHANGELOG.md:588 ../../../CHANGELOG.md:767 msgid "Ciaran Ainsworth" msgstr "" -#: ../../../CHANGELOG:613 +#: ../../../CHANGELOG.md:593 msgid "Reinhard Prechtl" msgstr "" -#: ../../../CHANGELOG:617 +#: ../../../CHANGELOG.md:595 msgid "1.2.2 (2022-02-04)" msgstr "" -#: ../../../CHANGELOG:624 +#: ../../../CHANGELOG.md:601 msgid "" "Fix an issue where the tracks tab in a library doesn't show any tracks " "(#1683)" msgstr "" -#: ../../../CHANGELOG:625 +#: ../../../CHANGELOG.md:602 msgid "Fix an issue with the embedded player not showing any content (#1675)" msgstr "" -#: ../../../CHANGELOG:626 +#: ../../../CHANGELOG.md:603 msgid "Fix broken instance description if it contains a line break #1673" msgstr "" -#: ../../../CHANGELOG:628 +#: ../../../CHANGELOG.md:605 msgid "Dependency Updates:" msgstr "" -#: ../../../CHANGELOG:630 -msgid "" -"Update dependency vue-template-compiler to 2.6.14 Update dependency vue " -"to ^2.6.14 Update dependency vuex-persistedstate to ^2.7.1 Update " -"dependency vuedraggable to ^2.24.3 Update dependency vue-lazyload to " -"^1.3.3 Update dependency vue-plyr to ^5.1.3 Update dependency vue-upload-" -"component to ^2.8.22 Update dependency vue-gettext to ^2.1.12 Update " -"dependency showdown to ^1.9.1 Update dependency js-logger to ^1.6.1 " -"Update dependency register-service-worker to ^1.7.2 Update dependency " -"howler to ^2.2.3 Update dependency fomantic-ui-css to ^2.8.8 Update " -"dependency diff to ^4.0.2 Update dependency axios-auth-refresh to ^2.2.8" +#: ../../../CHANGELOG.md:607 +msgid "Update dependency vue-template-compiler to 2.6.14" msgstr "" -#: ../../../CHANGELOG:654 +#: ../../../CHANGELOG.md:608 +msgid "Update dependency vue to ^2.6.14" +msgstr "" + +#: ../../../CHANGELOG.md:609 +msgid "Update dependency vuex-persistedstate to ^2.7.1" +msgstr "" + +#: ../../../CHANGELOG.md:610 +msgid "Update dependency vuedraggable to ^2.24.3" +msgstr "" + +#: ../../../CHANGELOG.md:611 +msgid "Update dependency vue-lazyload to ^1.3.3" +msgstr "" + +#: ../../../CHANGELOG.md:612 +msgid "Update dependency vue-plyr to ^5.1.3" +msgstr "" + +#: ../../../CHANGELOG.md:613 +msgid "Update dependency vue-upload-component to ^2.8.22" +msgstr "" + +#: ../../../CHANGELOG.md:614 +msgid "Update dependency vue-gettext to ^2.1.12" +msgstr "" + +#: ../../../CHANGELOG.md:615 +msgid "Update dependency showdown to ^1.9.1" +msgstr "" + +#: ../../../CHANGELOG.md:616 +msgid "Update dependency js-logger to ^1.6.1" +msgstr "" + +#: ../../../CHANGELOG.md:617 +msgid "Update dependency register-service-worker to ^1.7.2" +msgstr "" + +#: ../../../CHANGELOG.md:618 +msgid "Update dependency howler to ^2.2.3" +msgstr "" + +#: ../../../CHANGELOG.md:619 +msgid "Update dependency fomantic-ui-css to ^2.8.8" +msgstr "" + +#: ../../../CHANGELOG.md:620 +msgid "Update dependency diff to ^4.0.2" +msgstr "" + +#: ../../../CHANGELOG.md:621 +msgid "Update dependency axios-auth-refresh to ^2.2.8" +msgstr "" + +#: ../../../CHANGELOG.md:631 msgid "Ricardo" msgstr "" -#: ../../../CHANGELOG:669 ../../../CHANGELOG:1688 ../../../CHANGELOG:2086 +#: ../../../CHANGELOG.md:646 ../../../CHANGELOG.md:1599 +#: ../../../CHANGELOG.md:1979 msgid "Keunes" msgstr "" -#: ../../../CHANGELOG:674 +#: ../../../CHANGELOG.md:649 msgid "1.2.1 (2022-01-06)" msgstr "" -#: ../../../CHANGELOG:681 +#: ../../../CHANGELOG.md:655 msgid "Fix Pipeline for stable release builds (#1652)" msgstr "" -#: ../../../CHANGELOG:682 +#: ../../../CHANGELOG.md:656 msgid "Fix remote content page (#1655)" msgstr "" -#: ../../../CHANGELOG:686 -msgid "" -"Ciarán Ainsworth Georg Krause Jakob Schürz Mathieu Jourdan Micha " -"Gläß-Stöcker petitminion" +#: ../../../CHANGELOG.md:662 +msgid "Jakob Schürz" msgstr "" -#: ../../../CHANGELOG:697 -msgid "Committers: Dignified Silence Georg Krause JuniorJPDJ nztvar" +#: ../../../CHANGELOG.md:673 ../../../CHANGELOG.md:774 +msgid "Dignified Silence" msgstr "" -#: ../../../CHANGELOG:705 +#: ../../../CHANGELOG.md:676 +msgid "nztvar" +msgstr "" + +#: ../../../CHANGELOG.md:678 msgid "1.2.0 (2021-12-27)" msgstr "" -#: ../../../CHANGELOG:710 +#: ../../../CHANGELOG.md:682 msgid "" "Due to a bug in our CI Pipeline frontend artifacts are not available at " "https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/1.2.0/download?job=build_front" @@ -1406,31 +1543,31 @@ msgid "" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download" msgstr "" -#: ../../../CHANGELOG:714 +#: ../../../CHANGELOG.md:686 msgid "" "If you are running the All-in-One-Container since a longer time, you " "probably need to manually migrate your database information. If that's " "the case, you will get a message like this:" msgstr "" -#: ../../../CHANGELOG:716 +#: ../../../CHANGELOG.md:688 msgid "" -"`DETAIL: The data directory was initialized by PostgreSQL version 11, " +"`DETAIL: The data directory was initialized by PostgreSQL version 11, " "which is not compatible with this version 13.5.`" msgstr "" -#: ../../../CHANGELOG:718 +#: ../../../CHANGELOG.md:690 msgid "" "Make sure the Funkwhale version is set to `1.1.4` in `docker-" "compose.yml`. Now you can run this command to dump the database into a " "file:" msgstr "" -#: ../../../CHANGELOG:720 +#: ../../../CHANGELOG.md:692 msgid "`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > \"db.dump\"`" msgstr "" -#: ../../../CHANGELOG:722 +#: ../../../CHANGELOG.md:694 msgid "" "Now you can update the Funkwhale version in `docker-compose.yml` to " "`1.2.0`. Additionally you should save your `data` directory, eg by " @@ -1442,1141 +1579,1354 @@ msgid "" "That's it, enjoy!" msgstr "" -#: ../../../CHANGELOG:726 +#: ../../../CHANGELOG.md:698 msgid "Implemented awesome recently added radio (part of #1390)" msgstr "" -#: ../../../CHANGELOG:727 +#: ../../../CHANGELOG.md:699 msgid "Rework the instance about page (#1376)" msgstr "" -#: ../../../CHANGELOG:728 +#: ../../../CHANGELOG.md:700 msgid "Made changes to the track table to make it more visibly pleasing" msgstr "" -#: ../../../CHANGELOG:733 +#: ../../../CHANGELOG.md:704 msgid "Add linting for Frontend code (#1602)" msgstr "" -#: ../../../CHANGELOG:734 +#: ../../../CHANGELOG.md:705 msgid "Add xmlns:content to feed schemas fixes #1535" msgstr "" -#: ../../../CHANGELOG:735 +#: ../../../CHANGELOG.md:706 msgid "Add a Maloja plugin to submit listenings" msgstr "" -#: ../../../CHANGELOG:736 +#: ../../../CHANGELOG.md:707 msgid "Add artist cover art in subsonic API response (#1528)" msgstr "" -#: ../../../CHANGELOG:737 +#: ../../../CHANGELOG.md:708 msgid "Allow listen activities privacy level to be set public" msgstr "" -#: ../../../CHANGELOG:738 +#: ../../../CHANGELOG.md:709 msgid "" "Allow running multi-container setup on non-root user inside docker " "(!1375) (fixes #1334)" msgstr "" -#: ../../../CHANGELOG:739 +#: ../../../CHANGELOG.md:710 msgid "Change volume dynamic range from 60dB to 40dB (fixes #1544)" msgstr "" -#: ../../../CHANGELOG:740 +#: ../../../CHANGELOG.md:711 msgid "Change Start Radio to Play Radio (#1400)" msgstr "" -#: ../../../CHANGELOG:741 +#: ../../../CHANGELOG.md:712 msgid "Display toast when subsonic password is copied (#1496)" msgstr "" -#: ../../../CHANGELOG:742 +#: ../../../CHANGELOG.md:713 msgid "Expose more metadata in Subsonic's getAlbumList endpoint (#623)" msgstr "" -#: ../../../CHANGELOG:743 +#: ../../../CHANGELOG.md:714 msgid "ListenBrainz: Submit media player and submission client information" msgstr "" -#: ../../../CHANGELOG:744 +#: ../../../CHANGELOG.md:715 msgid "" "Make \"play in list\" the default when interacting with individual tracks" " (#1274)" msgstr "" -#: ../../../CHANGELOG:745 +#: ../../../CHANGELOG.md:716 msgid "" "Prevent an uncontrolled exception when uploading a file without tags, and" " prints user friendly message (1275)" msgstr "" -#: ../../../CHANGELOG:746 +#: ../../../CHANGELOG.md:717 msgid "Remove deprecated JWT Authentication (#1108) (1108)" msgstr "" -#: ../../../CHANGELOG:747 +#: ../../../CHANGELOG.md:718 msgid "Remove Raven SDK to report errors to Sentry (#1425) (1425)" msgstr "" -#: ../../../CHANGELOG:748 +#: ../../../CHANGELOG.md:719 msgid "Replace psycopg2-binary with psycopg2 (#1513)" msgstr "" -#: ../../../CHANGELOG:753 ../../../CHANGELOG:929 +#: ../../../CHANGELOG.md:723 ../../../CHANGELOG.md:892 msgid "Add worker-src to nginx header to prevent issues (#1489)" msgstr "" -#: ../../../CHANGELOG:754 +#: ../../../CHANGELOG.md:724 msgid "Enable stepless adjustment of the volume slider (!1294)" msgstr "" -#: ../../../CHANGELOG:755 +#: ../../../CHANGELOG.md:725 msgid "" "Fix an error in a Subsonic methods that return lists of numbers/strings " "like getUser" msgstr "" -#: ../../../CHANGELOG:756 +#: ../../../CHANGELOG.md:726 msgid "Fix showing too long radio descriptions (#1556)" msgstr "" -#: ../../../CHANGELOG:757 +#: ../../../CHANGELOG.md:727 msgid "" "Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN " "value for other pages (fix #1022)" msgstr "" -#: ../../../CHANGELOG:758 +#: ../../../CHANGELOG.md:728 msgid "Fix before last track starts playing when last track removed (#1485)" msgstr "" -#: ../../../CHANGELOG:759 +#: ../../../CHANGELOG.md:729 msgid "Fix delete account button is not disabled when missing password (#1591)" msgstr "" -#: ../../../CHANGELOG:760 +#: ../../../CHANGELOG.md:730 msgid "Fix omputed properties already defined in components data (#1649)" msgstr "" -#: ../../../CHANGELOG:761 +#: ../../../CHANGELOG.md:731 msgid "Fix the all in one docker image building process, related to #1503" msgstr "" -#: ../../../CHANGELOG:762 +#: ../../../CHANGELOG.md:732 msgid "Fix crash in album moderation interface when missing cover (#1474)" msgstr "" -#: ../../../CHANGELOG:763 +#: ../../../CHANGELOG.md:733 msgid "Fix subsonic scrobble not triggering plugin hook (#1416)" msgstr "" -#: ../../../CHANGELOG:764 +#: ../../../CHANGELOG.md:734 msgid "Improve formatting of RSS episode descriptions (#1405)" msgstr "" -#: ../../../CHANGELOG:765 ../../../CHANGELOG:930 +#: ../../../CHANGELOG.md:735 ../../../CHANGELOG.md:893 msgid "Only suggest typed tag once if it already exists" msgstr "" -#: ../../../CHANGELOG:766 +#: ../../../CHANGELOG.md:736 msgid "Partially fixed playing two tracks at same time (#1213)" msgstr "" -#: ../../../CHANGELOG:767 +#: ../../../CHANGELOG.md:737 msgid "Revert changes that break mobile browser playback (#1509)" msgstr "" -#: ../../../CHANGELOG:768 +#: ../../../CHANGELOG.md:738 msgid "" "Sanitize remote tracks' saving locations with slashes on their names " "(#1435)" msgstr "" -#: ../../../CHANGELOG:769 +#: ../../../CHANGELOG.md:739 msgid "Show embed option for channel tracks (#1278)" msgstr "" -#: ../../../CHANGELOG:770 +#: ../../../CHANGELOG.md:740 msgid "" "Store volume in logarithmic scale and convert when setting it to audio " "(fixes #1543)" msgstr "" -#: ../../../CHANGELOG:771 +#: ../../../CHANGELOG.md:741 msgid "" "Use global Howler volume instead of setting it separately for each track " "(fixes #1542)" msgstr "" -#: ../../../CHANGELOG:776 +#: ../../../CHANGELOG.md:745 msgid "Add email configuration to the documentation (#1481)" msgstr "" -#: ../../../CHANGELOG:777 +#: ../../../CHANGELOG.md:746 msgid "Add server uninstallation documentation (\\!1314)" msgstr "" -#: ../../../CHANGELOG:778 +#: ../../../CHANGELOG.md:747 msgid "Document location of cli env file on macOS (\\!1354)" msgstr "" -#: ../../../CHANGELOG:779 +#: ../../../CHANGELOG.md:748 msgid "Fix broken backup documentation (#1345)" msgstr "" -#: ../../../CHANGELOG:780 +#: ../../../CHANGELOG.md:749 msgid "" "Refactore installation documentation and other small documentation " "adjustments (\\!1314)" msgstr "" -#: ../../../CHANGELOG:781 +#: ../../../CHANGELOG.md:750 msgid "Add User documentation for built-in plugins" msgstr "" -#: ../../../CHANGELOG:786 +#: ../../../CHANGELOG.md:754 msgid "" "Create stable branch, master is now deprecated and will be removed in 1.3" " (#1476)" msgstr "" -#: ../../../CHANGELOG:790 -msgid "" -"Alexandra Parker Alyssa Ross appzer0 Arthur Brugière Asier Iturralde " -"Sarasola bittin Blopware Brian McMillen Christoph Pomaska Ciaran " -"Ainsworth Ciarán Ainsworth Classified Connor Hay Damian Szetela David " -"Marzal Deleted User Dignified Silence Dominik Danelski egon0 Erik " -"Präntare Georg Abenthung Georgios B Georgios Brellas Georg Krause ghose " -"greengekota heyarne ian Vatega Janek jovuit JuniorJPDJ Konstantinos G " -"manuelviens Manuel Viens Marcos Marcos Peña Martin Giger Matthew J Micha " -"Gläß-Stöcker petitminion Petitminion Philipp Wolfer Porrumentzio Quentin " -"PAGÈS Raphael Lullis Riccardo Sacchetto Romain Failliot Rubén Cabrera " -"Ryan Harg Sergio Varela SpcCw Stefano Pigozzi Thomas Tony Simoes Tony " -"Wasserka vachan-maker Virgile Robles" +#: ../../../CHANGELOG.md:758 +msgid "Alexandra Parker" msgstr "" -#: ../../../CHANGELOG:850 -msgid "" -"AMoonRabbit Agate Antoine POPINEAU Arthur Brugière Ciarán Ainsworth " -"Connor Hay Creak David Marzal Georg Krause Gerhard Beck Greg Poole " -"JuniorJPDJ Kuba Orlik Lunar Control Marcos Peña Mateusz Korzeniewski " -"Mathieu Jourdan Micha Gläß-Stöcker Philipp Wolfer Porrumentzio Thomas " -"Tony Wasserka Ville Ranki arkhi heyarne interfect jovuit mal petitminion " -"vachan-maker" +#: ../../../CHANGELOG.md:759 +msgid "Alyssa Ross" msgstr "" -#: ../../../CHANGELOG:883 -msgid "" -"Agate Arthur Brugière Ciarán Ainsworth Connor Hay David Marzal Distopico " -"Fanyx Georg Abenthung Georg Krause Janek JuniorJPDJ Kasper Seweryn Marcos" -" Peña Mathieu Jourdan Matthew J. Micha Gläß-Stöcker Philipp Wolfer Thomas" -" Tony Wasserka heyarne jovuit petitminion thanksd" +#: ../../../CHANGELOG.md:760 ../../../CHANGELOG.md:972 +#: ../../../CHANGELOG.md:1212 +msgid "appzer0" msgstr "" -#: ../../../CHANGELOG:909 +#: ../../../CHANGELOG.md:761 ../../../CHANGELOG.md:821 +#: ../../../CHANGELOG.md:852 +msgid "Arthur Brugière" +msgstr "" + +#: ../../../CHANGELOG.md:762 ../../../CHANGELOG.md:974 +msgid "Asier Iturralde Sarasola" +msgstr "" + +#: ../../../CHANGELOG.md:763 +msgid "bittin" +msgstr "" + +#: ../../../CHANGELOG.md:764 +msgid "Blopware" +msgstr "" + +#: ../../../CHANGELOG.md:765 +msgid "Brian McMillen" +msgstr "" + +#: ../../../CHANGELOG.md:769 +msgid "Classified" +msgstr "" + +#: ../../../CHANGELOG.md:770 ../../../CHANGELOG.md:823 +#: ../../../CHANGELOG.md:854 +msgid "Connor Hay" +msgstr "" + +#: ../../../CHANGELOG.md:771 +msgid "Damian Szetela" +msgstr "" + +#: ../../../CHANGELOG.md:772 ../../../CHANGELOG.md:825 +#: ../../../CHANGELOG.md:855 +msgid "David Marzal" +msgstr "" + +#: ../../../CHANGELOG.md:773 +msgid "Deleted User" +msgstr "" + +#: ../../../CHANGELOG.md:775 ../../../CHANGELOG.md:979 +msgid "Dominik Danelski" +msgstr "" + +#: ../../../CHANGELOG.md:776 +msgid "egon0" +msgstr "" + +#: ../../../CHANGELOG.md:777 +msgid "Erik Präntare" +msgstr "" + +#: ../../../CHANGELOG.md:778 ../../../CHANGELOG.md:858 +msgid "Georg Abenthung" +msgstr "" + +#: ../../../CHANGELOG.md:779 +msgid "Georgios B" +msgstr "" + +#: ../../../CHANGELOG.md:780 +msgid "Georgios Brellas" +msgstr "" + +#: ../../../CHANGELOG.md:782 ../../../CHANGELOG.md:987 +#: ../../../CHANGELOG.md:1218 +msgid "ghose" +msgstr "" + +#: ../../../CHANGELOG.md:783 +msgid "greengekota" +msgstr "" + +#: ../../../CHANGELOG.md:785 +msgid "ian Vatega" +msgstr "" + +#: ../../../CHANGELOG.md:786 ../../../CHANGELOG.md:860 +msgid "Janek" +msgstr "" + +#: ../../../CHANGELOG.md:789 +msgid "Konstantinos G" +msgstr "" + +#: ../../../CHANGELOG.md:790 +msgid "manuelviens" +msgstr "" + +#: ../../../CHANGELOG.md:791 +msgid "Manuel Viens" +msgstr "" + +#: ../../../CHANGELOG.md:794 +msgid "Martin Giger" +msgstr "" + +#: ../../../CHANGELOG.md:795 +msgid "Matthew J" +msgstr "" + +#: ../../../CHANGELOG.md:800 ../../../CHANGELOG.md:837 +#: ../../../CHANGELOG.md:1000 +msgid "Porrumentzio" +msgstr "" + +#: ../../../CHANGELOG.md:801 ../../../CHANGELOG.md:1223 +#: ../../../CHANGELOG.md:1610 ../../../CHANGELOG.md:1680 +msgid "Quentin PAGÈS" +msgstr "" + +#: ../../../CHANGELOG.md:802 +msgid "Raphael Lullis" +msgstr "" + +#: ../../../CHANGELOG.md:803 +msgid "Riccardo Sacchetto" +msgstr "" + +#: ../../../CHANGELOG.md:804 ../../../CHANGELOG.md:1988 +msgid "Romain Failliot" +msgstr "" + +#: ../../../CHANGELOG.md:805 ../../../CHANGELOG.md:1003 +msgid "Rubén Cabrera" +msgstr "" + +#: ../../../CHANGELOG.md:806 +msgid "Ryan Harg" +msgstr "" + +#: ../../../CHANGELOG.md:807 +msgid "Sergio Varela" +msgstr "" + +#: ../../../CHANGELOG.md:808 ../../../CHANGELOG.md:1006 +#: ../../../CHANGELOG.md:1226 ../../../CHANGELOG.md:1614 +#: ../../../CHANGELOG.md:1989 +msgid "SpcCw" +msgstr "" + +#: ../../../CHANGELOG.md:809 ../../../CHANGELOG.md:1227 +msgid "Stefano Pigozzi" +msgstr "" + +#: ../../../CHANGELOG.md:810 ../../../CHANGELOG.md:838 +#: ../../../CHANGELOG.md:868 +msgid "Thomas" +msgstr "" + +#: ../../../CHANGELOG.md:811 +msgid "Tony Simoes" +msgstr "" + +#: ../../../CHANGELOG.md:813 ../../../CHANGELOG.md:847 +msgid "vachan-maker" +msgstr "" + +#: ../../../CHANGELOG.md:814 +msgid "Virgile Robles" +msgstr "" + +#: ../../../CHANGELOG.md:820 +msgid "Antoine POPINEAU" +msgstr "" + +#: ../../../CHANGELOG.md:824 ../../../CHANGELOG.md:1310 +#: ../../../CHANGELOG.md:1587 ../../../CHANGELOG.md:2029 +msgid "Creak" +msgstr "" + +#: ../../../CHANGELOG.md:827 +msgid "Gerhard Beck" +msgstr "" + +#: ../../../CHANGELOG.md:828 +msgid "Greg Poole" +msgstr "" + +#: ../../../CHANGELOG.md:830 ../../../CHANGELOG.md:1101 +msgid "Kuba Orlik" +msgstr "" + +#: ../../../CHANGELOG.md:831 +msgid "Lunar Control" +msgstr "" + +#: ../../../CHANGELOG.md:833 +msgid "Mateusz Korzeniewski" +msgstr "" + +#: ../../../CHANGELOG.md:840 +msgid "Ville Ranki" +msgstr "" + +#: ../../../CHANGELOG.md:841 +msgid "arkhi" +msgstr "" + +#: ../../../CHANGELOG.md:843 ../../../CHANGELOG.md:990 +#: ../../../CHANGELOG.md:1073 ../../../CHANGELOG.md:2225 +msgid "interfect" +msgstr "" + +#: ../../../CHANGELOG.md:845 +msgid "mal" +msgstr "" + +#: ../../../CHANGELOG.md:856 +msgid "Distopico" +msgstr "" + +#: ../../../CHANGELOG.md:857 +msgid "Fanyx" +msgstr "" + +#: ../../../CHANGELOG.md:865 +msgid "Matthew J." +msgstr "" + +#: ../../../CHANGELOG.md:873 +msgid "thanksd" +msgstr "" + +#: ../../../CHANGELOG.md:875 msgid "1.1.4 (2021-08-02)" msgstr "" -#: ../../../CHANGELOG:914 +#: ../../../CHANGELOG.md:879 msgid "" "Pinned version of asgiref to avoid trouble with latest release. For " "further information, see #1516" msgstr "" -#: ../../../CHANGELOG:917 +#: ../../../CHANGELOG.md:881 msgid "1.1.3 (2021-08-02)" msgstr "" -#: ../../../CHANGELOG:924 +#: ../../../CHANGELOG.md:887 msgid "Test better tagging of Docker Images (#1505)" msgstr "" -#: ../../../CHANGELOG:928 +#: ../../../CHANGELOG.md:891 msgid "" "Fix the scrobbler plugin submitting literal \"None\" as MusicBrainz ID " "(#1498)" msgstr "" -#: ../../../CHANGELOG:931 +#: ../../../CHANGELOG.md:894 msgid "Implement access control on the moderation views (#1494)" msgstr "" -#: ../../../CHANGELOG:932 +#: ../../../CHANGELOG.md:895 msgid "Prevent open redirect on login (#1492)" msgstr "" -#: ../../../CHANGELOG:936 +#: ../../../CHANGELOG.md:897 msgid "1.1.2 (2021-05-19)" msgstr "" -#: ../../../CHANGELOG:943 +#: ../../../CHANGELOG.md:903 msgid "Added modal to prompt users to log in when subscribing to channels (#1296)" msgstr "" -#: ../../../CHANGELOG:948 +#: ../../../CHANGELOG.md:907 msgid "Added missing is_playable serializer for the tracks endpoint." msgstr "" -#: ../../../CHANGELOG:949 +#: ../../../CHANGELOG.md:908 msgid "" "Fixed minor graphical bug where loaders would appear white in dark theme " "(#1442)" msgstr "" -#: ../../../CHANGELOG:950 +#: ../../../CHANGELOG.md:909 msgid "Fixed systemd unit for funkwhale-worker (#1160)" msgstr "" -#: ../../../CHANGELOG:951 +#: ../../../CHANGELOG.md:910 msgid "Several minor fixes for the Frontend" msgstr "" -#: ../../../CHANGELOG:955 +#: ../../../CHANGELOG.md:912 msgid "1.1.1 (2021-04-13)" msgstr "" -#: ../../../CHANGELOG:962 +#: ../../../CHANGELOG.md:918 msgid "Improve UI consistency in artist tracks (#1286)" msgstr "" -#: ../../../CHANGELOG:963 +#: ../../../CHANGELOG.md:919 msgid "Adds year to album's card and album's base UI" msgstr "" -#: ../../../CHANGELOG:967 +#: ../../../CHANGELOG.md:923 msgid "Fix playback issues when pausing close the the end of a track (#1324)" msgstr "" -#: ../../../CHANGELOG:968 +#: ../../../CHANGELOG.md:924 msgid "" "Fix tracks playing in the background without the ability to control them " "(#1213) (#1387)" msgstr "" -#: ../../../CHANGELOG:969 +#: ../../../CHANGELOG.md:925 msgid "Fixed track playback indicator to reset on queue end (#1380)" msgstr "" -#: ../../../CHANGELOG:970 +#: ../../../CHANGELOG.md:926 msgid "" "Frontend build tooling is less dependent on `npm` or `yarn` being used " "(!1285)" msgstr "" -#: ../../../CHANGELOG:971 +#: ../../../CHANGELOG.md:927 msgid "Fixed a small discrepancy to the subsonic api 1374" msgstr "" -#: ../../../CHANGELOG:975 +#: ../../../CHANGELOG.md:929 msgid "1.1 (2021-03-10)" msgstr "" -#: ../../../CHANGELOG:982 ../../../CHANGELOG:1082 +#: ../../../CHANGELOG.md:935 ../../../CHANGELOG.md:1028 msgid "Add number of tracks and discs of an album to API (#1238)" msgstr "" -#: ../../../CHANGELOG:983 ../../../CHANGELOG:1083 +#: ../../../CHANGELOG.md:936 ../../../CHANGELOG.md:1029 msgid "Add spacing after \"Play all\" button in playlist view (!1271)" msgstr "" -#: ../../../CHANGELOG:984 ../../../CHANGELOG:1084 +#: ../../../CHANGELOG.md:937 ../../../CHANGELOG.md:1030 msgid "Added a ListenBrainz plugin to submit listenings" msgstr "" -#: ../../../CHANGELOG:985 ../../../CHANGELOG:1085 +#: ../../../CHANGELOG.md:938 ../../../CHANGELOG.md:1031 msgid "" "Added ability to choose fediverse addresses from channel subscription " "page/podcast screen (#1294)" msgstr "" -#: ../../../CHANGELOG:986 ../../../CHANGELOG:1086 +#: ../../../CHANGELOG.md:939 ../../../CHANGELOG.md:1032 msgid "" "Added new search functions to allow users to more easily search for " "podcasts in the UI." msgstr "" -#: ../../../CHANGELOG:987 ../../../CHANGELOG:1087 +#: ../../../CHANGELOG.md:940 ../../../CHANGELOG.md:1033 msgid "Added padding to volume slider to ease mouse control (#1241)" msgstr "" -#: ../../../CHANGELOG:988 ../../../CHANGELOG:1088 +#: ../../../CHANGELOG.md:941 ../../../CHANGELOG.md:1034 msgid "Logarithmic scale for volume slider (#1222)" msgstr "" -#: ../../../CHANGELOG:989 ../../../CHANGELOG:1089 +#: ../../../CHANGELOG.md:942 ../../../CHANGELOG.md:1035 msgid "More user-friendly subsonic tokens (#1269)" msgstr "" -#: ../../../CHANGELOG:990 ../../../CHANGELOG:1090 +#: ../../../CHANGELOG.md:943 ../../../CHANGELOG.md:1036 msgid "Remove manual entry of Import Reference on front-end import (#1284)" msgstr "" -#: ../../../CHANGELOG:991 ../../../CHANGELOG:1092 +#: ../../../CHANGELOG.md:944 ../../../CHANGELOG.md:1038 msgid "Support AIFF file format (#1243)" msgstr "" -#: ../../../CHANGELOG:996 ../../../CHANGELOG:1097 +#: ../../../CHANGELOG.md:948 ../../../CHANGELOG.md:1042 msgid "\"Add check for empty/null covers (#1281)\"" msgstr "" -#: ../../../CHANGELOG:997 ../../../CHANGELOG:1098 +#: ../../../CHANGELOG.md:949 ../../../CHANGELOG.md:1043 msgid "" "Added an album filter to fix problem where channel entries would show up " "in the wrong series (#1282)" msgstr "" -#: ../../../CHANGELOG:998 ../../../CHANGELOG:1099 +#: ../../../CHANGELOG.md:950 ../../../CHANGELOG.md:1044 msgid "Avoid broken Faker version (#1323)" msgstr "" -#: ../../../CHANGELOG:999 ../../../CHANGELOG:1100 +#: ../../../CHANGELOG.md:951 ../../../CHANGELOG.md:1045 msgid "" "Changed audio format detection to happen via sniffing and not file " "extensions (#1274)" msgstr "" -#: ../../../CHANGELOG:1000 ../../../CHANGELOG:1101 +#: ../../../CHANGELOG.md:952 ../../../CHANGELOG.md:1046 msgid "" "Changed default behaviour of channel entries to use channel artwork if no" " entry artwork available (#1289)" msgstr "" -#: ../../../CHANGELOG:1001 ../../../CHANGELOG:1102 +#: ../../../CHANGELOG.md:953 ../../../CHANGELOG.md:1047 msgid "Fix delete library modal closing immediately (#1272)" msgstr "" -#: ../../../CHANGELOG:1002 ../../../CHANGELOG:1103 +#: ../../../CHANGELOG.md:954 ../../../CHANGELOG.md:1048 msgid "Fix public shared remote library radio button being disabled (#1292)" msgstr "" -#: ../../../CHANGELOG:1003 ../../../CHANGELOG:1104 +#: ../../../CHANGELOG.md:955 ../../../CHANGELOG.md:1049 msgid "Fixed an issue that prevented disabling plugins" msgstr "" -#: ../../../CHANGELOG:1004 ../../../CHANGELOG:1105 +#: ../../../CHANGELOG.md:956 ../../../CHANGELOG.md:1050 msgid "" "Fixed an issue where channel albums don't show up in the album search " "(#1300)" msgstr "" -#: ../../../CHANGELOG:1005 ../../../CHANGELOG:1106 +#: ../../../CHANGELOG.md:957 ../../../CHANGELOG.md:1051 msgid "" "Fixed an issue where modals would prevent users being able to interact " "with channels (#1295)" msgstr "" -#: ../../../CHANGELOG:1006 ../../../CHANGELOG:1107 +#: ../../../CHANGELOG.md:958 ../../../CHANGELOG.md:1052 msgid "Update MediaSession metadata for initially loaded track (#1252)" msgstr "" -#: ../../../CHANGELOG:1007 ../../../CHANGELOG:1108 +#: ../../../CHANGELOG.md:959 ../../../CHANGELOG.md:1053 msgid "Update playback position slider also when track is paused (#1266)" msgstr "" -#: ../../../CHANGELOG:1008 ../../../CHANGELOG:1068 +#: ../../../CHANGELOG.md:960 ../../../CHANGELOG.md:1017 msgid "" "Fixed follows from Pleroma with custom Emoji as Tag by ignoring not " "supported tag types #1342" msgstr "" -#: ../../../CHANGELOG:1009 ../../../CHANGELOG:1069 +#: ../../../CHANGELOG.md:961 ../../../CHANGELOG.md:1018 msgid "Update pleroma JSON-LD Schema (#1341)" msgstr "" -#: ../../../CHANGELOG:1010 ../../../CHANGELOG:1071 +#: ../../../CHANGELOG.md:962 ../../../CHANGELOG.md:1020 msgid "Pin twisted version to 20.3.0" msgstr "" -#: ../../../CHANGELOG:1012 ../../../CHANGELOG:1110 ../../../CHANGELOG:1154 -#: ../../../CHANGELOG:1330 +#: ../../../CHANGELOG.md:964 ../../../CHANGELOG.md:1055 +#: ../../../CHANGELOG.md:1096 ../../../CHANGELOG.md:1255 msgid "Contributors to this release (development, documentation, reviews):" msgstr "" -#: ../../../CHANGELOG:1014 -msgid "" -"Adam Novak Agate alemairebe Alicia Blasco Leon anonymous Amaranthe " -"appzer0 Arne Asier Iturralde Sarasola Christian Paul Ciarán Ainsworth " -"Daniel David Dominik Danelski Eorn le goéland Eleos Erik Duxstad Esteban " -"Fred Uggla Freyja Wildes Georg Krause ghose hellekin heyarne interfect " -"Jess Jing Johannes H. jovuit marzzzello Meliurwen Mehdi Nitai Bezerra da " -"Silva Philipp Wolfer Pierre Couy Porrumentzio Reg Robert Kaye Rubén " -"Cabrera Silver Fox Snack Capt SpcCw Strom Lin vicdorke x" +#: ../../../CHANGELOG.md:966 ../../../CHANGELOG.md:1065 +msgid "Adam Novak" msgstr "" -#: ../../../CHANGELOG:1061 +#: ../../../CHANGELOG.md:968 +msgid "alemairebe" +msgstr "" + +#: ../../../CHANGELOG.md:969 +msgid "Alicia Blasco Leon" +msgstr "" + +#: ../../../CHANGELOG.md:970 ../../../CHANGELOG.md:1211 +msgid "anonymous" +msgstr "" + +#: ../../../CHANGELOG.md:971 ../../../CHANGELOG.md:1061 +#: ../../../CHANGELOG.md:1968 +msgid "Amaranthe" +msgstr "" + +#: ../../../CHANGELOG.md:973 ../../../CHANGELOG.md:1213 +msgid "Arne" +msgstr "" + +#: ../../../CHANGELOG.md:975 ../../../CHANGELOG.md:1067 +msgid "Christian Paul" +msgstr "" + +#: ../../../CHANGELOG.md:977 +msgid "Daniel" +msgstr "" + +#: ../../../CHANGELOG.md:978 +msgid "David" +msgstr "" + +#: ../../../CHANGELOG.md:980 +msgid "Eorn le goéland" +msgstr "" + +#: ../../../CHANGELOG.md:981 ../../../CHANGELOG.md:1062 +msgid "Eleos" +msgstr "" + +#: ../../../CHANGELOG.md:982 ../../../CHANGELOG.md:1069 +msgid "Erik Duxstad" +msgstr "" + +#: ../../../CHANGELOG.md:983 ../../../CHANGELOG.md:1059 +#: ../../../CHANGELOG.md:1676 ../../../CHANGELOG.md:1972 +#: ../../../CHANGELOG.md:2032 +msgid "Esteban" +msgstr "" + +#: ../../../CHANGELOG.md:984 ../../../CHANGELOG.md:1070 +msgid "Fred Uggla" +msgstr "" + +#: ../../../CHANGELOG.md:985 ../../../CHANGELOG.md:1060 +#: ../../../CHANGELOG.md:1974 ../../../CHANGELOG.md:2033 +msgid "Freyja Wildes" +msgstr "" + +#: ../../../CHANGELOG.md:988 ../../../CHANGELOG.md:1058 +#: ../../../CHANGELOG.md:1975 ../../../CHANGELOG.md:2034 +msgid "hellekin" +msgstr "" + +#: ../../../CHANGELOG.md:991 +msgid "Jess Jing" +msgstr "" + +#: ../../../CHANGELOG.md:992 ../../../CHANGELOG.md:1063 +#: ../../../CHANGELOG.md:1677 ../../../CHANGELOG.md:1978 +#: ../../../CHANGELOG.md:2035 +msgid "Johannes H." +msgstr "" + +#: ../../../CHANGELOG.md:994 ../../../CHANGELOG.md:1601 +msgid "marzzzello" +msgstr "" + +#: ../../../CHANGELOG.md:996 ../../../CHANGELOG.md:1064 +#: ../../../CHANGELOG.md:1982 ../../../CHANGELOG.md:2036 +msgid "Mehdi" +msgstr "" + +#: ../../../CHANGELOG.md:997 ../../../CHANGELOG.md:1075 +msgid "Nitai Bezerra da Silva" +msgstr "" + +#: ../../../CHANGELOG.md:999 ../../../CHANGELOG.md:1077 +msgid "Pierre Couy" +msgstr "" + +#: ../../../CHANGELOG.md:1001 ../../../CHANGELOG.md:1057 +#: ../../../CHANGELOG.md:1986 ../../../CHANGELOG.md:2037 +msgid "Reg" +msgstr "" + +#: ../../../CHANGELOG.md:1002 ../../../CHANGELOG.md:1078 +msgid "Robert Kaye" +msgstr "" + +#: ../../../CHANGELOG.md:1004 +msgid "Silver Fox" +msgstr "" + +#: ../../../CHANGELOG.md:1005 +msgid "Snack Capt" +msgstr "" + +#: ../../../CHANGELOG.md:1007 ../../../CHANGELOG.md:1079 +msgid "Strom Lin" +msgstr "" + +#: ../../../CHANGELOG.md:1008 ../../../CHANGELOG.md:1230 +msgid "vicdorke" +msgstr "" + +#: ../../../CHANGELOG.md:1009 +msgid "x" +msgstr "" + +#: ../../../CHANGELOG.md:1011 msgid "1.1-rc2 (2021-03-01)" msgstr "" -#: ../../../CHANGELOG:1070 +#: ../../../CHANGELOG.md:1019 msgid "" "Revert fork replacement of http-signature since official package breaks " "federation" msgstr "" -#: ../../../CHANGELOG:1075 +#: ../../../CHANGELOG.md:1022 msgid "1.1-rc1 (2021-02-24)" msgstr "" -#: ../../../CHANGELOG:1091 +#: ../../../CHANGELOG.md:1037 msgid "Replaced forked http-signature dependency with official package (#876)" msgstr "" -#: ../../../CHANGELOG:1112 ../../../CHANGELOG:2093 ../../../CHANGELOG:2149 -msgid "Reg" -msgstr "" - -#: ../../../CHANGELOG:1113 ../../../CHANGELOG:2082 ../../../CHANGELOG:2146 -msgid "hellekin" -msgstr "" - -#: ../../../CHANGELOG:1114 ../../../CHANGELOG:1771 ../../../CHANGELOG:2079 -#: ../../../CHANGELOG:2144 -msgid "Esteban" -msgstr "" - -#: ../../../CHANGELOG:1115 ../../../CHANGELOG:2081 ../../../CHANGELOG:2145 -msgid "Freyja Wildes" -msgstr "" - -#: ../../../CHANGELOG:1116 ../../../CHANGELOG:2075 -msgid "Amaranthe" -msgstr "" - -#: ../../../CHANGELOG:1117 -msgid "Eleos" -msgstr "" - -#: ../../../CHANGELOG:1118 ../../../CHANGELOG:1772 ../../../CHANGELOG:2085 -#: ../../../CHANGELOG:2147 -msgid "Johannes H." -msgstr "" - -#: ../../../CHANGELOG:1119 ../../../CHANGELOG:2089 ../../../CHANGELOG:2148 -msgid "Mehdi" -msgstr "" - -#: ../../../CHANGELOG:1120 -msgid "Adam Novak" -msgstr "" - -#: ../../../CHANGELOG:1122 -msgid "Christian Paul" -msgstr "" - -#: ../../../CHANGELOG:1124 -msgid "Erik Duxstad" -msgstr "" - -#: ../../../CHANGELOG:1125 -msgid "Fred Uggla" -msgstr "" - -#: ../../../CHANGELOG:1128 ../../../CHANGELOG:2354 -msgid "interfect" -msgstr "" - -#: ../../../CHANGELOG:1130 -msgid "Nitai Bezerra da Silva" -msgstr "" - -#: ../../../CHANGELOG:1132 -msgid "Pierre Couy" -msgstr "" - -#: ../../../CHANGELOG:1133 -msgid "Robert Kaye" -msgstr "" - -#: ../../../CHANGELOG:1134 -msgid "Strom Lin" -msgstr "" - -#: ../../../CHANGELOG:1137 +#: ../../../CHANGELOG.md:1081 msgid "1.0.1 (2020-10-31)" msgstr "" -#: ../../../CHANGELOG:1144 +#: ../../../CHANGELOG.md:1087 msgid "Added controls to play volume of an album (#1226)" msgstr "" -#: ../../../CHANGELOG:1145 +#: ../../../CHANGELOG.md:1088 msgid "Allow genre tags to be updated when rescanning files in-place (#1246)" msgstr "" -#: ../../../CHANGELOG:1150 +#: ../../../CHANGELOG.md:1092 msgid "Fixed broken install because of upgraded dependencies" msgstr "" -#: ../../../CHANGELOG:1151 +#: ../../../CHANGELOG.md:1093 msgid "Fixed duplication of discs for multi-disc albums in album views (#1228)" msgstr "" -#: ../../../CHANGELOG:1152 +#: ../../../CHANGELOG.md:1094 msgid "Make the generated RSS feed more conformant with w3c specification (#1250)" msgstr "" -#: ../../../CHANGELOG:1157 +#: ../../../CHANGELOG.md:1099 msgid "Cédric Schieli" msgstr "" -#: ../../../CHANGELOG:1159 -msgid "Kuba Orlik" -msgstr "" - -#: ../../../CHANGELOG:1162 +#: ../../../CHANGELOG.md:1103 msgid "1.0 (2020-09-09)" msgstr "" -#: ../../../CHANGELOG:1169 +#: ../../../CHANGELOG.md:1107 msgid "Dropped python 3.5 support [manual action required, non-docker only]" msgstr "" -#: ../../../CHANGELOG:1171 +#: ../../../CHANGELOG.md:1109 msgid "" "With Funkwhale 1.0, we're dropping support for Python 3.5. Before " -"upgrading, ensure ``python3 --version`` returns ``3.6`` or higher." +"upgrading, ensure `python3 --version` returns `3.6` or higher." msgstr "" -#: ../../../CHANGELOG:1174 -msgid "If it returns ``3.6`` or higher, you have nothing to do." +#: ../../../CHANGELOG.md:1112 +msgid "If it returns `3.6` or higher, you have nothing to do." msgstr "" -#: ../../../CHANGELOG:1176 +#: ../../../CHANGELOG.md:1114 msgid "" -"If it returns ``3.5``, you will need to upgrade your Python version/Host," -" then recreate your virtual environment::" +"If it returns `3.5`, you will need to upgrade your Python version/Host, " +"then recreate your virtual environment:" msgstr "" -#: ../../../CHANGELOG:1183 +#: ../../../CHANGELOG.md:1121 msgid "Increased quality of JPEG thumbnails [manual action required]" msgstr "" -#: ../../../CHANGELOG:1185 +#: ../../../CHANGELOG.md:1123 msgid "" "Default quality for JPEG thumbnails was increased from 70 to 95, as 70 " "was producing visible artifacts in resized images." msgstr "" -#: ../../../CHANGELOG:1187 +#: ../../../CHANGELOG.md:1125 msgid "" "Because of this change, existing thumbnails will not load, and you will " "need to:" msgstr "" -#: ../../../CHANGELOG:1189 -msgid "delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory" +#: ../../../CHANGELOG.md:1127 +msgid "delete the `__sized__` directory in your `MEDIA_ROOT` directory" msgstr "" -#: ../../../CHANGELOG:1190 +#: ../../../CHANGELOG.md:1128 msgid "" -"run ``python manage.py fw media generate-thumbnails`` to regenerate " +"run `python manage.py fw media generate-thumbnails` to regenerate " "thumbnails with the enhanced quality" msgstr "" -#: ../../../CHANGELOG:1192 +#: ../../../CHANGELOG.md:1130 msgid "" "If you don't want to regenerate thumbnails, you can keep the old ones by " -"adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70`` to your .env file." +"adding `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your .env file." msgstr "" -#: ../../../CHANGELOG:1195 ../../../CHANGELOG:1375 -msgid "Small API breaking change in ``/api/v1/libraries``" +#: ../../../CHANGELOG.md:1132 ../../../CHANGELOG.md:1294 +msgid "Small API breaking change in `/api/v1/libraries`" msgstr "" -#: ../../../CHANGELOG:1197 ../../../CHANGELOG:1377 +#: ../../../CHANGELOG.md:1134 ../../../CHANGELOG.md:1296 msgid "" "To allow easier crawling of public libraries on a pod,we had to make a " -"slight breaking change to the behaviour of ``GET /api/v1/libraries``." +"slight breaking change to the behaviour of `GET /api/v1/libraries`." msgstr "" -#: ../../../CHANGELOG:1200 ../../../CHANGELOG:1380 +#: ../../../CHANGELOG.md:1137 ../../../CHANGELOG.md:1299 msgid "Before, it returned only libraries owned by the current user." msgstr "" -#: ../../../CHANGELOG:1202 ../../../CHANGELOG:1382 +#: ../../../CHANGELOG.md:1139 ../../../CHANGELOG.md:1301 msgid "" "Now, it returns all the accessible libraries (including ones from other " "users and pods)." msgstr "" -#: ../../../CHANGELOG:1204 ../../../CHANGELOG:1384 +#: ../../../CHANGELOG.md:1141 ../../../CHANGELOG.md:1303 msgid "" "If you are consuming the API via a third-party client and need to " -"retrieve your libraries, use the ``scope`` parameter, like this: ``GET " -"/api/v1/libraries?scope=me``" +"retrieve your libraries, use the `scope` parameter, like this: `GET " +"/api/v1/libraries?scope=me`" msgstr "" -#: ../../../CHANGELOG:1208 -msgid "API breaking change in ``/api/v1/albums``" +#: ../../../CHANGELOG.md:1144 +msgid "API breaking change in `/api/v1/albums`" msgstr "" -#: ../../../CHANGELOG:1210 +#: ../../../CHANGELOG.md:1146 msgid "" -"To increase performance, querying ``/api/v1/albums`` doesn't return album" -" tracks anymore. This caused some performance issues, especially as some " +"To increase performance, querying `/api/v1/albums` doesn't return album " +"tracks anymore. This caused some performance issues, especially as some " "albums and series have dozens or even hundreds of tracks." msgstr "" -#: ../../../CHANGELOG:1213 +#: ../../../CHANGELOG.md:1149 msgid "" "If you want to retrieve tracks for an album, you can query " -"``/api/v1/tracks/?album=<albumid>``." +"`/api/v1/tracks/?album=<albumid>`." msgstr "" -#: ../../../CHANGELOG:1216 +#: ../../../CHANGELOG.md:1151 msgid "JWT deprecation" msgstr "" -#: ../../../CHANGELOG:1218 +#: ../../../CHANGELOG.md:1153 msgid "" "API Authentication using JWT is deprecated and will be removed in " "Funkwhale 1.0. Please use OAuth or application tokens and refer to our " "API documentation at https://docs.funkwhale.audio/swagger/ for guidance." msgstr "" -#: ../../../CHANGELOG:1222 ../../../CHANGELOG:1583 +#: ../../../CHANGELOG.md:1156 ../../../CHANGELOG.md:1494 msgid "Full list of changes" msgstr "" -#: ../../../CHANGELOG:1226 +#: ../../../CHANGELOG.md:1160 msgid "Allow users to hide compilation artists on the artist search page (#1053)" msgstr "" -#: ../../../CHANGELOG:1227 +#: ../../../CHANGELOG.md:1161 msgid "Can now launch server import from the UI (#1105)" msgstr "" -#: ../../../CHANGELOG:1228 +#: ../../../CHANGELOG.md:1162 msgid "Dedicated, advanced search page (#370)" msgstr "" -#: ../../../CHANGELOG:1229 +#: ../../../CHANGELOG.md:1163 msgid "Persist theme and language settings across sessions (#996)" msgstr "" -#: ../../../CHANGELOG:1234 +#: ../../../CHANGELOG.md:1167 msgid "Add support for unauthenticated users hitting the logout page" msgstr "" -#: ../../../CHANGELOG:1235 +#: ../../../CHANGELOG.md:1168 msgid "Added support for Licence Art Libre (#1088)" msgstr "" -#: ../../../CHANGELOG:1236 +#: ../../../CHANGELOG.md:1169 msgid "Broadcast/handle rejected follows (#858)" msgstr "" -#: ../../../CHANGELOG:1237 +#: ../../../CHANGELOG.md:1170 msgid "" "Confirm email without requiring the user to validate the form manually " "(#407)" msgstr "" -#: ../../../CHANGELOG:1238 +#: ../../../CHANGELOG.md:1171 msgid "Display channel and track downloads count (#1178)" msgstr "" -#: ../../../CHANGELOG:1239 +#: ../../../CHANGELOG.md:1172 msgid "Do not include tracks in album API representation (#1102)" msgstr "" -#: ../../../CHANGELOG:1240 +#: ../../../CHANGELOG.md:1173 msgid "" "Dropped python 3.5 support. Python 3.6 is the minimum required version " "(#1099)" msgstr "" -#: ../../../CHANGELOG:1241 +#: ../../../CHANGELOG.md:1174 msgid "Improved keyboard accessibility (#1125)" msgstr "" -#: ../../../CHANGELOG:1242 +#: ../../../CHANGELOG.md:1175 msgid "Improved naming of pages for accessibility (#1127)" msgstr "" -#: ../../../CHANGELOG:1243 +#: ../../../CHANGELOG.md:1176 msgid "Improved shuffle behaviour (#1190)" msgstr "" -#: ../../../CHANGELOG:1244 +#: ../../../CHANGELOG.md:1177 msgid "Increased quality of JPEG thumbnails" msgstr "" -#: ../../../CHANGELOG:1245 +#: ../../../CHANGELOG.md:1178 msgid "Lock focus in modals to improve accessibility (#1128)" msgstr "" -#: ../../../CHANGELOG:1246 +#: ../../../CHANGELOG.md:1179 msgid "" "More consistent search UX on /albums, /artists, /radios and /playlists " "(#1131)" msgstr "" -#: ../../../CHANGELOG:1247 +#: ../../../CHANGELOG.md:1180 msgid "Play button now replace current queue instead of appending to it (#1083)" msgstr "" -#: ../../../CHANGELOG:1248 +#: ../../../CHANGELOG.md:1181 msgid "Set proper lang attribute on HTML document (#1130)" msgstr "" -#: ../../../CHANGELOG:1249 +#: ../../../CHANGELOG.md:1182 msgid "Use semantic headers for accessibility (#1121)" msgstr "" -#: ../../../CHANGELOG:1250 +#: ../../../CHANGELOG.md:1183 msgid "Users can now update their email address (#292)" msgstr "" -#: ../../../CHANGELOG:1251 +#: ../../../CHANGELOG.md:1184 msgid "" "[plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and " "secret are provided" msgstr "" -#: ../../../CHANGELOG:1252 +#: ../../../CHANGELOG.md:1185 msgid "Added a new, large thumbnail size for cover images (#1205" msgstr "" -#: ../../../CHANGELOG:1253 +#: ../../../CHANGELOG.md:1186 msgid "" "Enforce authentication when viewing remote channels, profiles and " "libraries (#1210)" msgstr "" -#: ../../../CHANGELOG:1259 +#: ../../../CHANGELOG.md:1190 msgid "Fix broken media support detection (#1180)" msgstr "" -#: ../../../CHANGELOG:1260 +#: ../../../CHANGELOG.md:1191 msgid "Fix layout issue with playbar on landscape tablets (#1144)" msgstr "" -#: ../../../CHANGELOG:1261 +#: ../../../CHANGELOG.md:1192 msgid "Fix random radio so that podcast content is not picked up (#1140)" msgstr "" -#: ../../../CHANGELOG:1262 +#: ../../../CHANGELOG.md:1193 msgid "" "Fixed an issue with search pages where results would not appear after " "navigating to another page" msgstr "" -#: ../../../CHANGELOG:1263 +#: ../../../CHANGELOG.md:1194 msgid "Fixed crash with negative track position in file tags (#1193)" msgstr "" -#: ../../../CHANGELOG:1264 +#: ../../../CHANGELOG.md:1195 msgid "Handle access errors scanning directories when importing files" msgstr "" -#: ../../../CHANGELOG:1265 ../../../CHANGELOG:1328 +#: ../../../CHANGELOG.md:1196 ../../../CHANGELOG.md:1253 msgid "" "Make channel card updated times more humanly readable, add " "internationalization (#1089)" msgstr "" -#: ../../../CHANGELOG:1266 +#: ../../../CHANGELOG.md:1197 msgid "" "Ensure search page reloads if another search is submitted in the sidebar " "(#1197)" msgstr "" -#: ../../../CHANGELOG:1267 +#: ../../../CHANGELOG.md:1198 msgid "" "Fixed \"scope=subscribed\" on albums, artists, uploads and libraries API " "(#1217)" msgstr "" -#: ../../../CHANGELOG:1268 +#: ../../../CHANGELOG.md:1199 msgid "Fixed broken federation with pods using allow-listing (#1999)" msgstr "" -#: ../../../CHANGELOG:1269 +#: ../../../CHANGELOG.md:1200 msgid "Fixed broken search when using (, \" or & chars (#1196)" msgstr "" -#: ../../../CHANGELOG:1270 +#: ../../../CHANGELOG.md:1201 msgid "Fixed domains table hidden controls when no domains are found (#1198)" msgstr "" -#: ../../../CHANGELOG:1275 +#: ../../../CHANGELOG.md:1205 msgid "Simplify Docker mono-container installation and upgrade documentation" msgstr "" -#: ../../../CHANGELOG:1278 ../../../CHANGELOG:1668 +#: ../../../CHANGELOG.md:1207 ../../../CHANGELOG.md:1579 msgid "" "Contributors to this release (translation, development, documentation, " "reviews, design, testing, third-party projects):" msgstr "" -#: ../../../CHANGELOG:1281 +#: ../../../CHANGELOG.md:1210 msgid "Andy Craze" msgstr "" -#: ../../../CHANGELOG:1282 -msgid "anonymous" -msgstr "" - -#: ../../../CHANGELOG:1283 -msgid "appzer0" -msgstr "" - -#: ../../../CHANGELOG:1284 -msgid "Arne" -msgstr "" - -#: ../../../CHANGELOG:1286 ../../../CHANGELOG:1677 ../../../CHANGELOG:1769 -#: ../../../CHANGELOG:2349 +#: ../../../CHANGELOG.md:1215 ../../../CHANGELOG.md:1588 +#: ../../../CHANGELOG.md:1674 ../../../CHANGELOG.md:2220 msgid "Daniele Lira Mereb" msgstr "" -#: ../../../CHANGELOG:1287 +#: ../../../CHANGELOG.md:1216 msgid "dulz" msgstr "" -#: ../../../CHANGELOG:1288 ../../../CHANGELOG:1681 ../../../CHANGELOG:2080 +#: ../../../CHANGELOG.md:1217 ../../../CHANGELOG.md:1592 +#: ../../../CHANGELOG.md:1973 msgid "Francesc Galí" msgstr "" -#: ../../../CHANGELOG:1289 -msgid "ghose" -msgstr "" - -#: ../../../CHANGELOG:1290 +#: ../../../CHANGELOG.md:1219 msgid "Kalle Anka" msgstr "" -#: ../../../CHANGELOG:1291 +#: ../../../CHANGELOG.md:1220 msgid "mekind" msgstr "" -#: ../../../CHANGELOG:1293 +#: ../../../CHANGELOG.md:1222 msgid "Puri" msgstr "" -#: ../../../CHANGELOG:1294 ../../../CHANGELOG:1699 ../../../CHANGELOG:1775 -msgid "Quentin PAGÈS" -msgstr "" - -#: ../../../CHANGELOG:1295 +#: ../../../CHANGELOG.md:1224 msgid "Raphaël Ventura" msgstr "" -#: ../../../CHANGELOG:1296 +#: ../../../CHANGELOG.md:1225 msgid "Slimane Selyan Amiri" msgstr "" -#: ../../../CHANGELOG:1297 ../../../CHANGELOG:1703 ../../../CHANGELOG:2096 -msgid "SpcCw" -msgstr "" - -#: ../../../CHANGELOG:1298 -msgid "Stefano Pigozzi" -msgstr "" - -#: ../../../CHANGELOG:1299 +#: ../../../CHANGELOG.md:1228 msgid "Sébastien de Melo" msgstr "" -#: ../../../CHANGELOG:1300 +#: ../../../CHANGELOG.md:1229 msgid "Ventura Pérez García" msgstr "" -#: ../../../CHANGELOG:1301 -msgid "vicdorke" -msgstr "" - -#: ../../../CHANGELOG:1302 ../../../CHANGELOG:1711 ../../../CHANGELOG:2100 +#: ../../../CHANGELOG.md:1231 ../../../CHANGELOG.md:1622 +#: ../../../CHANGELOG.md:1993 msgid "Xosé M" msgstr "" -#: ../../../CHANGELOG:1306 +#: ../../../CHANGELOG.md:1233 msgid "0.21.2 (2020-07-27)" msgstr "" -#: ../../../CHANGELOG:1313 +#: ../../../CHANGELOG.md:1239 msgid "" "Added a new ?related=obj_id filter for artists, albums and tracks, based " "on tags" msgstr "" -#: ../../../CHANGELOG:1314 +#: ../../../CHANGELOG.md:1240 msgid "Can now filter subscribed content through API (#1116)" msgstr "" -#: ../../../CHANGELOG:1315 +#: ../../../CHANGELOG.md:1241 msgid "" "Support ordering=random for artists, albums, tracks and channels " "endpoints (#1145)" msgstr "" -#: ../../../CHANGELOG:1316 +#: ../../../CHANGELOG.md:1242 msgid "Use role=alert on forms/toast message to improve accessibility (#1134)" msgstr "" -#: ../../../CHANGELOG:1321 +#: ../../../CHANGELOG.md:1246 msgid "Fix embedded player not working on channel series/album (#1175)" msgstr "" -#: ../../../CHANGELOG:1322 +#: ../../../CHANGELOG.md:1247 msgid "Fixed broken mimetype detection during import (#1165)" msgstr "" -#: ../../../CHANGELOG:1323 +#: ../../../CHANGELOG.md:1248 msgid "Fixed crash when loading recent albums via Subsonic (#1158)" msgstr "" -#: ../../../CHANGELOG:1324 +#: ../../../CHANGELOG.md:1249 msgid "Fixed crash with null help text in admin (#1161)" msgstr "" -#: ../../../CHANGELOG:1325 +#: ../../../CHANGELOG.md:1250 msgid "Fixed invalid metadata when importing multi-artists tracks/albums (#1104)" msgstr "" -#: ../../../CHANGELOG:1326 +#: ../../../CHANGELOG.md:1251 msgid "Fixed player crash when using Funkwhale as a PWA (#1157)" msgstr "" -#: ../../../CHANGELOG:1327 +#: ../../../CHANGELOG.md:1252 msgid "Fixed wrong convert art displaying in some situations (#1138)" msgstr "" -#: ../../../CHANGELOG:1333 +#: ../../../CHANGELOG.md:1258 msgid "Bheesham Persaud" msgstr "" -#: ../../../CHANGELOG:1338 +#: ../../../CHANGELOG.md:1261 msgid "0.21.1 (2020-06-11)" msgstr "" -#: ../../../CHANGELOG:1346 +#: ../../../CHANGELOG.md:1267 msgid "" -"Support a --watch mode with ``import_files`` to automatically add, update" -" and remove files when filesystem is updated (#721)" +"Support a --watch mode with `import_files` to automatically add, update " +"and remove files when filesystem is updated (#721)" msgstr "" -#: ../../../CHANGELOG:1350 +#: ../../../CHANGELOG.md:1271 msgid "Added new channels widget on pod landing page (#1113)" msgstr "" -#: ../../../CHANGELOG:1351 +#: ../../../CHANGELOG.md:1272 msgid "Fix HTML <title> not including instance name in some situations (#1107)" msgstr "" -#: ../../../CHANGELOG:1352 +#: ../../../CHANGELOG.md:1273 msgid "" "Make URL-building logic more resilient against reverse proxy " "misconfiguration (#1085)" msgstr "" -#: ../../../CHANGELOG:1353 +#: ../../../CHANGELOG.md:1274 msgid "Removed unused masonry dependency (#1112)" msgstr "" -#: ../../../CHANGELOG:1354 +#: ../../../CHANGELOG.md:1275 msgid "" "Support for specifying itunes:email and itunes:name in channels for " "compatibility with third-party platforms (#1154)" msgstr "" -#: ../../../CHANGELOG:1355 +#: ../../../CHANGELOG.md:1276 msgid "" "Updated the /api/v1/libraries endpoint to support listing public " "libraries from other users/pods (#1151)" msgstr "" -#: ../../../CHANGELOG:1360 +#: ../../../CHANGELOG.md:1280 msgid "" "Added safeguard to ensure local uploads are never purged from cache " "(#1086)" msgstr "" -#: ../../../CHANGELOG:1361 +#: ../../../CHANGELOG.md:1281 msgid "" "Ensure firefox password manager dont autofill username in search bar " "(#1090)" msgstr "" -#: ../../../CHANGELOG:1362 +#: ../../../CHANGELOG.md:1282 msgid "" "Ensure player doesn't disappear when last queue track is removed manually" " (#1092)" msgstr "" -#: ../../../CHANGELOG:1363 +#: ../../../CHANGELOG.md:1283 msgid "Ensure tracks linked to skipped upload can be pruned (#1011)" msgstr "" -#: ../../../CHANGELOG:1364 +#: ../../../CHANGELOG.md:1284 msgid "Fix playlist modal only listing 50 first playlists (#1087)" msgstr "" -#: ../../../CHANGELOG:1365 +#: ../../../CHANGELOG.md:1285 msgid "Fixed a wording issue on artist channel page (#1117)" msgstr "" -#: ../../../CHANGELOG:1366 +#: ../../../CHANGELOG.md:1286 msgid "Fixed crash on python 3.5 with cli importer (#1155)" msgstr "" -#: ../../../CHANGELOG:1367 +#: ../../../CHANGELOG.md:1287 msgid "Fixed issue when displaying starred tracks on subsonic (#1082)" msgstr "" -#: ../../../CHANGELOG:1368 +#: ../../../CHANGELOG.md:1288 msgid "" "Fixed mimetype detection issue that broke transcoding on some tracks " -"(#1093). Run ``python manage.py fix_uploads --mimetype`` to set proper " +"(#1093). Run `python manage.py fix_uploads --mimetype` to set proper " "mimetypes on existing uploads." msgstr "" -#: ../../../CHANGELOG:1369 +#: ../../../CHANGELOG.md:1289 msgid "" "Fixed page not refreshing when switching between My Library and Explore " "sections (#1091)" msgstr "" -#: ../../../CHANGELOG:1370 +#: ../../../CHANGELOG.md:1290 msgid "Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147)" msgstr "" -#: ../../../CHANGELOG:1371 +#: ../../../CHANGELOG.md:1291 msgid "Fixed wrong album and track count in admin artist API (#1096)" msgstr "" -#: ../../../CHANGELOG:1372 +#: ../../../CHANGELOG.md:1292 msgid "" "Include tracks by album artist when filtering by artist on /api/v1/tracks" " (#1078)" msgstr "" -#: ../../../CHANGELOG:1388 +#: ../../../CHANGELOG.md:1306 msgid "" "Contributors to this release (development, documentation, reviews, " "testing):" msgstr "" -#: ../../../CHANGELOG:1392 ../../../CHANGELOG:1676 ../../../CHANGELOG:2141 -msgid "Creak" -msgstr "" - -#: ../../../CHANGELOG:1393 +#: ../../../CHANGELOG.md:1311 msgid "gisforgabriel" msgstr "" -#: ../../../CHANGELOG:1394 +#: ../../../CHANGELOG.md:1312 msgid "Siren" msgstr "" -#: ../../../CHANGELOG:1399 +#: ../../../CHANGELOG.md:1315 msgid "0.21 \"Agate\" (2020-04-24)" msgstr "" -#: ../../../CHANGELOG:1401 +#: ../../../CHANGELOG.md:1317 msgid "" "This 0.21 release is dedicated to Agate, to thank her, for both having " "created the Funkwhale project, being the current lead developer, and for " @@ -2584,7 +2934,7 @@ msgid "" "Funkwhale community <3" msgstr "" -#: ../../../CHANGELOG:1403 +#: ../../../CHANGELOG.md:1319 msgid "" "We are truly grateful as well to the dozens of people who contributed to " "this release with translations, development, documentation, reviews, " @@ -2592,7 +2942,7 @@ msgid "" "integrations… You made it possible!" msgstr "" -#: ../../../CHANGELOG:1405 +#: ../../../CHANGELOG.md:1321 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html, there are also " @@ -2600,15 +2950,15 @@ msgid "" "(search \"Manual action\")." msgstr "" -#: ../../../CHANGELOG:1409 +#: ../../../CHANGELOG.md:1323 msgid "Channels and podcasts" msgstr "" -#: ../../../CHANGELOG:1411 +#: ../../../CHANGELOG.md:1325 msgid "Funkwhale 0.21 includes a brand new feature: Channels!" msgstr "" -#: ../../../CHANGELOG:1413 +#: ../../../CHANGELOG.md:1327 msgid "" "Channels can be used as a replacement to public libraries, to publish " "audio content, both musical and non-musical. They federate with other " @@ -2618,14 +2968,14 @@ msgid "" "publication, simply visit your profile and create a channel from there." msgstr "" -#: ../../../CHANGELOG:1418 +#: ../../../CHANGELOG.md:1332 msgid "" "Each Funkwhale channel also comes with RSS feed that is compatible with " "existing podcasting applications, like AntennaPod on Android and, within " "Funkwhale, you can also subscribe to any podcast from its RSS feed!" msgstr "" -#: ../../../CHANGELOG:1421 +#: ../../../CHANGELOG.md:1335 msgid "" "Many, many thanks to the numerous people who helped with the feature " "design, development and testing, and in particular to the members of the " @@ -2634,11 +2984,11 @@ msgid "" "with us to ensure compatibility." msgstr "" -#: ../../../CHANGELOG:1426 +#: ../../../CHANGELOG.md:1339 msgid "Redesigned navigation, player and queue" msgstr "" -#: ../../../CHANGELOG:1428 +#: ../../../CHANGELOG.md:1341 msgid "" "This release includes a full redesign of our navigation, player and " "queue. Overall, it should provide a better, less confusing experience, " @@ -2647,33 +2997,33 @@ msgid "" "people, we got it done!" msgstr "" -#: ../../../CHANGELOG:1433 +#: ../../../CHANGELOG.md:1345 msgid "Improved search bar for searching remote objects" msgstr "" -#: ../../../CHANGELOG:1435 +#: ../../../CHANGELOG.md:1347 msgid "" "The search bar now support fetching arbitrary objects using a URL. In " "particular, you can use this to quickly:" msgstr "" -#: ../../../CHANGELOG:1437 +#: ../../../CHANGELOG.md:1349 msgid "Subscribe to a remote library via its URL" msgstr "" -#: ../../../CHANGELOG:1438 +#: ../../../CHANGELOG.md:1350 msgid "Listen a public track from another pod" msgstr "" -#: ../../../CHANGELOG:1439 +#: ../../../CHANGELOG.md:1351 msgid "Subscribe to a channel" msgstr "" -#: ../../../CHANGELOG:1442 +#: ../../../CHANGELOG.md:1353 msgid "Screening for sign-ups and custom sign-up form" msgstr "" -#: ../../../CHANGELOG:1444 +#: ../../../CHANGELOG.md:1355 msgid "" "Instance admins can now configure their pod so that registrations " "required manual approval from a moderator. This is especially useful on " @@ -2681,49 +3031,49 @@ msgid "" "completely, but don't want spam or unwanted users to join your pod." msgstr "" -#: ../../../CHANGELOG:1448 +#: ../../../CHANGELOG.md:1359 msgid "" "When this is enabled and a new user register, their request is put in a " "moderation queue, and moderators are notified by email. When the request " "is approved or refused, the user is also notified by email." msgstr "" -#: ../../../CHANGELOG:1451 +#: ../../../CHANGELOG.md:1362 msgid "In addition, it's also possible to customize the sign-up form by:" msgstr "" -#: ../../../CHANGELOG:1453 +#: ../../../CHANGELOG.md:1364 msgid "Providing a custom help text, in markdown format" msgstr "" -#: ../../../CHANGELOG:1454 +#: ../../../CHANGELOG.md:1365 msgid "" "Including additional fields in the form, for instance to ask the user why" " they want to join. Data collected through these fields is included in " "the sign-up request and viewable by the mods" msgstr "" -#: ../../../CHANGELOG:1457 +#: ../../../CHANGELOG.md:1367 msgid "Federated reports" msgstr "" -#: ../../../CHANGELOG:1459 +#: ../../../CHANGELOG.md:1369 msgid "" "It's now possible to send a copy of a report to the server hosting the " "reported object, in order to make moderation easier and more distributed." msgstr "" -#: ../../../CHANGELOG:1461 +#: ../../../CHANGELOG.md:1371 msgid "" "This feature is inspired by Mastodon's current design, and should work " "with at least Funkwhale and Mastodon servers." msgstr "" -#: ../../../CHANGELOG:1464 +#: ../../../CHANGELOG.md:1373 msgid "Improved search performance" msgstr "" -#: ../../../CHANGELOG:1466 +#: ../../../CHANGELOG.md:1375 msgid "" "Our search engine went through a full rewrite to make it faster. This new" " engine is enabled by default when using the search bar, or when " @@ -2731,805 +3081,797 @@ msgid "" "text search capabilities." msgstr "" -#: ../../../CHANGELOG:1470 +#: ../../../CHANGELOG.md:1379 msgid "" "During our tests, we observed huge performance improvements after the " "switch, by an order of magnitude. This should be especially perceptible " "on pods with large databases, more modest hardware or hard drives." msgstr "" -#: ../../../CHANGELOG:1474 +#: ../../../CHANGELOG.md:1383 msgid "" "We plan to remove the old engine in an upcoming release. In the meantime," " if anything goes wrong, you can switch back by setting " -"``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` file." +"`USE_FULL_TEXT_SEARCH=false` in your `.env` file." msgstr "" -#: ../../../CHANGELOG:1478 +#: ../../../CHANGELOG.md:1386 msgid "Enforced email verification" msgstr "" -#: ../../../CHANGELOG:1480 +#: ../../../CHANGELOG.md:1388 msgid "" -"The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE`` setting can be used " -"to make email verification mandatory for your users. It defaults to " -"``false``, and doesn't apply to superuser accounts created through the " -"CLI." +"The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to" +" make email verification mandatory for your users. It defaults to " +"`false`, and doesn't apply to superuser accounts created through the CLI." msgstr "" -#: ../../../CHANGELOG:1484 +#: ../../../CHANGELOG.md:1392 msgid "If you enable this, ensure you have a SMTP server configured too." msgstr "" -#: ../../../CHANGELOG:1487 +#: ../../../CHANGELOG.md:1394 msgid "More reliable CLI importer [manual action required]" msgstr "" -#: ../../../CHANGELOG:1489 +#: ../../../CHANGELOG.md:1396 msgid "" "Our CLI importer is now more reliable and less prone to Out-of-Memory " "issues, especially when scanning large libraries. (hundreds of GB or " "bigger)" msgstr "" -#: ../../../CHANGELOG:1491 +#: ../../../CHANGELOG.md:1398 msgid "" "We've also improved the directory crawling logic, so that you don't have " "to use glob patterns or specify extensions when importing. As a result, " "the syntax for providing directories to the command as changed slightly." msgstr "" -#: ../../../CHANGELOG:1493 +#: ../../../CHANGELOG.md:1400 msgid "" -"If you use the ``import_files`` command, this means you should replace " -"scripts that look like this::" +"If you use the `import_files` command, this means you should replace " +"scripts that look like this:" msgstr "" -#: ../../../CHANGELOG:1497 -msgid "By this::" +#: ../../../CHANGELOG.md:1406 +msgid "By this:" msgstr "" -#: ../../../CHANGELOG:1501 +#: ../../../CHANGELOG.md:1412 msgid "" "And Funkwhale will happily import any supported audio file from the " "specified directory." msgstr "" -#: ../../../CHANGELOG:1504 ../../../CHANGELOG:1594 +#: ../../../CHANGELOG.md:1414 ../../../CHANGELOG.md:1505 msgid "User management through the server CLI" msgstr "" -#: ../../../CHANGELOG:1506 +#: ../../../CHANGELOG.md:1416 msgid "" "We now support user creation (incl. non-admin accounts), update and " "removal directly from the server CLI. Typical use cases include:" msgstr "" -#: ../../../CHANGELOG:1509 +#: ../../../CHANGELOG.md:1419 msgid "Changing a user password from the command line" msgstr "" -#: ../../../CHANGELOG:1510 +#: ../../../CHANGELOG.md:1420 msgid "Creating or updating users from deployments scripts or playbooks" msgstr "" -#: ../../../CHANGELOG:1511 +#: ../../../CHANGELOG.md:1421 msgid "Removing or granting permissions or upload quota to multiple users at once" msgstr "" -#: ../../../CHANGELOG:1512 +#: ../../../CHANGELOG.md:1422 msgid "Marking multiple users as inactive" msgstr "" -#: ../../../CHANGELOG:1514 +#: ../../../CHANGELOG.md:1424 msgid "" -"All user-related commands are available under the ``python manage.py fw " -"users`` namespace. Please refer to the `Admin documentation " -"<https://docs.funkwhale.audio/admin/commands.html#user-management>`_ for " -"more information and instructions." +"All user-related commands are available under the `python manage.py fw " +"users` namespace. Please refer to the [Admin " +"documentation](https://docs.funkwhale.audio/admin/commands.html#user-" +"management) for more information and instructions." msgstr "" -#: ../../../CHANGELOG:1518 -msgid "" -"Progressive web app [Manual action sugFull list of changes " -"^^^^^^^^^^^^^^^^^^^^gested, non-docker only] " -"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" +#: ../../../CHANGELOG.md:1428 +msgid "Progressive web app [Manual action suggested, non-docker only]" msgstr "" -#: ../../../CHANGELOG:1522 +#: ../../../CHANGELOG.md:1430 msgid "" "We've made Funkwhale's Web UI a Progressive Web Application (PWA), in " "order to improve the user experience during offline use, and on mobile " "devices." msgstr "" -#: ../../../CHANGELOG:1525 +#: ../../../CHANGELOG.md:1433 msgid "" "In order to fully benefit from this change, if your pod isn't deployed " "using Docker, ensure the following instruction is present in your nginx " -"configuration::" +"configuration:" msgstr "" -#: ../../../CHANGELOG:1534 +#: ../../../CHANGELOG.md:1443 msgid "" "Postgres docker changed environment variable [manual action required, " "docker multi-container only]" msgstr "" -#: ../../../CHANGELOG:1536 +#: ../../../CHANGELOG.md:1445 msgid "" "If you're running with docker and our multi-container setup, there was a " "breaking change starting in the 11.7 postgres image (https://github.com" "/docker-library/postgres/pull/658)" msgstr "" -#: ../../../CHANGELOG:1538 -msgid "" -"You need to add this to your .env file: " -"``POSTGRES_HOST_AUTH_METHOD=trust``" +#: ../../../CHANGELOG.md:1447 +msgid "You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust`" msgstr "" -#: ../../../CHANGELOG:1540 +#: ../../../CHANGELOG.md:1449 msgid "Newer deployments aren't affected." msgstr "" -#: ../../../CHANGELOG:1543 +#: ../../../CHANGELOG.md:1451 msgid "" "Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one" " only]" msgstr "" -#: ../../../CHANGELOG:1545 +#: ../../../CHANGELOG.md:1453 msgid "" -"With our upgrade to Alpine 3.10, the ``funkwhale/all-in-one`` image now " +"With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now " "includes PostgreSQL 11." msgstr "" -#: ../../../CHANGELOG:1547 +#: ../../../CHANGELOG.md:1455 msgid "" "In order to update to Funkwhale 0.21, you will first need to upgrade " -"Funkwhale's PostgreSQL database, following the steps below::" +"Funkwhale's PostgreSQL database, following the steps below:" msgstr "" -#: ../../../CHANGELOG:1574 +#: ../../../CHANGELOG.md:1484 msgid "" "Once you have completed the Funkwhale upgrade with our regular " "instructions and everything works properly, you can remove the " -"backups/old files::" +"backups/old files:" msgstr "" -#: ../../../CHANGELOG:1587 +#: ../../../CHANGELOG.md:1498 msgid "Support for publishing and subscribing to podcasts (#170)" msgstr "" -#: ../../../CHANGELOG:1588 +#: ../../../CHANGELOG.md:1499 msgid "Brand new navigation, queue and player redesign (#594)" msgstr "" -#: ../../../CHANGELOG:1589 +#: ../../../CHANGELOG.md:1500 msgid "Can now browse a library content through the UI (#926)" msgstr "" -#: ../../../CHANGELOG:1590 +#: ../../../CHANGELOG.md:1501 msgid "Federated reports (#1038)" msgstr "" -#: ../../../CHANGELOG:1591 +#: ../../../CHANGELOG.md:1502 msgid "Screening for sign-ups (#1040)" msgstr "" -#: ../../../CHANGELOG:1592 +#: ../../../CHANGELOG.md:1503 msgid "Make it possible to enforce email verification (#1039)" msgstr "" -#: ../../../CHANGELOG:1593 +#: ../../../CHANGELOG.md:1504 msgid "Added a new radio based on another user listenings (#1060)" msgstr "" -#: ../../../CHANGELOG:1598 +#: ../../../CHANGELOG.md:1509 msgid "Added ability to reject library follows from notifications screen (#859)" msgstr "" -#: ../../../CHANGELOG:1599 +#: ../../../CHANGELOG.md:1510 msgid "" "Added periodic background task and CLI command to associate genre tags to" " artists and albums based on identical tags found on corresponding tracks" " (#988)" msgstr "" -#: ../../../CHANGELOG:1600 +#: ../../../CHANGELOG.md:1511 msgid "" "Added support for CELERYD_CONCURRENCY env var to control the number of " "worker processes (#997)" msgstr "" -#: ../../../CHANGELOG:1601 +#: ../../../CHANGELOG.md:1512 msgid "Added the ability to sort albums by release date (#1013)" msgstr "" -#: ../../../CHANGELOG:1602 +#: ../../../CHANGELOG.md:1513 msgid "Added two new radios to play your own content or a given library tracks" msgstr "" -#: ../../../CHANGELOG:1603 +#: ../../../CHANGELOG.md:1514 msgid "" "Advertise list of known nodes on /api/v1/federation/domains and in " "nodeinfo if stats sharing is enabled" msgstr "" -#: ../../../CHANGELOG:1604 +#: ../../../CHANGELOG.md:1515 msgid "" "Changed footer to use instance name if available, and append ellipses if " "instance URL/Name is too long (#1012)" msgstr "" -#: ../../../CHANGELOG:1605 +#: ../../../CHANGELOG.md:1516 msgid "Favor local uploads when playing a track with multiple uploads (#1036)" msgstr "" -#: ../../../CHANGELOG:1606 +#: ../../../CHANGELOG.md:1517 msgid "Include only local content in nodeinfo stats, added downloads count" msgstr "" -#: ../../../CHANGELOG:1607 +#: ../../../CHANGELOG.md:1518 msgid "" "Make media and static files serving more reliable when reverse proxy " -"X_FORWARDED_* headers are incorrect (#947)" +"`X_FORWARDED_*` headers are incorrect (#947)" msgstr "" -#: ../../../CHANGELOG:1608 +#: ../../../CHANGELOG.md:1519 msgid "Order the playlist columns by modification date in the Browse tab (#775)" msgstr "" -#: ../../../CHANGELOG:1609 +#: ../../../CHANGELOG.md:1520 msgid "" "Reduced size of funkwhale/funkwhale docker images thanks to multi-stage " "builds (!1042)" msgstr "" -#: ../../../CHANGELOG:1610 +#: ../../../CHANGELOG.md:1521 msgid "" "Remember display settings in Album, Artist, Radio and Playlist views " "(#391)" msgstr "" -#: ../../../CHANGELOG:1611 +#: ../../../CHANGELOG.md:1522 msgid "Removed unnecessary \"Federation music needs approval\" setting (#959)" msgstr "" -#: ../../../CHANGELOG:1612 +#: ../../../CHANGELOG.md:1523 msgid "Replaced our slow research logic by PostgreSQL full-text search (#994)" msgstr "" -#: ../../../CHANGELOG:1613 +#: ../../../CHANGELOG.md:1524 msgid "" "Support autoplay when loading embed frame from Mastodon and third-party " "websites (#1041)" msgstr "" -#: ../../../CHANGELOG:1614 +#: ../../../CHANGELOG.md:1525 msgid "" "Support filtering playlist by name and several additional UX improvements" " in playlists modal (#974)" msgstr "" -#: ../../../CHANGELOG:1615 +#: ../../../CHANGELOG.md:1526 msgid "Support modifying album cover art through the web UI (#588)" msgstr "" -#: ../../../CHANGELOG:1616 +#: ../../../CHANGELOG.md:1527 msgid "" "Use a dedicated scope for throttling subsonic to avoid intrusive rate-" "limiting" msgstr "" -#: ../../../CHANGELOG:1617 +#: ../../../CHANGELOG.md:1528 msgid "" "Use same markdown widget for all content fields (rules, description, " "reports, notes, etc.)" msgstr "" -#: ../../../CHANGELOG:1618 +#: ../../../CHANGELOG.md:1529 msgid "" "CLI Importer is now more reliable and less resource-hungry on large " "libraries" msgstr "" -#: ../../../CHANGELOG:1619 ../../../CHANGELOG:1643 +#: ../../../CHANGELOG.md:1530 ../../../CHANGELOG.md:1554 msgid "Add support custom domain for S3 storage" msgstr "" -#: ../../../CHANGELOG:1620 +#: ../../../CHANGELOG.md:1531 msgid "Better placeholders for channels when there are no episodes or series" msgstr "" -#: ../../../CHANGELOG:1621 +#: ../../../CHANGELOG.md:1532 msgid "Updated documentation for 0.21 release" msgstr "" -#: ../../../CHANGELOG:1622 +#: ../../../CHANGELOG.md:1533 msgid "Improved performance and error handling when fetching remote attachments" msgstr "" -#: ../../../CHANGELOG:1626 +#: ../../../CHANGELOG.md:1537 msgid "Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961)" msgstr "" -#: ../../../CHANGELOG:1627 +#: ../../../CHANGELOG.md:1538 msgid "" "Fix issue with browser shortcuts such as search and focus URL not being " "recognised (#340, #985)" msgstr "" -#: ../../../CHANGELOG:1628 +#: ../../../CHANGELOG.md:1539 msgid "Fixed admin dropdown not showing after login (#1042)" msgstr "" -#: ../../../CHANGELOG:1629 +#: ../../../CHANGELOG.md:1540 msgid "Fixed an issue with celerybeat container failing to restart (#1004)" msgstr "" -#: ../../../CHANGELOG:1630 +#: ../../../CHANGELOG.md:1541 msgid "Fixed invalid displayed number of tracks in playlist (#986)" msgstr "" -#: ../../../CHANGELOG:1631 +#: ../../../CHANGELOG.md:1542 msgid "Fixed issue with recent results not being loaded from the API (#948)" msgstr "" -#: ../../../CHANGELOG:1632 +#: ../../../CHANGELOG.md:1543 msgid "Fixed issue with sorting by album name not working (#960)" msgstr "" -#: ../../../CHANGELOG:1633 +#: ../../../CHANGELOG.md:1544 msgid "" "Fixed short audio glitch when switching switching to another track with " "player paused (#970)" msgstr "" -#: ../../../CHANGELOG:1634 +#: ../../../CHANGELOG.md:1545 msgid "" "Improved deduplication logic to prevent skipped files during import " "(#348, #474, #557, #740, #928)" msgstr "" -#: ../../../CHANGELOG:1635 +#: ../../../CHANGELOG.md:1546 msgid "More resilient tag parsing with empty release date or album artist (#1037)" msgstr "" -#: ../../../CHANGELOG:1636 +#: ../../../CHANGELOG.md:1547 msgid "More robust importer against malformed dates (#966)" msgstr "" -#: ../../../CHANGELOG:1637 +#: ../../../CHANGELOG.md:1548 msgid "" "Removed \"nodeinfo disabled\" setting, as nodeinfo is required for the UI" " to work (#982)" msgstr "" -#: ../../../CHANGELOG:1638 +#: ../../../CHANGELOG.md:1549 msgid "Replaced PDF icon by List icon in playlist placeholder (#943)" msgstr "" -#: ../../../CHANGELOG:1639 +#: ../../../CHANGELOG.md:1550 msgid "" "Resolve an issue where disc numbers were not taken into consideration " "when playing an album from the album card (#1006)" msgstr "" -#: ../../../CHANGELOG:1640 +#: ../../../CHANGELOG.md:1551 msgid "Set correct size for album covers in playlist cards (#680)" msgstr "" -#: ../../../CHANGELOG:1641 +#: ../../../CHANGELOG.md:1552 msgid "Remove double spaces in ChannelForm" msgstr "" -#: ../../../CHANGELOG:1642 +#: ../../../CHANGELOG.md:1553 msgid "Deduplicate tags in Audio ActivityPub representation" msgstr "" -#: ../../../CHANGELOG:1644 +#: ../../../CHANGELOG.md:1555 msgid "Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075)" msgstr "" -#: ../../../CHANGELOG:1645 +#: ../../../CHANGELOG.md:1556 msgid "Exclude external podcasts from library home" msgstr "" -#: ../../../CHANGELOG:1646 +#: ../../../CHANGELOG.md:1557 msgid "Fixed broken channel save when description is too long" msgstr "" -#: ../../../CHANGELOG:1647 +#: ../../../CHANGELOG.md:1558 msgid "" "Fixed 500 error when federation is disabled and application+json is " "requested" msgstr "" -#: ../../../CHANGELOG:1648 +#: ../../../CHANGELOG.md:1559 msgid "Fixed minor subsonic API crash" msgstr "" -#: ../../../CHANGELOG:1649 +#: ../../../CHANGELOG.md:1560 msgid "Fixed broken local profile page when allow-list is enabled" msgstr "" -#: ../../../CHANGELOG:1650 +#: ../../../CHANGELOG.md:1561 msgid "" "Fixed issue with confirmation email not sending when signup-approval was " "enabled" msgstr "" -#: ../../../CHANGELOG:1651 +#: ../../../CHANGELOG.md:1562 msgid "Ensure 0 quota on user is honored" msgstr "" -#: ../../../CHANGELOG:1652 +#: ../../../CHANGELOG.md:1563 msgid "Fixed attachments URL not honoring media URL" msgstr "" -#: ../../../CHANGELOG:1653 +#: ../../../CHANGELOG.md:1564 msgid "Fix grammar in msg string in TrackBase.vue" msgstr "" -#: ../../../CHANGELOG:1654 +#: ../../../CHANGELOG.md:1565 msgid "Fix typo in SubscribeButton.vue" msgstr "" -#: ../../../CHANGELOG:1656 +#: ../../../CHANGELOG.md:1567 msgid "Translations:" msgstr "" -#: ../../../CHANGELOG:1658 +#: ../../../CHANGELOG.md:1569 msgid "Arabic" msgstr "" -#: ../../../CHANGELOG:1659 +#: ../../../CHANGELOG.md:1570 msgid "Catalan" msgstr "" -#: ../../../CHANGELOG:1660 +#: ../../../CHANGELOG.md:1571 msgid "English (United Kingdom)" msgstr "" -#: ../../../CHANGELOG:1661 +#: ../../../CHANGELOG.md:1572 msgid "German" msgstr "" -#: ../../../CHANGELOG:1662 +#: ../../../CHANGELOG.md:1573 msgid "Hungarian" msgstr "" -#: ../../../CHANGELOG:1663 +#: ../../../CHANGELOG.md:1574 msgid "Japanese" msgstr "" -#: ../../../CHANGELOG:1664 +#: ../../../CHANGELOG.md:1575 msgid "Occitan" msgstr "" -#: ../../../CHANGELOG:1665 +#: ../../../CHANGELOG.md:1576 msgid "Portuguese (Brazil)" msgstr "" -#: ../../../CHANGELOG:1666 +#: ../../../CHANGELOG.md:1577 msgid "Russian" msgstr "" -#: ../../../CHANGELOG:1671 +#: ../../../CHANGELOG.md:1582 msgid "annando" msgstr "" -#: ../../../CHANGELOG:1672 +#: ../../../CHANGELOG.md:1583 msgid "Anton Strömkvist" msgstr "" -#: ../../../CHANGELOG:1673 +#: ../../../CHANGELOG.md:1584 msgid "Audrey" msgstr "" -#: ../../../CHANGELOG:1674 ../../../CHANGELOG:2076 ../../../CHANGELOG:2346 +#: ../../../CHANGELOG.md:1585 ../../../CHANGELOG.md:1969 +#: ../../../CHANGELOG.md:2217 msgid "ButterflyOfFire" msgstr "" -#: ../../../CHANGELOG:1678 +#: ../../../CHANGELOG.md:1589 msgid "dashie" msgstr "" -#: ../../../CHANGELOG:1679 +#: ../../../CHANGELOG.md:1590 msgid "Eloisa" msgstr "" -#: ../../../CHANGELOG:1680 +#: ../../../CHANGELOG.md:1591 msgid "eorn" msgstr "" -#: ../../../CHANGELOG:1682 +#: ../../../CHANGELOG.md:1593 msgid "gerhardbeck" msgstr "" -#: ../../../CHANGELOG:1683 +#: ../../../CHANGELOG.md:1594 msgid "GinnyMcQueen" msgstr "" -#: ../../../CHANGELOG:1684 +#: ../../../CHANGELOG.md:1595 msgid "guillermau" msgstr "" -#: ../../../CHANGELOG:1685 +#: ../../../CHANGELOG.md:1596 msgid "Haelwenn" msgstr "" -#: ../../../CHANGELOG:1686 +#: ../../../CHANGELOG.md:1597 msgid "jinxx" msgstr "" -#: ../../../CHANGELOG:1687 +#: ../../../CHANGELOG.md:1598 msgid "Jonathan Aylard" msgstr "" -#: ../../../CHANGELOG:1689 +#: ../../../CHANGELOG.md:1600 msgid "M.G" msgstr "" -#: ../../../CHANGELOG:1690 -msgid "marzzzello" -msgstr "" - -#: ../../../CHANGELOG:1691 +#: ../../../CHANGELOG.md:1602 msgid "Mathé Grievink" msgstr "" -#: ../../../CHANGELOG:1692 ../../../CHANGELOG:2090 ../../../CHANGELOG:2358 +#: ../../../CHANGELOG.md:1603 ../../../CHANGELOG.md:1983 +#: ../../../CHANGELOG.md:2229 msgid "Mélanie Chauvel" msgstr "" -#: ../../../CHANGELOG:1693 +#: ../../../CHANGELOG.md:1604 msgid "Mjourdan" msgstr "" -#: ../../../CHANGELOG:1694 +#: ../../../CHANGELOG.md:1605 msgid "Morgan Kesler" msgstr "" -#: ../../../CHANGELOG:1695 +#: ../../../CHANGELOG.md:1606 msgid "Noe Gaumont" msgstr "" -#: ../../../CHANGELOG:1696 +#: ../../../CHANGELOG.md:1607 msgid "Noureddine HADDAG" msgstr "" -#: ../../../CHANGELOG:1697 +#: ../../../CHANGELOG.md:1608 msgid "Ollie" msgstr "" -#: ../../../CHANGELOG:1698 +#: ../../../CHANGELOG.md:1609 msgid "Peter Wickenberg" msgstr "" -#: ../../../CHANGELOG:1700 ../../../CHANGELOG:2363 +#: ../../../CHANGELOG.md:1611 ../../../CHANGELOG.md:2234 msgid "Renon" msgstr "" -#: ../../../CHANGELOG:1701 +#: ../../../CHANGELOG.md:1612 msgid "Satsuki Yanagi" msgstr "" -#: ../../../CHANGELOG:1702 +#: ../../../CHANGELOG.md:1613 msgid "Shlee" msgstr "" -#: ../../../CHANGELOG:1704 +#: ../../../CHANGELOG.md:1615 msgid "techknowlogick" msgstr "" -#: ../../../CHANGELOG:1705 +#: ../../../CHANGELOG.md:1616 msgid "ThibG" msgstr "" -#: ../../../CHANGELOG:1707 +#: ../../../CHANGELOG.md:1618 msgid "unklebonehead" msgstr "" -#: ../../../CHANGELOG:1708 +#: ../../../CHANGELOG.md:1619 msgid "wakest" msgstr "" -#: ../../../CHANGELOG:1709 +#: ../../../CHANGELOG.md:1620 msgid "wxcafé" msgstr "" -#: ../../../CHANGELOG:1710 ../../../CHANGELOG:2099 +#: ../../../CHANGELOG.md:1621 ../../../CHANGELOG.md:1992 msgid "Xaloc" msgstr "" -#: ../../../CHANGELOG:1714 +#: ../../../CHANGELOG.md:1624 msgid "0.20.1 (2019-10-28)" msgstr "" -#: ../../../CHANGELOG:1721 ../../../CHANGELOG:1742 +#: ../../../CHANGELOG.md:1628 ../../../CHANGELOG.md:1650 msgid "" "Denormalized audio permission logic in a separate table to enhance " "performance" msgstr "" -#: ../../../CHANGELOG:1723 +#: ../../../CHANGELOG.md:1630 msgid "" "With this release, we're introducing a performance enhancement that " "should reduce the load on the database and API servers (cf " "https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939)." msgstr "" -#: ../../../CHANGELOG:1726 +#: ../../../CHANGELOG.md:1633 msgid "" "Under the hood, we now maintain a separate table to link users to the " "tracks they are allowed to see. This change is **disabled** by default, " "but should be enabled by default starting in Funkwhale 0.21." msgstr "" -#: ../../../CHANGELOG:1729 +#: ../../../CHANGELOG.md:1636 msgid "" -"If you want to try it now, add ``MUSIC_USE_DENORMALIZATION=True`` to your" -" ``.env`` file, restart Funkwhale, and run the following command::" +"If you want to try it now, add `MUSIC_USE_DENORMALIZATION=True` to your " +"`.env` file, restart Funkwhale, and run the following command:" msgstr "" -#: ../../../CHANGELOG:1734 +#: ../../../CHANGELOG.md:1643 msgid "" "This shouldn't cause any regression, but we'd appreciate if you could " "test this before the 0.21 release and report any unusual behaviour " "regarding tracks, albums and artists visibility." msgstr "" -#: ../../../CHANGELOG:1740 +#: ../../../CHANGELOG.md:1648 msgid "Added a retry option for failed uploads (#942)" msgstr "" -#: ../../../CHANGELOG:1741 +#: ../../../CHANGELOG.md:1649 msgid "Added feedback via loading spinner when searching a remote library" msgstr "" -#: ../../../CHANGELOG:1743 +#: ../../../CHANGELOG.md:1651 msgid "" "Placeholders will now be shown if no content is available across the " "application (#750)" msgstr "" -#: ../../../CHANGELOG:1744 +#: ../../../CHANGELOG.md:1652 msgid "" "Reduce the number of simultaneous DB connections under some deployment " "scenario" msgstr "" -#: ../../../CHANGELOG:1745 +#: ../../../CHANGELOG.md:1653 msgid "Support byYear filtering in Subsonic API (#936)" msgstr "" -#: ../../../CHANGELOG:1750 +#: ../../../CHANGELOG.md:1657 msgid "Ensure password input doesn't overflow outside of container (#933)" msgstr "" -#: ../../../CHANGELOG:1751 +#: ../../../CHANGELOG.md:1658 msgid "Fix audio serving issues under S3/nginx when signatures are enabled" msgstr "" -#: ../../../CHANGELOG:1752 +#: ../../../CHANGELOG.md:1659 msgid "Fix import crash when importing M4A file with no embedded cover (#946)" msgstr "" -#: ../../../CHANGELOG:1753 +#: ../../../CHANGELOG.md:1660 msgid "Fix tag exclusion in custom radios (#950)" msgstr "" -#: ../../../CHANGELOG:1754 +#: ../../../CHANGELOG.md:1661 msgid "Fixed an issue with embed player CSS being purged during build (#935)" msgstr "" -#: ../../../CHANGELOG:1755 +#: ../../../CHANGELOG.md:1662 msgid "Fixed escaped pod name displayed on home/about page (#945)" msgstr "" -#: ../../../CHANGELOG:1756 +#: ../../../CHANGELOG.md:1663 msgid "Fixed pagination in subsonic getSongsByGenre endpoint (#954)" msgstr "" -#: ../../../CHANGELOG:1757 +#: ../../../CHANGELOG.md:1664 msgid "Fixed style glitches in dropdowns" msgstr "" -#: ../../../CHANGELOG:1762 +#: ../../../CHANGELOG.md:1668 msgid "" "Documented how to create DB extension by hand in case of permission error" " during migrations (#934)" msgstr "" -#: ../../../CHANGELOG:1765 ../../../CHANGELOG:2073 +#: ../../../CHANGELOG.md:1670 ../../../CHANGELOG.md:1966 msgid "" "Contributors to this release (translation, development, documentation, " "reviews, design):" msgstr "" -#: ../../../CHANGELOG:1768 +#: ../../../CHANGELOG.md:1673 msgid "Dag Stenstad" msgstr "" -#: ../../../CHANGELOG:1773 +#: ../../../CHANGELOG.md:1678 msgid "knuxify" msgstr "" -#: ../../../CHANGELOG:1774 +#: ../../../CHANGELOG.md:1679 msgid "Mateus Mattei Garcia" msgstr "" -#: ../../../CHANGELOG:1779 +#: ../../../CHANGELOG.md:1682 msgid "0.20 (2019-10-04)" msgstr "" -#: ../../../CHANGELOG:1786 +#: ../../../CHANGELOG.md:1686 msgid "Support for genres via tags" msgstr "" -#: ../../../CHANGELOG:1788 +#: ../../../CHANGELOG.md:1688 msgid "One of our most requested missing features is now available!" msgstr "" -#: ../../../CHANGELOG:1790 +#: ../../../CHANGELOG.md:1690 msgid "" "Starting with Funkwhale 0.20, Funkwhale will automatically extract genre " "information from uploaded files and associate it with the corresponding " "tracks in the form of tags (similar to Mastodon or Twitter hashtags). " -"Please refer to `our tagging documentation " -"<https://docs.funkwhale.audio/users/upload.html#tagging-files>`_ for more" -" information regarding the tagging process." +"Please refer to [our tagging " +"documentation](https://docs.funkwhale.audio/users/upload.html#tagging-" +"files) for more information regarding the tagging process." msgstr "" -#: ../../../CHANGELOG:1796 +#: ../../../CHANGELOG.md:1696 msgid "" "Tags can also be associated with artists and albums, and updated after " "upload through the UI using the edit system released in Funkwhale 0.19. " "Tags are also fetched when retrieving content via federation." msgstr "" -#: ../../../CHANGELOG:1800 +#: ../../../CHANGELOG.md:1700 msgid "Tags are used in various places to enhance user experience:" msgstr "" -#: ../../../CHANGELOG:1802 +#: ../../../CHANGELOG.md:1702 msgid "Tags are listed on tracks, albums and artist profiles" msgstr "" -#: ../../../CHANGELOG:1803 +#: ../../../CHANGELOG.md:1703 msgid "" "Each tag has a dedicated page were you can browse corresponding content " "and quickly start a radio" msgstr "" -#: ../../../CHANGELOG:1804 +#: ../../../CHANGELOG.md:1704 msgid "The custom radio builder now supports using tags" msgstr "" -#: ../../../CHANGELOG:1805 +#: ../../../CHANGELOG.md:1705 msgid "" "Subsonic apps that support genres - such as DSub or Ultrasonic - should " "display this information as well" msgstr "" -#: ../../../CHANGELOG:1807 +#: ../../../CHANGELOG.md:1707 msgid "" "If you are a pod admin and want to extract tags from already uploaded " -"content, you run `this snippet " -"<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__ and " -"`this snippet " -"<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ in a " -"``python manage.py shell``." +"content, you run [this " +"snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) and" +" [this " +"snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in " +"a `python manage.py shell`." msgstr "" -#: ../../../CHANGELOG:1811 +#: ../../../CHANGELOG.md:1710 msgid "Content and account reports" msgstr "" -#: ../../../CHANGELOG:1813 +#: ../../../CHANGELOG.md:1712 msgid "" "It is now possible to report content, such as artists, tracks or " "libraries, as well as user accounts. Such reports are forwarded to the " @@ -3537,7 +3879,7 @@ msgid "" "accounts or take any other action they deem necessary." msgstr "" -#: ../../../CHANGELOG:1816 +#: ../../../CHANGELOG.md:1715 msgid "" "By default, both anonymous and authenticated users can submit these " "reports. This makes sure moderators can receive and handle takedown " @@ -3546,39 +3888,35 @@ msgid "" " reports completely via your pod settings." msgstr "" -#: ../../../CHANGELOG:1820 +#: ../../../CHANGELOG.md:1719 msgid "Federation of the reports will be supported in a future release." msgstr "" -#: ../../../CHANGELOG:1822 ../../../CHANGELOG:1836 +#: ../../../CHANGELOG.md:1721 ../../../CHANGELOG.md:1734 msgid "" "For more information about this feature, please check out our " "documentation:" msgstr "" -#: ../../../CHANGELOG:1824 -msgid "" -"`User documentation " -"<https://docs.funkwhale.audio/moderator/reports.html>`__" +#: ../../../CHANGELOG.md:1723 +msgid "[User documentation](https://docs.funkwhale.audio/moderator/reports.html)" msgstr "" -#: ../../../CHANGELOG:1825 -msgid "" -"`Moderator documentation " -"<https://docs.funkwhale.audio/users/reports.html>`__" +#: ../../../CHANGELOG.md:1724 +msgid "[Moderator documentation](https://docs.funkwhale.audio/users/reports.html)" msgstr "" -#: ../../../CHANGELOG:1828 +#: ../../../CHANGELOG.md:1726 msgid "Account deletion" msgstr "" -#: ../../../CHANGELOG:1830 +#: ../../../CHANGELOG.md:1728 msgid "" "Users can now delete their account themselves, without involving an " "administrator." msgstr "" -#: ../../../CHANGELOG:1832 +#: ../../../CHANGELOG.md:1730 msgid "" "The deletion process will remove any local data and objects associated " "with the account, but the username won't be able to new users to avoid " @@ -3586,113 +3924,113 @@ msgid "" " federation." msgstr "" -#: ../../../CHANGELOG:1838 -msgid "`User documentation <https://docs.funkwhale.audio/users/account.html>`__" +#: ../../../CHANGELOG.md:1736 +msgid "[User documentation](https://docs.funkwhale.audio/users/account.html)" msgstr "" -#: ../../../CHANGELOG:1841 +#: ../../../CHANGELOG.md:1738 msgid "Landing and about page redesign [Manual action suggested]" msgstr "" -#: ../../../CHANGELOG:1843 +#: ../../../CHANGELOG.md:1740 msgid "" "In this release, we've completely redesigned the landing and about page, " "by making it more useful and adapted to your pod configuration. Among " "other things, the landing page will now include:" msgstr "" -#: ../../../CHANGELOG:1846 +#: ../../../CHANGELOG.md:1743 msgid "your pod and an excerpt from your pod's description" msgstr "" -#: ../../../CHANGELOG:1847 ../../../CHANGELOG:1859 +#: ../../../CHANGELOG.md:1744 ../../../CHANGELOG.md:1756 msgid "your pod banner image, if any" msgstr "" -#: ../../../CHANGELOG:1848 ../../../CHANGELOG:1860 +#: ../../../CHANGELOG.md:1745 ../../../CHANGELOG.md:1757 msgid "your contact email, if any" msgstr "" -#: ../../../CHANGELOG:1849 +#: ../../../CHANGELOG.md:1746 msgid "the login form" msgstr "" -#: ../../../CHANGELOG:1850 +#: ../../../CHANGELOG.md:1747 msgid "the signup form (if registrations are open on your pod)" msgstr "" -#: ../../../CHANGELOG:1851 +#: ../../../CHANGELOG.md:1748 msgid "some basic statistics about your pod" msgstr "" -#: ../../../CHANGELOG:1852 +#: ../../../CHANGELOG.md:1749 msgid "" "a widget including recently uploaded albums, if anonymous access is " "enabled" msgstr "" -#: ../../../CHANGELOG:1854 +#: ../../../CHANGELOG.md:1751 msgid "" "The landing page will still include some information about Funkwhale, but" " in a less intrusive and proeminent way than before." msgstr "" -#: ../../../CHANGELOG:1856 +#: ../../../CHANGELOG.md:1753 msgid "Additionally, the about page now includes:" msgstr "" -#: ../../../CHANGELOG:1858 +#: ../../../CHANGELOG.md:1755 msgid "your pod name, description, rules and terms" msgstr "" -#: ../../../CHANGELOG:1861 +#: ../../../CHANGELOG.md:1758 msgid "comprehensive statistics about your pod" msgstr "" -#: ../../../CHANGELOG:1862 +#: ../../../CHANGELOG.md:1759 msgid "" "some info about your pod configuration, such as registration and " "federation status or the default upload quota for new users" msgstr "" -#: ../../../CHANGELOG:1864 +#: ../../../CHANGELOG.md:1761 msgid "With this redesign, we've added a handful of additional pod settings:" msgstr "" -#: ../../../CHANGELOG:1866 +#: ../../../CHANGELOG.md:1763 msgid "Pod banner image" msgstr "" -#: ../../../CHANGELOG:1867 +#: ../../../CHANGELOG.md:1764 msgid "Contact email" msgstr "" -#: ../../../CHANGELOG:1868 +#: ../../../CHANGELOG.md:1765 msgid "Rules" msgstr "" -#: ../../../CHANGELOG:1869 +#: ../../../CHANGELOG.md:1766 msgid "Terms of service" msgstr "" -#: ../../../CHANGELOG:1871 +#: ../../../CHANGELOG.md:1768 msgid "" "We recommend taking a few moments to fill these accordingly to your " -"needs, by visiting ``/manage/settings``." +"needs, by visiting `/manage/settings`." msgstr "" -#: ../../../CHANGELOG:1874 +#: ../../../CHANGELOG.md:1770 msgid "Allow-list to restrict federation to trusted domains" msgstr "" -#: ../../../CHANGELOG:1876 +#: ../../../CHANGELOG.md:1772 msgid "" "The Allow-Listing feature grants pod moderators and administrators " "greater control over federation by allowing you to create a pod-wide " "allow-list." msgstr "" -#: ../../../CHANGELOG:1880 +#: ../../../CHANGELOG.md:1776 msgid "" "When allow-listing is enabled, your pod's users will only be able to " "interact with pods included in the allow-list. Any messages, activity, " @@ -3702,134 +4040,134 @@ msgid "" "be able to send anything to your pod." msgstr "" -#: ../../../CHANGELOG:1889 +#: ../../../CHANGELOG.md:1785 msgid "" "If you want to enable this feature on your pod, or learn more, please " -"refer to `our documentation " -"<https://docs.funkwhale.audio/moderator/listing.html>`_!" +"refer to [our " +"documentation](https://docs.funkwhale.audio/moderator/listing.html)!" msgstr "" -#: ../../../CHANGELOG:1892 +#: ../../../CHANGELOG.md:1787 msgid "Periodic message to incite people to support their pod and Funkwhale" msgstr "" -#: ../../../CHANGELOG:1894 +#: ../../../CHANGELOG.md:1789 msgid "" "Users will now be reminded on a regular basis that they can help " "Funkwhale by donating or contributing." msgstr "" -#: ../../../CHANGELOG:1896 +#: ../../../CHANGELOG.md:1791 msgid "" "If specified by the pod admin, a separate and custom message will also be" " displayed in a similar way to provide instructions and links to support " "the pod." msgstr "" -#: ../../../CHANGELOG:1898 +#: ../../../CHANGELOG.md:1793 msgid "" "Both messages will appear for the first time 15 days after signup, in the" " notifications tab. For each message, users can schedule a reminder for a" " later time, or disable the messages entirely." msgstr "" -#: ../../../CHANGELOG:1902 +#: ../../../CHANGELOG.md:1795 msgid "" "Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker " "only]" msgstr "" -#: ../../../CHANGELOG:1904 +#: ../../../CHANGELOG.md:1797 msgid "" "To improve the performance, stability and reliability of Funkwhale's web " "processes, we now recommend using Gunicorn and Uvicorn instead of Daphne." " This combination unlock new use cases such as:" msgstr "" -#: ../../../CHANGELOG:1907 +#: ../../../CHANGELOG.md:1800 msgid "zero-downtime upgrades" msgstr "" -#: ../../../CHANGELOG:1908 +#: ../../../CHANGELOG.md:1801 msgid "configurable number of web worker processes" msgstr "" -#: ../../../CHANGELOG:1910 +#: ../../../CHANGELOG.md:1803 msgid "" "Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable " "under higher workloads compared to Daphne." msgstr "" -#: ../../../CHANGELOG:1912 +#: ../../../CHANGELOG.md:1805 msgid "" "To benefit from this enhancement on existing instances, you need to add " -"``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` file (use a higher number if" -" you want to have more web worker processes)." +"`FUNKWHALE_WEB_WORKERS=1` in your `.env` file (use a higher number if you" +" want to have more web worker processes)." msgstr "" -#: ../../../CHANGELOG:1915 +#: ../../../CHANGELOG.md:1808 msgid "" -"Then, edit your ``/etc/systemd/system/funkwhale-server.service`` and " -"replace the ``ExecStart=`` line with " -"``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn " -"config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k " -"uvicorn.workers.UvicornWorker -b " -"${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}``" +"Then, edit your `/etc/systemd/system/funkwhale-server.service` and " +"replace the `ExecStart=` line with " +"`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application" +" -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b " +"${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}`" msgstr "" -#: ../../../CHANGELOG:1918 +#: ../../../CHANGELOG.md:1811 msgid "" -"Then reload the configuration change with ``sudo systemctl daemon-" -"reload`` and ``sudo systemctl restart funkwhale-server``." +"Then reload the configuration change with `sudo systemctl daemon-reload` " +"and `sudo systemctl restart funkwhale-server`." msgstr "" -#: ../../../CHANGELOG:1922 +#: ../../../CHANGELOG.md:1813 msgid "" "Content-Security-Policy and additional security headers [manual action " "suggested]" msgstr "" -#: ../../../CHANGELOG:1924 +#: ../../../CHANGELOG.md:1815 msgid "" "To improve the security and reduce the attack surface in case of a " "successful exploit, we suggest you add the following Content-Security-" "Policy to your nginx configuration." msgstr "" -#: ../../../CHANGELOG:1927 -msgid "..note::" -msgstr "" - -#: ../../../CHANGELOG:1935 +#: ../../../CHANGELOG.md:1819 msgid "" -"**On non-docker setups**, in ``/etc/nginx/sites-" -"available/funkwhale.conf``::" +"If you are using an S3-compatible store to serve music, you will need to " +"specify the URL of your S3 store in the ``media-src`` and ``img-src`` " +"headers" msgstr "" -#: ../../../CHANGELOG:1957 -msgid "Then reload nginx with ``systemctl reload nginx``." +#: ../../../CHANGELOG.md:1826 +msgid "**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`:" msgstr "" -#: ../../../CHANGELOG:1959 -msgid "**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``::" +#: ../../../CHANGELOG.md:1850 +msgid "Then reload nginx with `systemctl reload nginx`." msgstr "" -#: ../../../CHANGELOG:1981 -msgid "Then reload nginx with ``docker-compose restart nginx``." +#: ../../../CHANGELOG.md:1852 +msgid "**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`:" msgstr "" -#: ../../../CHANGELOG:1984 +#: ../../../CHANGELOG.md:1877 +msgid "Then reload nginx with `docker-compose restart nginx`." +msgstr "" + +#: ../../../CHANGELOG.md:1879 msgid "Rate limiting" msgstr "" -#: ../../../CHANGELOG:1986 +#: ../../../CHANGELOG.md:1881 msgid "" "With this release, rate-limiting on the API is enabled by default, with " "high enough limits to ensure regular users of the app aren't affected. " "Requests beyond allowed limits are answered with a 429 HTTP error." msgstr "" -#: ../../../CHANGELOG:1989 +#: ../../../CHANGELOG.md:1884 msgid "" "For anonymous requests, the limit is applied to the IP address of the " "client, and for authenticated requests, the limit is applied to the " @@ -3837,437 +4175,433 @@ msgid "" "limit than authenticated requests." msgstr "" -#: ../../../CHANGELOG:1992 +#: ../../../CHANGELOG.md:1887 msgid "" "You can disable the rate-limiting feature by adding " -"`THROTTLING_ENABLED=false` to your ``.env`` file and restarting the " +"`THROTTLING_ENABLED=false` to your `.env` file and restarting the " "services. If you are using the Funkwhale API in your project or app and " "want to know more about the limits, please consult " "https://docs.funkwhale.audio/swagger/." msgstr "" -#: ../../../CHANGELOG:1996 +#: ../../../CHANGELOG.md:1890 msgid "" "Broken audio streaming when using S3/Minio and DSub [manual action " "required]" msgstr "" -#: ../../../CHANGELOG:1998 +#: ../../../CHANGELOG.md:1892 msgid "" "Some Subsonic clients, such as DSub, are sending an Authorization headers" " which was forwarded to the S3 storage when streaming, causing some " "issues. If you are using S3 or a compatible storage such as Minio, please" -" add the following in your nginx ``~ /_protected/media/(.+)`` location::" +" add the following in your nginx `~ /_protected/media/(.+)` location:" msgstr "" -#: ../../../CHANGELOG:2005 +#: ../../../CHANGELOG.md:1901 msgid "And reload your nginx process." msgstr "" -#: ../../../CHANGELOG:2008 +#: ../../../CHANGELOG.md:1903 msgid "Detail" msgstr "" -#: ../../../CHANGELOG:2012 +#: ../../../CHANGELOG.md:1907 msgid "" "Added periodical message to incite people to support their pod and " "Funkwhale (#839)" msgstr "" -#: ../../../CHANGELOG:2013 +#: ../../../CHANGELOG.md:1908 msgid "Admins can now add custom CSS from their pod settings (#879)" msgstr "" -#: ../../../CHANGELOG:2014 +#: ../../../CHANGELOG.md:1909 msgid "Allow-list to restrict federation to trusted domains (#853)" msgstr "" -#: ../../../CHANGELOG:2015 +#: ../../../CHANGELOG.md:1910 msgid "Content and account reports (#890)" msgstr "" -#: ../../../CHANGELOG:2016 +#: ../../../CHANGELOG.md:1911 msgid "Dark theme (#756)" msgstr "" -#: ../../../CHANGELOG:2017 +#: ../../../CHANGELOG.md:1912 msgid "Enforce a configurable rate limit on the API to mitigate abuse (#261)" msgstr "" -#: ../../../CHANGELOG:2018 +#: ../../../CHANGELOG.md:1913 msgid "Redesign of the landing and about pages (#872)" msgstr "" -#: ../../../CHANGELOG:2019 +#: ../../../CHANGELOG.md:1914 msgid "Support for genres, via tags (#432)" msgstr "" -#: ../../../CHANGELOG:2020 +#: ../../../CHANGELOG.md:1915 msgid "Users can now delete their account without admin intervention (#852)" msgstr "" -#: ../../../CHANGELOG:2025 +#: ../../../CHANGELOG.md:1919 msgid "" "Added a info message on embed wizard when anonymous access to content is " "disabled (#878)" msgstr "" -#: ../../../CHANGELOG:2026 +#: ../../../CHANGELOG.md:1920 msgid "Added Catalan translation files" msgstr "" -#: ../../../CHANGELOG:2027 +#: ../../../CHANGELOG.md:1921 msgid "Added Czech translation (#844)" msgstr "" -#: ../../../CHANGELOG:2028 +#: ../../../CHANGELOG.md:1922 msgid "Added field to manage user upload quota in Django backend (#903)" msgstr "" -#: ../../../CHANGELOG:2029 +#: ../../../CHANGELOG.md:1923 msgid "" "Added the option to replace the queue's current contents with a selected " "album or track (#761)" msgstr "" -#: ../../../CHANGELOG:2030 +#: ../../../CHANGELOG.md:1924 msgid "Artists with no albums will now show track count on artist card (#895)" msgstr "" -#: ../../../CHANGELOG:2031 +#: ../../../CHANGELOG.md:1925 msgid "Ensure API urls answer with and without a trailing slash (#877)" msgstr "" -#: ../../../CHANGELOG:2032 +#: ../../../CHANGELOG.md:1926 msgid "" "Hardcoded list of supported browsers to avoid unexpected regressions " "(#854)" msgstr "" -#: ../../../CHANGELOG:2033 +#: ../../../CHANGELOG.md:1927 msgid "Hardened security thanks to CSP and additional HTTP headers (#880)" msgstr "" -#: ../../../CHANGELOG:2034 +#: ../../../CHANGELOG.md:1928 msgid "Improve display of search results by including artist and album data" msgstr "" -#: ../../../CHANGELOG:2035 +#: ../../../CHANGELOG.md:1929 msgid "" "Increase the security of JWT token generation by using DJANGO_SECRET_KEY " "as well as user-specific salt for the signature" msgstr "" -#: ../../../CHANGELOG:2036 +#: ../../../CHANGELOG.md:1930 msgid "Mods can now change a library visibility through the admin UI (#548)" msgstr "" -#: ../../../CHANGELOG:2037 +#: ../../../CHANGELOG.md:1931 msgid "New keyboard shortcuts added for enhanced control over audio player (#866)" msgstr "" -#: ../../../CHANGELOG:2038 +#: ../../../CHANGELOG.md:1932 msgid "" "Now refetch remote ActivityPub artists, albums and tracks to avoid local " "stale data" msgstr "" -#: ../../../CHANGELOG:2039 +#: ../../../CHANGELOG.md:1933 msgid "" "Numbers on the stats page will now be formatted in a human readable way " "and will update with the locale (#873)" msgstr "" -#: ../../../CHANGELOG:2040 +#: ../../../CHANGELOG.md:1934 msgid "" "Pickup folder.png and folder.jpg files for cover art when importing from " "CLI (#898)" msgstr "" -#: ../../../CHANGELOG:2041 +#: ../../../CHANGELOG.md:1935 msgid "Prevent usage of too weak passwords (#883)" msgstr "" -#: ../../../CHANGELOG:2042 +#: ../../../CHANGELOG.md:1936 #, python-format msgid "Reduced CSS size by 30% using purgecss" msgstr "" -#: ../../../CHANGELOG:2043 +#: ../../../CHANGELOG.md:1937 msgid "" "Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and" " performance (#862)" msgstr "" -#: ../../../CHANGELOG:2044 +#: ../../../CHANGELOG.md:1938 msgid "Simplified embedded docker reverse proxy IP configuration (#834)" msgstr "" -#: ../../../CHANGELOG:2045 +#: ../../../CHANGELOG.md:1939 msgid "Support embeds on public playlists" msgstr "" -#: ../../../CHANGELOG:2046 +#: ../../../CHANGELOG.md:1940 msgid "Support for M4A/AAC files (#661)" msgstr "" -#: ../../../CHANGELOG:2047 +#: ../../../CHANGELOG.md:1941 msgid "Switched from Semantic-UI to Fomentic-UI" msgstr "" -#: ../../../CHANGELOG:2048 +#: ../../../CHANGELOG.md:1942 msgid "Add dropdown menu to track table (#531)" msgstr "" -#: ../../../CHANGELOG:2049 +#: ../../../CHANGELOG.md:1943 msgid "Display placeholder on homepage when there are no playlists (#892)" msgstr "" -#: ../../../CHANGELOG:2050 +#: ../../../CHANGELOG.md:1944 msgid "Make album cards height independent (#710)" msgstr "" -#: ../../../CHANGELOG:2055 +#: ../../../CHANGELOG.md:1948 msgid "" "Added context strings to en_GB translations so that picking the language " "changes the interface as expected" msgstr "" -#: ../../../CHANGELOG:2056 +#: ../../../CHANGELOG.md:1949 msgid "Ensure selected locale is not reset to browser default when refreshing app" msgstr "" -#: ../../../CHANGELOG:2057 +#: ../../../CHANGELOG.md:1950 msgid "Fix missing license information on track details page (#913)" msgstr "" -#: ../../../CHANGELOG:2058 +#: ../../../CHANGELOG.md:1951 msgid "Fix regression to quota bar color (#897)" msgstr "" -#: ../../../CHANGELOG:2059 +#: ../../../CHANGELOG.md:1952 msgid "Fixed a responsive display issues on 1024px wide screens (#904)" msgstr "" -#: ../../../CHANGELOG:2060 +#: ../../../CHANGELOG.md:1953 msgid "Fixed album art not being retrieved from Ogg/Opus files" msgstr "" -#: ../../../CHANGELOG:2061 +#: ../../../CHANGELOG.md:1954 msgid "Fixed broken embedded player layout after dependency update (#875)" msgstr "" -#: ../../../CHANGELOG:2062 +#: ../../../CHANGELOG.md:1955 msgid "" "Fixed broken external HTTPS request under some scenarios, because of " "missing PyOpenSSL" msgstr "" -#: ../../../CHANGELOG:2063 +#: ../../../CHANGELOG.md:1956 msgid "Fixed broken less listened radio (#912)" msgstr "" -#: ../../../CHANGELOG:2064 +#: ../../../CHANGELOG.md:1957 msgid "Fixed broken URL to artist and album on album and track pages (#871)" msgstr "" -#: ../../../CHANGELOG:2065 +#: ../../../CHANGELOG.md:1958 msgid "" "Fixed empty contentType causing client crash in some Subsonic payloads " "(#893)" msgstr "" -#: ../../../CHANGELOG:2066 +#: ../../../CHANGELOG.md:1959 msgid "" "Fixed import crashing with empty cover file or too long values on some " "fields" msgstr "" -#: ../../../CHANGELOG:2067 +#: ../../../CHANGELOG.md:1960 msgid "" "Fixed in-place imported files not playing under nginx when filename " "contains ? or % (#924)" msgstr "" -#: ../../../CHANGELOG:2068 +#: ../../../CHANGELOG.md:1961 msgid "Fixed remaining transcoding issue with Subsonic API (#867)" msgstr "" -#: ../../../CHANGELOG:2069 +#: ../../../CHANGELOG.md:1962 msgid "" "Fixed search usability issue when browsing artists, albums, radios and " "playlists (#902)" msgstr "" -#: ../../../CHANGELOG:2070 +#: ../../../CHANGELOG.md:1963 msgid "" "Improved performance of /artists, /albums and /tracks API endpoints by a " "factor 2 (#865)" msgstr "" -#: ../../../CHANGELOG:2071 +#: ../../../CHANGELOG.md:1964 msgid "Updated docs to ensure streaming works when using Minio/S3 and DSub (#932)" msgstr "" -#: ../../../CHANGELOG:2083 +#: ../../../CHANGELOG.md:1976 msgid "IISergII" msgstr "" -#: ../../../CHANGELOG:2084 +#: ../../../CHANGELOG.md:1977 msgid "jiri-novacek" msgstr "" -#: ../../../CHANGELOG:2087 +#: ../../../CHANGELOG.md:1980 msgid "Koen" msgstr "" -#: ../../../CHANGELOG:2088 +#: ../../../CHANGELOG.md:1981 msgid "Manuel Cortez" msgstr "" -#: ../../../CHANGELOG:2091 ../../../CHANGELOG:2359 +#: ../../../CHANGELOG.md:1984 ../../../CHANGELOG.md:2230 msgid "nouts" msgstr "" -#: ../../../CHANGELOG:2092 ../../../CHANGELOG:2362 +#: ../../../CHANGELOG.md:1985 ../../../CHANGELOG.md:2233 msgid "Quentí" msgstr "" -#: ../../../CHANGELOG:2094 ../../../CHANGELOG:2364 +#: ../../../CHANGELOG.md:1987 ../../../CHANGELOG.md:2235 msgid "Rodrigo Leite" msgstr "" -#: ../../../CHANGELOG:2095 -msgid "Romain Failliot" -msgstr "" - -#: ../../../CHANGELOG:2097 ../../../CHANGELOG:2365 +#: ../../../CHANGELOG.md:1990 ../../../CHANGELOG.md:2236 msgid "Sylke Vicious" msgstr "" -#: ../../../CHANGELOG:2098 +#: ../../../CHANGELOG.md:1991 msgid "Tobias Reisinger" msgstr "" -#: ../../../CHANGELOG:2104 +#: ../../../CHANGELOG.md:1995 msgid "0.19.1 (2019-06-28)" msgstr "" -#: ../../../CHANGELOG:2111 +#: ../../../CHANGELOG.md:2001 msgid "" "The currently playing track is now highlighted with an orange play icon " "(#832)" msgstr "" -#: ../../../CHANGELOG:2112 +#: ../../../CHANGELOG.md:2002 msgid "Support for importing files with no album tag (#122)" msgstr "" -#: ../../../CHANGELOG:2113 +#: ../../../CHANGELOG.md:2003 msgid "Redirect from / to /library when user is logged in (#864)" msgstr "" -#: ../../../CHANGELOG:2114 +#: ../../../CHANGELOG.md:2004 msgid "" "Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients " "that don't provide the format parameter (#867)" msgstr "" -#: ../../../CHANGELOG:2115 +#: ../../../CHANGELOG.md:2005 msgid "Added button to search for objects on Discogs (#368)" msgstr "" -#: ../../../CHANGELOG:2116 +#: ../../../CHANGELOG.md:2006 msgid "Added copy-to-clipboard button with Subsonic password input (#814)" msgstr "" -#: ../../../CHANGELOG:2117 +#: ../../../CHANGELOG.md:2007 msgid "Added opus to the list of supported mimetypes and extensions (#868)" msgstr "" -#: ../../../CHANGELOG:2118 +#: ../../../CHANGELOG.md:2008 msgid "Aligned search headers with search results in the sidebar (#708)" msgstr "" -#: ../../../CHANGELOG:2119 +#: ../../../CHANGELOG.md:2009 msgid "" "Clicking on the currently selected playlist in the Playlist popup will " "now close the popup (#807)" msgstr "" -#: ../../../CHANGELOG:2120 +#: ../../../CHANGELOG.md:2010 msgid "" "Favorites radio will not be visible if the user does not have any " "favorites (#419)" msgstr "" -#: ../../../CHANGELOG:2125 +#: ../../../CHANGELOG.md:2014 msgid "" "Ensure empty but optional fields in file metadata don't error during " "import (#850)" msgstr "" -#: ../../../CHANGELOG:2126 +#: ../../../CHANGELOG.md:2015 msgid "Fix broken upload for specific files when using S3 storage (#857)" msgstr "" -#: ../../../CHANGELOG:2127 +#: ../../../CHANGELOG.md:2016 msgid "Fixed broken translation on home and track detail page (#833)" msgstr "" -#: ../../../CHANGELOG:2128 +#: ../../../CHANGELOG.md:2017 msgid "" "Fixed broken user admin for users with non-digit or letters in their " "username (#869)" msgstr "" -#: ../../../CHANGELOG:2129 +#: ../../../CHANGELOG.md:2018 msgid "Fixed invalid file extension for transcoded tracks (#848)" msgstr "" -#: ../../../CHANGELOG:2130 +#: ../../../CHANGELOG.md:2019 msgid "Fixed issue with French translation for \"Start radio\" (#849)" msgstr "" -#: ../../../CHANGELOG:2131 +#: ../../../CHANGELOG.md:2020 msgid "" "Fixed issue with player changing height when hovering over the volume " "slider (#838)" msgstr "" -#: ../../../CHANGELOG:2132 +#: ../../../CHANGELOG.md:2021 msgid "Fixed secondary menus truncated on narrow screens (#855)" msgstr "" -#: ../../../CHANGELOG:2133 +#: ../../../CHANGELOG.md:2022 msgid "Fixed wrong og:image url when using S3 storage (#851)" msgstr "" -#: ../../../CHANGELOG:2134 +#: ../../../CHANGELOG.md:2023 msgid "Hide pod statistics on about page if those are disabled (#835)" msgstr "" -#: ../../../CHANGELOG:2135 +#: ../../../CHANGELOG.md:2024 msgid "Use ASCII filename before upload to S3 to avoid playback issues (#847)" msgstr "" -#: ../../../CHANGELOG:2138 +#: ../../../CHANGELOG.md:2026 msgid "Contributors to this release (committers and reviewers):" msgstr "" -#: ../../../CHANGELOG:2142 +#: ../../../CHANGELOG.md:2030 msgid "ealgase" msgstr "" -#: ../../../CHANGELOG:2153 +#: ../../../CHANGELOG.md:2039 msgid "0.19.0 (2019-05-16)" msgstr "" -#: ../../../CHANGELOG:2160 +#: ../../../CHANGELOG.md:2043 msgid "Edits on tracks, albums and artists" msgstr "" -#: ../../../CHANGELOG:2162 +#: ../../../CHANGELOG.md:2045 msgid "" "Funkwhale was a bit annoying when it camed to metadata. Tracks, albums " "and artists profiles were created from audio file tags, but basically " @@ -4275,58 +4609,58 @@ msgid "" "wasn't ideal to do this kind of changes)." msgstr "" -#: ../../../CHANGELOG:2166 +#: ../../../CHANGELOG.md:2049 msgid "" "With this release, everyone can suggest changes on track, album and " "artist pages. Users with the \"library\" permission can review suggested " "edits in a dedicated interface and apply/reject them." msgstr "" -#: ../../../CHANGELOG:2170 +#: ../../../CHANGELOG.md:2053 msgid "" "Approved edits are broadcasted via federation, to ensure other instances " "get the information too." msgstr "" -#: ../../../CHANGELOG:2173 +#: ../../../CHANGELOG.md:2056 msgid "" "Not all fields are currently modifiable using this feature. Especially, " "it's not possible to suggest a new album cover, or reassign a track to a " "different album or artist. Those will be implemented in a future release." msgstr "" -#: ../../../CHANGELOG:2178 +#: ../../../CHANGELOG.md:2060 msgid "Admin UI for tracks, albums, artists, libraries and uploads" msgstr "" -#: ../../../CHANGELOG:2180 +#: ../../../CHANGELOG.md:2062 msgid "" "As part of our ongoing effort to make Funkwhale easier to manage for " "instance owners, this release includes a brand new administration " "interface to deal with:" msgstr "" -#: ../../../CHANGELOG:2183 +#: ../../../CHANGELOG.md:2065 msgid "tracks" msgstr "" -#: ../../../CHANGELOG:2184 +#: ../../../CHANGELOG.md:2066 msgid "albums" msgstr "" -#: ../../../CHANGELOG:2185 +#: ../../../CHANGELOG.md:2067 msgid "artists" msgstr "" -#: ../../../CHANGELOG:2186 +#: ../../../CHANGELOG.md:2068 msgid "libraries" msgstr "" -#: ../../../CHANGELOG:2187 +#: ../../../CHANGELOG.md:2069 msgid "uploads" msgstr "" -#: ../../../CHANGELOG:2189 +#: ../../../CHANGELOG.md:2071 msgid "" "You can use this UI to quickly search for any object, delete objects in " "batch, understand where they are coming from etc. This new UI should " @@ -4334,60 +4668,60 @@ msgid "" "cases (but also includes a link to Django's admin when needed)." msgstr "" -#: ../../../CHANGELOG:2194 +#: ../../../CHANGELOG.md:2075 msgid "Artist hiding in the interface" msgstr "" -#: ../../../CHANGELOG:2196 +#: ../../../CHANGELOG.md:2077 msgid "It's now possible for users to hide artists they don't want to see." msgstr "" -#: ../../../CHANGELOG:2198 +#: ../../../CHANGELOG.md:2079 msgid "" "Content linked to hidden artists will not show up in the interface " "anymore. Especially:" msgstr "" -#: ../../../CHANGELOG:2200 +#: ../../../CHANGELOG.md:2081 msgid "Hidden artists tracks are removed from the current queue" msgstr "" -#: ../../../CHANGELOG:2201 +#: ../../../CHANGELOG.md:2082 msgid "Starting a playlist will skip tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2202 +#: ../../../CHANGELOG.md:2083 msgid "" "Recently favorited, recently listened and recently added widgets on the " "homepage won't include content from hidden artists" msgstr "" -#: ../../../CHANGELOG:2203 +#: ../../../CHANGELOG.md:2084 msgid "Radio suggestions will exclude tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2204 +#: ../../../CHANGELOG.md:2085 msgid "Hidden artists won't appear in Subsonic apps" msgstr "" -#: ../../../CHANGELOG:2206 +#: ../../../CHANGELOG.md:2087 msgid "" "Results linked to hidden artists will continue to show up in search " "results and their profile page remains accessible." msgstr "" -#: ../../../CHANGELOG:2209 +#: ../../../CHANGELOG.md:2089 msgid "OAuth2 authorization for better integration with third-party apps" msgstr "" -#: ../../../CHANGELOG:2211 +#: ../../../CHANGELOG.md:2091 msgid "" "Funkwhale now support the OAuth2 authorization and authentication " "protocol which will allow third-party apps to interact with Funkwhale on " "behalf of users." msgstr "" -#: ../../../CHANGELOG:2214 +#: ../../../CHANGELOG.md:2094 msgid "" "This feature makes it possible to build third-party apps that have the " "same capabilities as Funkwhale's Web UI. The only exception at the moment" @@ -4396,18 +4730,18 @@ msgid "" "release)." msgstr "" -#: ../../../CHANGELOG:2219 +#: ../../../CHANGELOG.md:2099 msgid "" "If you want to start building an app on top of Funkwhale's API, please " "check-out https://docs.funkwhale.audio/api.html and " "https://docs.funkwhale.audio/developers/authentication.html." msgstr "" -#: ../../../CHANGELOG:2223 +#: ../../../CHANGELOG.md:2102 msgid "Better error handling and display during import" msgstr "" -#: ../../../CHANGELOG:2225 +#: ../../../CHANGELOG.md:2104 msgid "" "Funkwhale should now be more resilient to missing tags in imported files," " and give you more insights when something goes wrong, including the " @@ -4415,52 +4749,53 @@ msgid "" "information to share in your support requests." msgstr "" -#: ../../../CHANGELOG:2229 +#: ../../../CHANGELOG.md:2108 msgid "" "This information is available in all pages that list uploads, when " "clicking on the button next to the upload status." msgstr "" -#: ../../../CHANGELOG:2232 +#: ../../../CHANGELOG.md:2110 msgid "Support for S3-compatible storages to store media files" msgstr "" -#: ../../../CHANGELOG:2234 +#: ../../../CHANGELOG.md:2112 msgid "" "Storing all media files on the Funkwhale server itself may not be " "possible or desirable in all scenarios. You can now configure Funkwhale " "to store those files in a S3 bucket instead." msgstr "" -#: ../../../CHANGELOG:2238 +#: ../../../CHANGELOG.md:2116 msgid "" "Check-out https://docs.funkwhale.audio/admin/external-storages.html if " "you want to use this feature." msgstr "" -#: ../../../CHANGELOG:2242 +#: ../../../CHANGELOG.md:2119 msgid "Prune library command" msgstr "" -#: ../../../CHANGELOG:2244 +#: ../../../CHANGELOG.md:2121 msgid "" "Users are often surprised by Funkwhale's tendency to keep track, album " "and artist metadata even if no associated files exist." msgstr "" -#: ../../../CHANGELOG:2247 +#: ../../../CHANGELOG.md:2124 msgid "" -"To help with that, we now offer a ``prune_library`` management command " -"you can run to purge your database from obsolete entries. `Please refer " -"to our documentation for usage instructions " -"<https://docs.funkwhale.audio/admin/commands.html#pruning-library>`__." +"To help with that, we now offer a `prune_library` management command you " +"can run to purge your database from obsolete entries. [Please refer to " +"our documentation for usage " +"instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-" +"library)." msgstr "" -#: ../../../CHANGELOG:2252 +#: ../../../CHANGELOG.md:2127 msgid "Check in-place files command" msgstr "" -#: ../../../CHANGELOG:2254 +#: ../../../CHANGELOG.md:2129 msgid "" "When using in-place import with a living audio library, you'll quite " "often rename or remove files from the file system. Unfortunately, " @@ -4468,552 +4803,552 @@ msgid "" " in unplayable tracks." msgstr "" -#: ../../../CHANGELOG:2258 +#: ../../../CHANGELOG.md:2133 msgid "" -"To help with that, we now offer a ``check_inplace_files`` management " -"command you can run to purge your database from obsolete files. `Please " -"refer to our documentation for usage instructions " -"<https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-" -"from-database>`__." +"To help with that, we now offer a `check_inplace_files` management " +"command you can run to purge your database from obsolete files. [Please " +"refer to our documentation for usage " +"instructions](https://docs.funkwhale.audio/admin/commands.html#remove-" +"obsolete-files-from-database)." msgstr "" -#: ../../../CHANGELOG:2265 +#: ../../../CHANGELOG.md:2138 msgid "" "Added albums view. Similar to artists view, it's viewable by clicking on " "the \"Albums\" link on the top bar. (#356)" msgstr "" -#: ../../../CHANGELOG:2266 +#: ../../../CHANGELOG.md:2139 msgid "Allow artists hiding (#701)" msgstr "" -#: ../../../CHANGELOG:2267 +#: ../../../CHANGELOG.md:2140 msgid "Change the document title to display current track information. (#359)" msgstr "" -#: ../../../CHANGELOG:2268 +#: ../../../CHANGELOG.md:2141 msgid "" "Display a confirmation dialog when adding duplicate songs to a playlist " "(#784)" msgstr "" -#: ../../../CHANGELOG:2269 +#: ../../../CHANGELOG.md:2142 msgid "" "Improved error handling and display during import (#252, #718, #583, " "#501, #544)" msgstr "" -#: ../../../CHANGELOG:2270 +#: ../../../CHANGELOG.md:2143 msgid "Support embedding full artist discographies (#747)" msgstr "" -#: ../../../CHANGELOG:2271 +#: ../../../CHANGELOG.md:2144 msgid "" "Support metadata update on tracks, albums and artists and broadcast those" " on the federation (#689)" msgstr "" -#: ../../../CHANGELOG:2272 +#: ../../../CHANGELOG.md:2145 msgid "" "Support OAuth2 authorization for better integration with third-party apps" " (#752)" msgstr "" -#: ../../../CHANGELOG:2273 +#: ../../../CHANGELOG.md:2146 msgid "Support S3-compatible storages for media files (#565)" msgstr "" -#: ../../../CHANGELOG:2278 +#: ../../../CHANGELOG.md:2150 msgid "" "[Experimental] Added a new \"Similar\" radio based on users history " "(suggested by @gordon)" msgstr "" -#: ../../../CHANGELOG:2279 +#: ../../../CHANGELOG.md:2151 msgid "" "Added a \"load more\" button on artist pages to load more tracks/albums " "(#719)" msgstr "" -#: ../../../CHANGELOG:2280 +#: ../../../CHANGELOG.md:2152 msgid "" "Added a `check_inplace_files` management command to remove purge the " "database from references to in-place imported files that don't exist on " "disk anymore (#781)" msgstr "" -#: ../../../CHANGELOG:2281 +#: ../../../CHANGELOG.md:2153 msgid "" "Added a prune_library management command to remove obsolete metadata from" " the database (#777)" msgstr "" -#: ../../../CHANGELOG:2282 +#: ../../../CHANGELOG.md:2154 msgid "" "Added admin options to disable login for users, ensure related content is" " deleted when deleting a user account (#809)" msgstr "" -#: ../../../CHANGELOG:2283 +#: ../../../CHANGELOG.md:2155 msgid "" "Added standardized translation context for all strings in the frontend to" " give accurate hints to translators." msgstr "" -#: ../../../CHANGELOG:2284 +#: ../../../CHANGELOG.md:2156 msgid "" -"Added twitter:* meta tags to detect tracks and albums players " +"Added twitter:\\* meta tags to detect tracks and albums players " "automatically on more sites (#578) Improved responsiveness of embedded " "player" msgstr "" -#: ../../../CHANGELOG:2286 +#: ../../../CHANGELOG.md:2158 msgid "" "Advertise the list of supported upload extensions in the Nodeinfo " "endpoint (#808)" msgstr "" -#: ../../../CHANGELOG:2287 +#: ../../../CHANGELOG.md:2159 msgid "" "Better handling of follow/accept messages to avoid and recover from " "desync between instances (#830)" msgstr "" -#: ../../../CHANGELOG:2288 +#: ../../../CHANGELOG.md:2160 msgid "Better workflow for connecting to another instance (#715)" msgstr "" -#: ../../../CHANGELOG:2290 +#: ../../../CHANGELOG.md:2162 msgid "" "Changing the instance used is now better integrated in the App, and it is" " checked that the chosen instance and the suggested instances are valid " "and running Funkwhale servers." msgstr "" -#: ../../../CHANGELOG:2291 +#: ../../../CHANGELOG.md:2164 msgid "Bumped dependencies to latest versions (#815)" msgstr "" -#: ../../../CHANGELOG:2292 +#: ../../../CHANGELOG.md:2165 msgid "Descriptions will now be shown underneath user libraries (#768)" msgstr "" -#: ../../../CHANGELOG:2293 +#: ../../../CHANGELOG.md:2166 msgid "Don't store unhandled ActivityPub messages in database (#776)" msgstr "" -#: ../../../CHANGELOG:2294 +#: ../../../CHANGELOG.md:2167 msgid "Enhanced the design of the embed wizard. (!619)" msgstr "" -#: ../../../CHANGELOG:2295 +#: ../../../CHANGELOG.md:2168 msgid "Ensure the footer always stays at the bottom of the page" msgstr "" -#: ../../../CHANGELOG:2296 +#: ../../../CHANGELOG.md:2169 msgid "" "Expose an instance-level actor (service@domain) in nodeinfo endpoint " "(#689)" msgstr "" -#: ../../../CHANGELOG:2297 +#: ../../../CHANGELOG.md:2170 msgid "Improved readability of logo (#385)" msgstr "" -#: ../../../CHANGELOG:2298 +#: ../../../CHANGELOG.md:2171 msgid "" "Keep persistent connections to the database instead of recreating a new " "one for each request" msgstr "" -#: ../../../CHANGELOG:2299 +#: ../../../CHANGELOG.md:2172 msgid "" "Labels for privacy levels are now consistently grabbed from a common " "source instead of being hardcoded every time they are needed." msgstr "" -#: ../../../CHANGELOG:2300 +#: ../../../CHANGELOG.md:2173 msgid "" "Merged artist/album buttons with title text on artist and album pages " "(#725)" msgstr "" -#: ../../../CHANGELOG:2301 +#: ../../../CHANGELOG.md:2174 msgid "Now honor maxBitrate parameter in Subsonic API (#802)" msgstr "" -#: ../../../CHANGELOG:2302 +#: ../../../CHANGELOG.md:2175 msgid "Preload next track in queue (#572)" msgstr "" -#: ../../../CHANGELOG:2303 +#: ../../../CHANGELOG.md:2176 msgid "" "Reduced app size for regular users by moving admin-related code in a " "dedicated chunk (#805)" msgstr "" -#: ../../../CHANGELOG:2304 +#: ../../../CHANGELOG.md:2177 msgid "Removed broken/instable lyrics feature (#799)" msgstr "" -#: ../../../CHANGELOG:2305 +#: ../../../CHANGELOG.md:2178 msgid "" "Show remaining storage space during import and prevent file upload if not" " enough space is remaining (#550)" msgstr "" -#: ../../../CHANGELOG:2306 +#: ../../../CHANGELOG.md:2179 msgid "" "The buttons displaying an icon now always show a little divider between " "the icon and the text. (!620)" msgstr "" -#: ../../../CHANGELOG:2307 +#: ../../../CHANGELOG.md:2180 msgid "Use attributedTo instead of actor in library ActivityPub payload (#619)" msgstr "" -#: ../../../CHANGELOG:2308 +#: ../../../CHANGELOG.md:2181 msgid "Use network/depends_on instead of links in docker-compose.yml (!716)" msgstr "" -#: ../../../CHANGELOG:2313 +#: ../../../CHANGELOG.md:2185 msgid "Add missing command from contributing file (#754)" msgstr "" -#: ../../../CHANGELOG:2314 +#: ../../../CHANGELOG.md:2186 msgid "Add required envvar for dev environment (!668)" msgstr "" -#: ../../../CHANGELOG:2315 +#: ../../../CHANGELOG.md:2187 msgid "" "Added env variable to set AWS region and signature version to serve media" " without proxy (#826)" msgstr "" -#: ../../../CHANGELOG:2316 +#: ../../../CHANGELOG.md:2188 msgid "" "Allow users with dots in their usernames to request a subsonic password " "(#798)" msgstr "" -#: ../../../CHANGELOG:2317 +#: ../../../CHANGELOG.md:2189 msgid "" "Better handling of featuring/multi-artist tracks tagged with MusicBrainz " "(#782)" msgstr "" -#: ../../../CHANGELOG:2318 +#: ../../../CHANGELOG.md:2190 msgid "" "Do not consider tracks as duplicates during import if they have different" " positions (#740)" msgstr "" -#: ../../../CHANGELOG:2319 +#: ../../../CHANGELOG.md:2191 msgid "Ensure all our ActivityPub fetches are authenticated (#758)" msgstr "" -#: ../../../CHANGELOG:2320 +#: ../../../CHANGELOG.md:2192 msgid "" "Ensure correct track duration and playable status when browsing radios " "(#812)" msgstr "" -#: ../../../CHANGELOG:2321 +#: ../../../CHANGELOG.md:2193 msgid "Fixed alignment/size issue with some buttons (#702)" msgstr "" -#: ../../../CHANGELOG:2322 +#: ../../../CHANGELOG.md:2194 msgid "Fixed an encoding issue with instance name on about page (#828)" msgstr "" -#: ../../../CHANGELOG:2323 +#: ../../../CHANGELOG.md:2195 msgid "" "Fixed cover not showing in queue/player when playing tracks from " "\"albums\" tab (#795)" msgstr "" -#: ../../../CHANGELOG:2324 +#: ../../../CHANGELOG.md:2196 msgid "Fixed crashing upload processing on invalid date format (#718)" msgstr "" -#: ../../../CHANGELOG:2325 +#: ../../../CHANGELOG.md:2197 msgid "Fixed dev command for fake data creation (!664)" msgstr "" -#: ../../../CHANGELOG:2326 +#: ../../../CHANGELOG.md:2198 msgid "Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824)" msgstr "" -#: ../../../CHANGELOG:2327 +#: ../../../CHANGELOG.md:2199 msgid "Fixed invalid required fields in Upload django's admin (#819)" msgstr "" -#: ../../../CHANGELOG:2328 +#: ../../../CHANGELOG.md:2200 msgid "Fixed issue with querying the albums api endpoint (#356)" msgstr "" -#: ../../../CHANGELOG:2329 +#: ../../../CHANGELOG.md:2201 msgid "Fixed non-transparent background for volume range on Firefox (#722)" msgstr "" -#: ../../../CHANGELOG:2330 +#: ../../../CHANGELOG.md:2202 msgid "Fixed overflowing input on account detail page (#791)" msgstr "" -#: ../../../CHANGELOG:2331 +#: ../../../CHANGELOG.md:2203 msgid "Fixed unplayable radios for anonymous users (#563)" msgstr "" -#: ../../../CHANGELOG:2332 +#: ../../../CHANGELOG.md:2204 msgid "Prevent skipping on file import if album_mbid is different (#772)" msgstr "" -#: ../../../CHANGELOG:2333 +#: ../../../CHANGELOG.md:2205 msgid "Use proper site name/domain in emails (#806)" msgstr "" -#: ../../../CHANGELOG:2334 +#: ../../../CHANGELOG.md:2206 msgid "" "Width of filter menus for radios has been set to stop text from " "overlapping the borders" msgstr "" -#: ../../../CHANGELOG:2339 +#: ../../../CHANGELOG.md:2210 msgid "Document how to use Redis over unix sockets (#770)" msgstr "" -#: ../../../CHANGELOG:2341 +#: ../../../CHANGELOG.md:2212 msgid "Contributors to this release (committers and translators):" msgstr "" -#: ../../../CHANGELOG:2343 +#: ../../../CHANGELOG.md:2214 msgid "Ale London" msgstr "" -#: ../../../CHANGELOG:2344 +#: ../../../CHANGELOG.md:2215 msgid "Alexander" msgstr "" -#: ../../../CHANGELOG:2345 +#: ../../../CHANGELOG.md:2216 msgid "Ben Finney" msgstr "" -#: ../../../CHANGELOG:2348 +#: ../../../CHANGELOG.md:2219 msgid "Damien Nicolas" msgstr "" -#: ../../../CHANGELOG:2351 +#: ../../../CHANGELOG.md:2222 msgid "Elza Gelez" msgstr "" -#: ../../../CHANGELOG:2352 +#: ../../../CHANGELOG.md:2223 msgid "gerry_the_hat" msgstr "" -#: ../../../CHANGELOG:2353 +#: ../../../CHANGELOG.md:2224 msgid "gordon" msgstr "" -#: ../../../CHANGELOG:2355 +#: ../../../CHANGELOG.md:2226 msgid "jake" msgstr "" -#: ../../../CHANGELOG:2356 +#: ../../../CHANGELOG.md:2227 msgid "Jee" msgstr "" -#: ../../../CHANGELOG:2360 +#: ../../../CHANGELOG.md:2231 msgid "Pierrick" msgstr "" -#: ../../../CHANGELOG:2361 +#: ../../../CHANGELOG.md:2232 msgid "Qasim Ali" msgstr "" -#: ../../../CHANGELOG:2366 +#: ../../../CHANGELOG.md:2237 msgid "Thomas Brockmöller" msgstr "" -#: ../../../CHANGELOG:2367 +#: ../../../CHANGELOG.md:2238 msgid "Tixie" msgstr "" -#: ../../../CHANGELOG:2368 +#: ../../../CHANGELOG.md:2239 msgid "Vierkantor" msgstr "" -#: ../../../CHANGELOG:2369 +#: ../../../CHANGELOG.md:2240 msgid "Von" msgstr "" -#: ../../../CHANGELOG:2370 +#: ../../../CHANGELOG.md:2241 msgid "Zach Halasz" msgstr "" -#: ../../../CHANGELOG:2373 +#: ../../../CHANGELOG.md:2243 msgid "0.18.3 (2019-03-21)" msgstr "" -#: ../../../CHANGELOG:2380 +#: ../../../CHANGELOG.md:2247 msgid "" "Avoid mixed content when deploying mono-container behind proxy [Manual " "action required]" msgstr "" -#: ../../../CHANGELOG:2382 +#: ../../../CHANGELOG.md:2249 msgid "" -"*You are only concerned if you use the mono-container docker deployment " -"behind a reverse proxy*" +"_You are only concerned if you use the mono-container docker deployment " +"behind a reverse proxy_" msgstr "" -#: ../../../CHANGELOG:2384 +#: ../../../CHANGELOG.md:2251 msgid "" -"Because of `an issue in our mono-container configuration " -"<https://github.com/thetarkus/docker-funkwhale/issues/19>`_, users " -"deploying Funkwhale via docker using our `funkwhale/all-in-one` image " -"could face some mixed content warnings (and possibly other troubles) when" -" browsing the Web UI." +"Because of [an issue in our mono-container " +"configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), " +"users deploying Funkwhale via docker using our `funkwhale/all-in-one` " +"image could face some mixed content warnings (and possibly other " +"troubles) when browsing the Web UI." msgstr "" -#: ../../../CHANGELOG:2388 +#: ../../../CHANGELOG.md:2255 msgid "" "This is fixed in this release, but on existing deployments, you'll need " -"to add ``NESTED_PROXY=1`` in your container environment (either in your " -"``.env`` file, or via your container management tool), then recreate your" -" funkwhale container." +"to add `NESTED_PROXY=1` in your container environment (either in your " +"`.env` file, or via your container management tool), then recreate your " +"funkwhale container." msgstr "" -#: ../../../CHANGELOG:2394 +#: ../../../CHANGELOG.md:2260 msgid "Added title on hover for truncated content (#766)" msgstr "" -#: ../../../CHANGELOG:2395 +#: ../../../CHANGELOG.md:2261 msgid "" "Ask for confirmation before leaving upload page if there is a an upload " "in process (#630)" msgstr "" -#: ../../../CHANGELOG:2396 +#: ../../../CHANGELOG.md:2262 msgid "Exclude in-place imported files from quota computation (#570)" msgstr "" -#: ../../../CHANGELOG:2397 +#: ../../../CHANGELOG.md:2263 msgid "" "Truncate filename in library file table to ensure correct display of the " "table. (#735)" msgstr "" -#: ../../../CHANGELOG:2402 +#: ../../../CHANGELOG.md:2267 msgid "" "Avoid mixed content when deploying mono-container behind HTTPS proxy " "(thetarkus/docker-funkwhale#19)" msgstr "" -#: ../../../CHANGELOG:2403 +#: ../../../CHANGELOG.md:2268 msgid "Display new notifications immediately on notifications page (#729)" msgstr "" -#: ../../../CHANGELOG:2404 +#: ../../../CHANGELOG.md:2269 msgid "" "Ensure cover art from uploaded files is picked up properly on existing " "albums (#757)" msgstr "" -#: ../../../CHANGELOG:2405 +#: ../../../CHANGELOG.md:2270 msgid "Fixed a crash when federating a track with unspecified position" msgstr "" -#: ../../../CHANGELOG:2406 +#: ../../../CHANGELOG.md:2271 msgid "Fixed broken Activity and Actor modules in django admin (#767)" msgstr "" -#: ../../../CHANGELOG:2407 +#: ../../../CHANGELOG.md:2272 msgid "Fixed broken sample apache configuration (#764)" msgstr "" -#: ../../../CHANGELOG:2408 +#: ../../../CHANGELOG.md:2273 msgid "Fixed constant and unpredictable reordering during file upload (#716)" msgstr "" -#: ../../../CHANGELOG:2409 +#: ../../../CHANGELOG.md:2274 msgid "" "Fixed delivering of local activities causing unintended side effects, " "such as rollbacking changes (#737)" msgstr "" -#: ../../../CHANGELOG:2410 +#: ../../../CHANGELOG.md:2275 msgid "Fixed escaping issues in translated strings (#652)" msgstr "" -#: ../../../CHANGELOG:2411 +#: ../../../CHANGELOG.md:2276 msgid "Fixed saving moderation policy when clicking on \"Cancel\" (#751)" msgstr "" -#: ../../../CHANGELOG:2412 +#: ../../../CHANGELOG.md:2277 msgid "i18n: Update page title when changing the App's language. (#511)" msgstr "" -#: ../../../CHANGELOG:2413 +#: ../../../CHANGELOG.md:2278 msgid "Include disc number in Subsonic responses (#765)" msgstr "" -#: ../../../CHANGELOG:2414 +#: ../../../CHANGELOG.md:2279 msgid "Do not send notification when rejecting a follow on a local library (#743)" msgstr "" -#: ../../../CHANGELOG:2419 +#: ../../../CHANGELOG.md:2283 msgid "Added documentation on mono-container docker upgrade (#713)" msgstr "" -#: ../../../CHANGELOG:2420 +#: ../../../CHANGELOG.md:2284 msgid "Added documentation to set up let's encrypt certificate (#745)" msgstr "" -#: ../../../CHANGELOG:2424 +#: ../../../CHANGELOG.md:2286 msgid "0.18.2 (2019-02-13)" msgstr "" -#: ../../../CHANGELOG:2431 +#: ../../../CHANGELOG.md:2292 msgid "" "Added a 'fix_federation_ids' management command to deal with " "protocol/domain issues in federation IDs after deployments (#706)" msgstr "" -#: ../../../CHANGELOG:2433 +#: ../../../CHANGELOG.md:2294 msgid "" "Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an" " HTTP request (#705)" msgstr "" -#: ../../../CHANGELOG:2438 +#: ../../../CHANGELOG.md:2298 msgid "Downgraded channels dependency to 2.1.6 to fix denied uploads (#697)" msgstr "" -#: ../../../CHANGELOG:2439 +#: ../../../CHANGELOG.md:2299 msgid "Fixed cards display issues on medium/small screens (#707)" msgstr "" -#: ../../../CHANGELOG:2440 +#: ../../../CHANGELOG.md:2300 msgid "" "Fixed Embed component name that could lead to issue when developping on " "OSX (#696)" msgstr "" -#: ../../../CHANGELOG:2441 +#: ../../../CHANGELOG.md:2301 msgid "Fixed resizing issues for album cards on artist pages (#694)" msgstr "" -#: ../../../CHANGELOG:2445 +#: ../../../CHANGELOG.md:2303 msgid "0.18.1 (2019-01-29)" msgstr "" -#: ../../../CHANGELOG:2452 +#: ../../../CHANGELOG.md:2307 msgid "" "Fix Gzip compression to avoid BREACH exploit [security] [manual action " "required]" msgstr "" -#: ../../../CHANGELOG:2454 +#: ../../../CHANGELOG.md:2309 msgid "" "In the 0.18 release, we've enabled Gzip compression by default for " "various content types, including HTML and JSON. Unfortunately, enabling " @@ -5021,135 +5356,135 @@ msgid "" "possible." msgstr "" -#: ../../../CHANGELOG:2458 +#: ../../../CHANGELOG.md:2313 msgid "" "We've removed the risky content-types from our nginx template files, to " "ensure new instances are safe, however, if you already have an instance, " "you need to double check that your host nginx virtualhost do not include " -"the following values for the ``gzip_types`` settings::" +"the following values for the `gzip_types` settings:" msgstr "" -#: ../../../CHANGELOG:2472 +#: ../../../CHANGELOG.md:2329 msgid "" "For convenience, you can also replace the whole setting with the " -"following snippet::" +"following snippet:" msgstr "" -#: ../../../CHANGELOG:2493 +#: ../../../CHANGELOG.md:2352 msgid "Many thanks to @jibec for the report!" msgstr "" -#: ../../../CHANGELOG:2496 +#: ../../../CHANGELOG.md:2354 msgid "Fix Apache configuration file for 0.18 [manual action required]" msgstr "" -#: ../../../CHANGELOG:2498 +#: ../../../CHANGELOG.md:2356 msgid "" "The way front is served has changed since 0.18. The Apache configuration " "can't serve 0.18 properly, leading to blank screens." msgstr "" -#: ../../../CHANGELOG:2500 +#: ../../../CHANGELOG.md:2358 msgid "" "If you are on an Apache setup, you will have to replace the `<Location " -"\"/api\">` block with the following::" +"\"/api\">` block with the following:" msgstr "" -#: ../../../CHANGELOG:2510 +#: ../../../CHANGELOG.md:2370 msgid "" "And add some more `ProxyPass` directives so that the `Alias` part of your" -" configuration file looks this way::" +" configuration file looks this way:" msgstr "" -#: ../../../CHANGELOG:2521 +#: ../../../CHANGELOG.md:2383 msgid "" "In case you are using custom css and theming, you also need to match this" -" block::" +" block:" msgstr "" -#: ../../../CHANGELOG:2532 +#: ../../../CHANGELOG.md:2395 msgid "" "Added name attributes on all inputs to improve UX, especially with " "password managers (#686)" msgstr "" -#: ../../../CHANGELOG:2533 +#: ../../../CHANGELOG.md:2396 msgid "" "Disable makemigrations in production and misleading message when running " "migrate (#685)" msgstr "" -#: ../../../CHANGELOG:2534 +#: ../../../CHANGELOG.md:2397 msgid "Display progress during file upload" msgstr "" -#: ../../../CHANGELOG:2535 +#: ../../../CHANGELOG.md:2398 msgid "Hide pagination when there is only one page of results (#681)" msgstr "" -#: ../../../CHANGELOG:2536 +#: ../../../CHANGELOG.md:2399 msgid "Include shared/public playlists in Subsonic API responses (#684)" msgstr "" -#: ../../../CHANGELOG:2537 +#: ../../../CHANGELOG.md:2400 msgid "Use proper locale for date-related/duration strings (#670)" msgstr "" -#: ../../../CHANGELOG:2542 +#: ../../../CHANGELOG.md:2404 msgid "Fix transcoding of in-place imported tracks (#688)" msgstr "" -#: ../../../CHANGELOG:2543 +#: ../../../CHANGELOG.md:2405 msgid "" "Fixed celery worker defaulting to development settings instead of " "production" msgstr "" -#: ../../../CHANGELOG:2544 +#: ../../../CHANGELOG.md:2406 msgid "Fixed crashing Django admin when loading track detail page (#666)" msgstr "" -#: ../../../CHANGELOG:2545 +#: ../../../CHANGELOG.md:2407 msgid "Fixed list icon alignment on landing page (#668)" msgstr "" -#: ../../../CHANGELOG:2546 +#: ../../../CHANGELOG.md:2408 msgid "Fixed overescaping issue in notifications and album page (#676)" msgstr "" -#: ../../../CHANGELOG:2547 +#: ../../../CHANGELOG.md:2409 msgid "Fixed wrong number of affected elements in bulk action modal (#683)" msgstr "" -#: ../../../CHANGELOG:2548 +#: ../../../CHANGELOG.md:2410 msgid "" "Fixed wrong URL in documentation for funkwhale_proxy.conf file when " "deploying using Docker" msgstr "" -#: ../../../CHANGELOG:2549 +#: ../../../CHANGELOG.md:2411 msgid "Make Apache configuration file work with 0.18 changes (#667)" msgstr "" -#: ../../../CHANGELOG:2550 +#: ../../../CHANGELOG.md:2412 msgid "Removed potential BREACH exploit because of Gzip compression (#678)" msgstr "" -#: ../../../CHANGELOG:2551 +#: ../../../CHANGELOG.md:2413 msgid "Upgraded kombu to fix an incompatibility with redis>=3" msgstr "" -#: ../../../CHANGELOG:2556 +#: ../../../CHANGELOG.md:2417 msgid "" "Added user upload documentation at " "https://docs.funkwhale.audio/users/upload.html" msgstr "" -#: ../../../CHANGELOG:2560 +#: ../../../CHANGELOG.md:2419 msgid "0.18 \"Naomi\" (2019-01-22)" msgstr "" -#: ../../../CHANGELOG:2562 +#: ../../../CHANGELOG.md:2421 msgid "" "This release is dedicated to Naomi, an early contributor and beta tester " "of Funkwhale. Her positivity, love and support have been incredibly " @@ -5157,37 +5492,37 @@ msgid "" " so much Naomi <3" msgstr "" -#: ../../../CHANGELOG:2566 +#: ../../../CHANGELOG.md:2425 msgid "" "Many thanks to the dozens of people that contributed to this release: " "translators, developers, bug hunters, admins and backers. You made it " "possible!" msgstr "" -#: ../../../CHANGELOG:2569 +#: ../../../CHANGELOG.md:2428 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html, ensure you also " -"execute the instructions marked with ``[manual action required]`` and " -"``[manual action suggested]``." +"execute the instructions marked with `[manual action required]` and " +"`[manual action suggested]`." msgstr "" -#: ../../../CHANGELOG:2573 -msgid "See ``Full changelog`` below for an exhaustive list of changes!" +#: ../../../CHANGELOG.md:2431 +msgid "See `Full changelog` below for an exhaustive list of changes!" msgstr "" -#: ../../../CHANGELOG:2576 +#: ../../../CHANGELOG.md:2433 msgid "Audio transcoding is back!" msgstr "" -#: ../../../CHANGELOG:2578 +#: ../../../CHANGELOG.md:2435 msgid "" "After removal of our first, buggy transcoding implementation, we're proud" " to announce that this feature is back. It is enabled by default, and can" " be configured/disabled in your instance settings!" msgstr "" -#: ../../../CHANGELOG:2582 +#: ../../../CHANGELOG.md:2439 msgid "" "This feature works in the browser, with federated/non-federated tracks " "and using Subsonic clients. Transcoded tracks are generated on the fly, " @@ -5195,11 +5530,11 @@ msgid "" "server." msgstr "" -#: ../../../CHANGELOG:2588 +#: ../../../CHANGELOG.md:2443 msgid "Licensing and copyright information" msgstr "" -#: ../../../CHANGELOG:2590 +#: ../../../CHANGELOG.md:2445 msgid "" "Funkwhale is now able to parse copyright and license data from file and " "store this information. Apart from displaying it on each track detail " @@ -5207,57 +5542,57 @@ msgid "" "data, but this will change in future releases." msgstr "" -#: ../../../CHANGELOG:2595 +#: ../../../CHANGELOG.md:2450 msgid "License and copyright data is also broadcasted over federation." msgstr "" -#: ../../../CHANGELOG:2597 +#: ../../../CHANGELOG.md:2452 msgid "" -"License matching is done on the content of the ``License`` tag in the " -"files, with a fallback on the ``Copyright`` tag." +"License matching is done on the content of the `License` tag in the " +"files, with a fallback on the `Copyright` tag." msgstr "" -#: ../../../CHANGELOG:2600 +#: ../../../CHANGELOG.md:2455 msgid "" "Funkwhale will successfully extract licensing data for the following " "licenses:" msgstr "" -#: ../../../CHANGELOG:2602 +#: ../../../CHANGELOG.md:2457 msgid "Creative Commons 0 (Public Domain)" msgstr "" -#: ../../../CHANGELOG:2603 +#: ../../../CHANGELOG.md:2458 msgid "Creative Commons 1.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2604 +#: ../../../CHANGELOG.md:2459 msgid "Creative Commons 2.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2605 +#: ../../../CHANGELOG.md:2460 msgid "Creative Commons 2.5 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2606 +#: ../../../CHANGELOG.md:2461 msgid "Creative Commons 3.0 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2607 +#: ../../../CHANGELOG.md:2462 msgid "Creative Commons 4.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2609 +#: ../../../CHANGELOG.md:2464 msgid "" "Support for other licenses such as Art Libre or WTFPL will be added in " "future releases." msgstr "" -#: ../../../CHANGELOG:2613 +#: ../../../CHANGELOG.md:2466 msgid "Instance-level moderation tools" msgstr "" -#: ../../../CHANGELOG:2615 +#: ../../../CHANGELOG.md:2468 msgid "" "This release includes a first set of moderation tools that will give more" " control to admins about the way their instance federates with other " @@ -5265,39 +5600,39 @@ msgid "" "possible to:" msgstr "" -#: ../../../CHANGELOG:2619 +#: ../../../CHANGELOG.md:2472 msgid "" "Browse known accounts and domains, and associated data (storage size, " "software version, etc.)" msgstr "" -#: ../../../CHANGELOG:2620 +#: ../../../CHANGELOG.md:2473 msgid "Purge data belonging to given accounts and domains" msgstr "" -#: ../../../CHANGELOG:2621 +#: ../../../CHANGELOG.md:2474 msgid "Block or partially restrict interactions with any account or domain" msgstr "" -#: ../../../CHANGELOG:2623 +#: ../../../CHANGELOG.md:2476 msgid "" "All those features are usable using a brand new \"moderation\" " "permission, meaning you can appoint one or multiple moderators to help " "with this task." msgstr "" -#: ../../../CHANGELOG:2626 +#: ../../../CHANGELOG.md:2479 msgid "" "I'd like to thank all Mastodon contributors, because some of the these " "tools are heavily inspired from what's being done in Mastodon. Thank you " "so much!" msgstr "" -#: ../../../CHANGELOG:2631 +#: ../../../CHANGELOG.md:2482 msgid "Iframe widget to embed public tracks and albums [manual action required]" msgstr "" -#: ../../../CHANGELOG:2633 +#: ../../../CHANGELOG.md:2484 msgid "" "Funkwhale now supports embedding a lightweight audio player on external " "websites for album and tracks that are available in public libraries. " @@ -5306,444 +5641,447 @@ msgid "" " a Funkwhale track link on Mastodon or Twitter)." msgstr "" -#: ../../../CHANGELOG:2639 +#: ../../../CHANGELOG.md:2490 msgid "" "To achieve that, we had to tweak the way Funkwhale front-end is served. " "You'll have to modify your nginx configuration when upgrading to keep " "your instance working." msgstr "" -#: ../../../CHANGELOG:2642 +#: ../../../CHANGELOG.md:2493 msgid "" -"**On docker setups**, edit your " -"``/srv/funkwhale/nginx/funkwhale.template`` and replace the ``location " -"/api/`` and `location /` blocks by the following snippets::" +"**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template`" +" and replace the `location /api/` and `location /` blocks by the " +"following snippets:" msgstr "" -#: ../../../CHANGELOG:2656 +#: ../../../CHANGELOG.md:2509 msgid "" "The change of configuration will be picked when restarting your nginx " "container." msgstr "" -#: ../../../CHANGELOG:2658 +#: ../../../CHANGELOG.md:2511 msgid "" -"**On non-docker setups**, edit your ``/etc/nginx/sites-" -"available/funkwhale.conf`` file, and replace the ``location /api/`` and " -"`location /` blocks by the following snippets::" +"**On non-docker setups**, edit your `/etc/nginx/sites-" +"available/funkwhale.conf` file, and replace the `location /api/` and " +"`location /` blocks by the following snippets:" msgstr "" -#: ../../../CHANGELOG:2673 +#: ../../../CHANGELOG.md:2527 msgid "" -"Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from" -" your .env file, which should be ``/srv/funkwhale/front/dist`` by " -"default, then reload your nginx process with ``sudo systemctl reload " -"nginx``." +"Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from " +"your .env file, which should be `/srv/funkwhale/front/dist` by default, " +"then reload your nginx process with `sudo systemctl reload nginx`." msgstr "" -#: ../../../CHANGELOG:2679 +#: ../../../CHANGELOG.md:2531 msgid "Alternative docker deployment method" msgstr "" -#: ../../../CHANGELOG:2681 +#: ../../../CHANGELOG.md:2533 msgid "" "Thanks to the awesome work done by @thetarkus at " "https://github.com/thetarkus/docker-funkwhale, we're now able to provide " "an alternative and easier Docker deployment method!" msgstr "" -#: ../../../CHANGELOG:2684 +#: ../../../CHANGELOG.md:2536 msgid "" "In contrast with our current, multi-container offer, this method " "integrates all Funkwhale processes and services (database, redis, etc.) " "into a single, easier to deploy container." msgstr "" -#: ../../../CHANGELOG:2687 +#: ../../../CHANGELOG.md:2539 msgid "" "Both methods will coexist in parallel, as each one has pros and cons. You" " can learn more about this exciting new deployment option by visiting " "https://docs.funkwhale.audio/installation/docker.html!" msgstr "" -#: ../../../CHANGELOG:2691 +#: ../../../CHANGELOG.md:2542 msgid "Automatically load .env file" msgstr "" -#: ../../../CHANGELOG:2693 +#: ../../../CHANGELOG.md:2544 msgid "" "On non-docker deployments, earlier versions required you to source the " -"config/.env file before launching any Funkwhale command, with ``export " -"$(cat config/.env | grep -v ^# | xargs)`` This led to more complex and " +"config/.env file before launching any Funkwhale command, with `export " +"$(cat config/.env | grep -v ^# | xargs)` This led to more complex and " "error prone deployment / setup." msgstr "" -#: ../../../CHANGELOG:2697 +#: ../../../CHANGELOG.md:2548 msgid "" "This is not the case anymore, and Funkwhale will automatically load this " "file if it's available." msgstr "" -#: ../../../CHANGELOG:2701 +#: ../../../CHANGELOG.md:2550 msgid "Delete pre 0.17 federated tracks [manual action suggested]" msgstr "" -#: ../../../CHANGELOG:2703 +#: ../../../CHANGELOG.md:2552 msgid "" "If you were using Funkwhale before the 0.17 release and federated with " "other instances, it's possible that you still have some unplayable " "federated files in the database." msgstr "" -#: ../../../CHANGELOG:2706 +#: ../../../CHANGELOG.md:2555 msgid "To purge the database of those entries, you can run the following command:" msgstr "" -#: ../../../CHANGELOG:2708 ../../../CHANGELOG:3259 ../../../CHANGELOG:3282 -msgid "On docker setups::" +#: ../../../CHANGELOG.md:2557 ../../../CHANGELOG.md:3088 +#: ../../../CHANGELOG.md:3113 ../../../CHANGELOG.md:3735 +#: ../../../CHANGELOG.md:3772 +msgid "On docker setups:" msgstr "" -#: ../../../CHANGELOG:2712 ../../../CHANGELOG:3263 ../../../CHANGELOG:3286 -msgid "On non-docker setups::" +#: ../../../CHANGELOG.md:2563 ../../../CHANGELOG.md:3094 +#: ../../../CHANGELOG.md:3119 ../../../CHANGELOG.md:3741 +#: ../../../CHANGELOG.md:3778 +msgid "On non-docker setups:" msgstr "" -#: ../../../CHANGELOG:2718 +#: ../../../CHANGELOG.md:2569 msgid "Enable gzip compression [manual action suggested]" msgstr "" -#: ../../../CHANGELOG:2720 +#: ../../../CHANGELOG.md:2571 msgid "" "Gzip compression will be enabled on new instances by default and will " "reduce the amount of bandwidth consumed by your instance." msgstr "" -#: ../../../CHANGELOG:2723 +#: ../../../CHANGELOG.md:2574 msgid "" "If you want to benefit from gzip compression on your instance, edit your " -"reverse proxy virtualhost file (located at ``/etc/nginx/sites-" -"available/funkwhale.conf``) and add the following snippet in the server " -"block, then reload your nginx server::" +"reverse proxy virtualhost file (located at `/etc/nginx/sites-" +"available/funkwhale.conf`) and add the following snippet in the server " +"block, then reload your nginx server:" msgstr "" -#: ../../../CHANGELOG:2759 +#: ../../../CHANGELOG.md:2611 msgid "Full changelog" msgstr "" -#: ../../../CHANGELOG:2763 +#: ../../../CHANGELOG.md:2615 msgid "" "Allow embedding of albums and tracks available in public libraries via an" " <iframe> (#578)" msgstr "" -#: ../../../CHANGELOG:2764 +#: ../../../CHANGELOG.md:2616 msgid "Audio transcoding is back! (#272)" msgstr "" -#: ../../../CHANGELOG:2765 +#: ../../../CHANGELOG.md:2617 msgid "First set of instance level moderation tools (#580, !521)" msgstr "" -#: ../../../CHANGELOG:2766 +#: ../../../CHANGELOG.md:2618 msgid "" "Store licensing and copyright information from file metadata, if " "available (#308)" msgstr "" -#: ../../../CHANGELOG:2771 +#: ../../../CHANGELOG.md:2622 msgid "Add UI elements for multi-disc albums (#631)" msgstr "" -#: ../../../CHANGELOG:2772 +#: ../../../CHANGELOG.md:2623 msgid "Added alternative funkwhale/all-in-one docker image (#614)" msgstr "" -#: ../../../CHANGELOG:2773 +#: ../../../CHANGELOG.md:2624 msgid "Broadcast library updates (name, description, visibility) over federation" msgstr "" -#: ../../../CHANGELOG:2774 +#: ../../../CHANGELOG.md:2625 msgid "Based Docker image on alpine to have a smaller (and faster to build) image" msgstr "" -#: ../../../CHANGELOG:2775 +#: ../../../CHANGELOG.md:2626 msgid "" "Improved front-end performance by stripping unused dependencies, reducing" " bundle size and enabling gzip compression" msgstr "" -#: ../../../CHANGELOG:2777 +#: ../../../CHANGELOG.md:2628 msgid "" "Improved accessibility by using main/section/nav tags and aria-labels in " "most critical places (#612)" msgstr "" -#: ../../../CHANGELOG:2778 +#: ../../../CHANGELOG.md:2629 msgid "" "The progress bar in the player now display loading state / buffer loading" " (#586)" msgstr "" -#: ../../../CHANGELOG:2779 +#: ../../../CHANGELOG.md:2630 msgid "" "Added \"type: funkwhale\" and \"funkwhale-version\" in Subsonic responses" " (#573)" msgstr "" -#: ../../../CHANGELOG:2780 +#: ../../../CHANGELOG.md:2631 msgid "" "Documented keyboard shortcuts, list is now available by pressing \"h\" or" " in the footer (#611)" msgstr "" -#: ../../../CHANGELOG:2781 +#: ../../../CHANGELOG.md:2632 msgid "Documented which Subsonic endpoints are implemented (#575)" msgstr "" -#: ../../../CHANGELOG:2782 +#: ../../../CHANGELOG.md:2633 msgid "Hide invitation code field during signup when it's not required (#410)" msgstr "" -#: ../../../CHANGELOG:2783 +#: ../../../CHANGELOG.md:2634 msgid "" "Importer will now pick embedded images in files with OTHER type if no " "COVER_FRONT is present" msgstr "" -#: ../../../CHANGELOG:2784 +#: ../../../CHANGELOG.md:2635 msgid "" "Improved keyboard accessibility on player, queue and various controls " "(#576)" msgstr "" -#: ../../../CHANGELOG:2785 +#: ../../../CHANGELOG.md:2636 msgid "Improved performance when listing playable tracks, albums and artists" msgstr "" -#: ../../../CHANGELOG:2786 +#: ../../../CHANGELOG.md:2637 msgid "Increased default upload limit from 30 to 100MB (#654)" msgstr "" -#: ../../../CHANGELOG:2787 +#: ../../../CHANGELOG.md:2638 msgid "" "Load env file in config/.env automatically to avoid sourcing it by hand " "(#626)" msgstr "" -#: ../../../CHANGELOG:2788 +#: ../../../CHANGELOG.md:2639 msgid "" "More resilient date parsing during audio import, will not crash anymore " "on invalid dates (#622)" msgstr "" -#: ../../../CHANGELOG:2790 +#: ../../../CHANGELOG.md:2641 msgid "Now start radios immediately, skipping any existing tracks in queue (#585)" msgstr "" -#: ../../../CHANGELOG:2791 +#: ../../../CHANGELOG.md:2642 msgid "" "Officially support connecting to a password protected redis server, with " "the redis://:password@localhost:6379/0 scheme (#640)" msgstr "" -#: ../../../CHANGELOG:2793 +#: ../../../CHANGELOG.md:2644 msgid "" "Performance improvement when fetching favorites, down to a single, small " "http request" msgstr "" -#: ../../../CHANGELOG:2794 +#: ../../../CHANGELOG.md:2645 msgid "" "Removed \"Activity\" page, since all the data is available on the " "\"Browse\" page (#600)" msgstr "" -#: ../../../CHANGELOG:2795 +#: ../../../CHANGELOG.md:2646 msgid "Removed the need to specify the DJANGO_ALLOWED_HOSTS variable" msgstr "" -#: ../../../CHANGELOG:2796 +#: ../../../CHANGELOG.md:2647 msgid "Restructured the footer, added useful links and removed unused content" msgstr "" -#: ../../../CHANGELOG:2797 +#: ../../../CHANGELOG.md:2648 msgid "Show short entries first in search results to improve UX" msgstr "" -#: ../../../CHANGELOG:2798 +#: ../../../CHANGELOG.md:2649 msgid "Store disc number and order tracks by disc number / position) (#507)" msgstr "" -#: ../../../CHANGELOG:2799 +#: ../../../CHANGELOG.md:2650 msgid "" "Strip EXIF metadata from uploaded avatars to avoid leaking private data " "(#374)" msgstr "" -#: ../../../CHANGELOG:2800 +#: ../../../CHANGELOG.md:2651 msgid "Support blind key rotation in HTTP Signatures (#658)" msgstr "" -#: ../../../CHANGELOG:2801 +#: ../../../CHANGELOG.md:2652 msgid "Support setting a server URL in settings.json (#650)" msgstr "" -#: ../../../CHANGELOG:2802 +#: ../../../CHANGELOG.md:2653 msgid "Updated default docker postgres version from 9.4 to 11 (#656)" msgstr "" -#: ../../../CHANGELOG:2803 +#: ../../../CHANGELOG.md:2654 msgid "" "Updated lots of dependencies (especially django 2.0->2.1), and removed " "unused dependencies (#657)" msgstr "" -#: ../../../CHANGELOG:2804 +#: ../../../CHANGELOG.md:2655 msgid "" "Improved test suite speed by reducing / disabling expensive operations " "(#648)" msgstr "" -#: ../../../CHANGELOG:2809 +#: ../../../CHANGELOG.md:2659 msgid "" "Fixed parsing of embedded file cover for ogg files tagged with " "MusicBrainz (#469)" msgstr "" -#: ../../../CHANGELOG:2810 +#: ../../../CHANGELOG.md:2660 msgid "" "Upgraded core dependencies to fix websocket/messaging issues and possible" " memory leaks (#643)" msgstr "" -#: ../../../CHANGELOG:2811 +#: ../../../CHANGELOG.md:2661 msgid "Fix \".None\" extension when downloading Flac file (#473)" msgstr "" -#: ../../../CHANGELOG:2812 +#: ../../../CHANGELOG.md:2662 msgid "Fixed None extension when downloading an in-place imported file (#621)" msgstr "" -#: ../../../CHANGELOG:2813 +#: ../../../CHANGELOG.md:2663 msgid "Added a script to prune pre 0.17 federated tracks (#564)" msgstr "" -#: ../../../CHANGELOG:2814 +#: ../../../CHANGELOG.md:2664 msgid "Advertise public libraries properly in ActivityPub representations (#553)" msgstr "" -#: ../../../CHANGELOG:2815 +#: ../../../CHANGELOG.md:2665 msgid "Allow opus file upload (#598)" msgstr "" -#: ../../../CHANGELOG:2816 +#: ../../../CHANGELOG.md:2666 msgid "Do not display \"view on MusicBrainz\" button if we miss the mbid (#422)" msgstr "" -#: ../../../CHANGELOG:2817 +#: ../../../CHANGELOG.md:2667 msgid "Do not try to create unaccent extension if it's already present (#663)" msgstr "" -#: ../../../CHANGELOG:2818 +#: ../../../CHANGELOG.md:2668 msgid "" "Ensure admin links in sidebar are displayed for users with relevant " "permissions, and only them (#597)" msgstr "" -#: ../../../CHANGELOG:2819 +#: ../../../CHANGELOG.md:2669 msgid "Fix broken websocket connection under Chrome browser (#589)" msgstr "" -#: ../../../CHANGELOG:2820 +#: ../../../CHANGELOG.md:2670 msgid "Fix play button not starting playback with empty queue (#632)" msgstr "" -#: ../../../CHANGELOG:2821 +#: ../../../CHANGELOG.md:2671 msgid "" "Fixed a styling inconsistency on about page when instance description was" " missing (#659)" msgstr "" -#: ../../../CHANGELOG:2822 +#: ../../../CHANGELOG.md:2672 msgid "Fixed a UI discrepancy in playlist tracks count (#647)" msgstr "" -#: ../../../CHANGELOG:2823 +#: ../../../CHANGELOG.md:2673 msgid "Fixed greyed tracks in radio builder and detail page (#637)" msgstr "" -#: ../../../CHANGELOG:2824 +#: ../../../CHANGELOG.md:2674 msgid "Fixed inconsistencies in subsonic error responses (#616)" msgstr "" -#: ../../../CHANGELOG:2825 +#: ../../../CHANGELOG.md:2675 msgid "Fixed incorrect icon for \"next track\" in player control (#613)" msgstr "" -#: ../../../CHANGELOG:2826 +#: ../../../CHANGELOG.md:2676 msgid "Fixed malformed search string when redirecting to LyricsWiki (#608)" msgstr "" -#: ../../../CHANGELOG:2827 +#: ../../../CHANGELOG.md:2677 msgid "Fixed missing track count on various library cards (#581)" msgstr "" -#: ../../../CHANGELOG:2828 +#: ../../../CHANGELOG.md:2678 msgid "" "Fixed skipped track when appending multiple tracks to the queue under " "certain conditions (#209)" msgstr "" -#: ../../../CHANGELOG:2829 +#: ../../../CHANGELOG.md:2679 msgid "Fixed wrong album/track count on artist page (#599)" msgstr "" -#: ../../../CHANGELOG:2830 +#: ../../../CHANGELOG.md:2680 msgid "Hide unplayable/empty playlists in \"Browse playlist\" pages (#424)" msgstr "" -#: ../../../CHANGELOG:2831 +#: ../../../CHANGELOG.md:2681 msgid "Initial UI render using correct language from browser (#644)" msgstr "" -#: ../../../CHANGELOG:2832 +#: ../../../CHANGELOG.md:2682 msgid "Invalid URI for reverse proxy websocket with apache (#617)" msgstr "" -#: ../../../CHANGELOG:2833 +#: ../../../CHANGELOG.md:2683 msgid "Properly encode Wikipedia and lyrics search urls (#470)" msgstr "" -#: ../../../CHANGELOG:2834 +#: ../../../CHANGELOG.md:2684 msgid "Refresh profile after user settings update to avoid cache issues (#606)" msgstr "" -#: ../../../CHANGELOG:2835 +#: ../../../CHANGELOG.md:2685 msgid "Use role=button instead of empty links for player controls (#610)" msgstr "" -#: ../../../CHANGELOG:2840 +#: ../../../CHANGELOG.md:2689 msgid "" "Deploy documentation from the master branch instead of the develop branch" " to avoid inconsistencies (#642)" msgstr "" -#: ../../../CHANGELOG:2841 +#: ../../../CHANGELOG.md:2690 msgid "Document how to find and use library id when importing files in CLI (#562)" msgstr "" -#: ../../../CHANGELOG:2842 +#: ../../../CHANGELOG.md:2691 msgid "Fix documentation typos (#645)" msgstr "" -#: ../../../CHANGELOG:2846 +#: ../../../CHANGELOG.md:2693 msgid "0.17 (2018-10-07)" msgstr "" -#: ../../../CHANGELOG:2849 +#: ../../../CHANGELOG.md:2695 msgid "Per user libraries" msgstr "" -#: ../../../CHANGELOG:2851 +#: ../../../CHANGELOG.md:2697 msgid "" "This release contains a big change in music management. This has a lot of" " impact on how Funkwhale behaves, and you should have a look at " @@ -5751,99 +6089,99 @@ msgid "" "what changed and how to migrate." msgstr "" -#: ../../../CHANGELOG:2859 +#: ../../../CHANGELOG.md:2704 msgid "Per user libraries (#463, also fixes #160 and #147)" msgstr "" -#: ../../../CHANGELOG:2860 +#: ../../../CHANGELOG.md:2705 msgid "Authentication using a LDAP directory (#194)" msgstr "" -#: ../../../CHANGELOG:2865 +#: ../../../CHANGELOG.md:2709 msgid "Add configuration option to set Musicbrainz hostname" msgstr "" -#: ../../../CHANGELOG:2866 +#: ../../../CHANGELOG.md:2710 msgid "Add sign up link in the sidebar (#408)" msgstr "" -#: ../../../CHANGELOG:2867 +#: ../../../CHANGELOG.md:2711 msgid "" "Added a library widget to display libraries associated with a track, " "album and artist (#551)" msgstr "" -#: ../../../CHANGELOG:2869 +#: ../../../CHANGELOG.md:2713 msgid "Ensure from_activity field is not required in django's admin (#546)" msgstr "" -#: ../../../CHANGELOG:2870 +#: ../../../CHANGELOG.md:2714 msgid "Move setting link from profile page to the sidebar (#406)" msgstr "" -#: ../../../CHANGELOG:2871 +#: ../../../CHANGELOG.md:2715 msgid "Simplified and less error-prone nginx setup (#358)" msgstr "" -#: ../../../CHANGELOG:2875 +#: ../../../CHANGELOG.md:2719 msgid "" "Do not restart current song when rordering queue, deleting tracks from " "queue or adding tracks to queue (#464)" msgstr "" -#: ../../../CHANGELOG:2877 +#: ../../../CHANGELOG.md:2721 msgid "Fix broken icons in playlist editor (#515)" msgstr "" -#: ../../../CHANGELOG:2878 +#: ../../../CHANGELOG.md:2722 msgid "Fixed a few untranslated strings (#559)" msgstr "" -#: ../../../CHANGELOG:2879 +#: ../../../CHANGELOG.md:2723 msgid "Fixed split album when importing from federation (#346)" msgstr "" -#: ../../../CHANGELOG:2880 +#: ../../../CHANGELOG.md:2724 msgid "" "Fixed toggle mute in volume bar does not restore previous volume level " "(#514)" msgstr "" -#: ../../../CHANGELOG:2881 +#: ../../../CHANGELOG.md:2725 msgid "" "Fixed wrong env file URL and display bugs in deployment documentation " "(#520)" msgstr "" -#: ../../../CHANGELOG:2882 +#: ../../../CHANGELOG.md:2726 msgid "Fixed wrong title in PlayButton (#435)" msgstr "" -#: ../../../CHANGELOG:2883 +#: ../../../CHANGELOG.md:2727 msgid "Remove transparency on artist page button (#517)" msgstr "" -#: ../../../CHANGELOG:2884 +#: ../../../CHANGELOG.md:2728 msgid "Set sane width default for ui cards and center play button (#530)" msgstr "" -#: ../../../CHANGELOG:2885 +#: ../../../CHANGELOG.md:2729 msgid "Updated wrong icon and copy in play button dropdown (#436)" msgstr "" -#: ../../../CHANGELOG:2890 +#: ../../../CHANGELOG.md:2733 msgid "Fixed wrong URLs for docker / nginx files in documentation (#537)" msgstr "" -#: ../../../CHANGELOG:2895 +#: ../../../CHANGELOG.md:2737 msgid "Added a merge request template and more documentation about the changelog" msgstr "" -#: ../../../CHANGELOG:2899 +#: ../../../CHANGELOG.md:2739 msgid "Using a LDAP directory to authenticate to your Funkwhale instance" msgstr "" -#: ../../../CHANGELOG:2901 +#: ../../../CHANGELOG.md:2741 msgid "" "Funkwhale now support LDAP as an authentication source: you can configure" " your instance to delegate login to a LDAP directory, which is especially" @@ -5851,21 +6189,21 @@ msgid "" "users manually." msgstr "" -#: ../../../CHANGELOG:2906 +#: ../../../CHANGELOG.md:2746 msgid "You can use this authentication backend side by side with the classic one." msgstr "" -#: ../../../CHANGELOG:2908 +#: ../../../CHANGELOG.md:2748 msgid "" "Have a look at https://docs.funkwhale.audio/installation/ldap.html for " "detailed instructions on how to set this up." msgstr "" -#: ../../../CHANGELOG:2913 +#: ../../../CHANGELOG.md:2751 msgid "Simplified nginx setup [Docker: Manual action required]" msgstr "" -#: ../../../CHANGELOG:2915 +#: ../../../CHANGELOG.md:2753 msgid "" "We've received a lot of user feedback regarding our installation process," " and it seems the proxy part is the one which is the most confusing and " @@ -5873,446 +6211,445 @@ msgid "" "can completely break the application." msgstr "" -#: ../../../CHANGELOG:2920 +#: ../../../CHANGELOG.md:2758 msgid "" "To make things easier for everyone, we now offer a simplified deployment " "process for the reverse proxy part. This will make upgrade of the proxy " "configuration significantly easier on docker deployments." msgstr "" -#: ../../../CHANGELOG:2924 +#: ../../../CHANGELOG.md:2762 msgid "On non-docker instances, you have nothing to do." msgstr "" -#: ../../../CHANGELOG:2926 +#: ../../../CHANGELOG.md:2764 msgid "If you have a dockerized instance, here is the upgrade path." msgstr "" -#: ../../../CHANGELOG:2928 -msgid "First, tweak your .env file::" +#: ../../../CHANGELOG.md:2766 +msgid "First, tweak your .env file:" msgstr "" -#: ../../../CHANGELOG:2940 -msgid "Then, add the following block at the end of your docker-compose.yml file::" +#: ../../../CHANGELOG.md:2780 +msgid "Then, add the following block at the end of your docker-compose.yml file:" msgstr "" -#: ../../../CHANGELOG:2975 +#: ../../../CHANGELOG.md:2818 msgid "" "By doing that, you'll enable a dockerized nginx that will automatically " "be configured to serve your Funkwhale instance." msgstr "" -#: ../../../CHANGELOG:2978 +#: ../../../CHANGELOG.md:2821 msgid "Download the required configuration files for the nginx container:" msgstr "" -#: ../../../CHANGELOG:2987 -msgid "Update the funkwhale.conf configuration of your server's reverse-proxy::" +#: ../../../CHANGELOG.md:2830 +msgid "Update the funkwhale.conf configuration of your server's reverse-proxy:" msgstr "" -#: ../../../CHANGELOG:3033 +#: ../../../CHANGELOG.md:2881 msgid "Check that your configuration is valid then reload:" msgstr "" -#: ../../../CHANGELOG:3035 -msgid "sudo nginx -t sudo systemctl reload nginx" -msgstr "" - -#: ../../../CHANGELOG:3040 +#: ../../../CHANGELOG.md:2888 msgid "0.16.3 (2018-08-21)" msgstr "" -#: ../../../CHANGELOG:3042 ../../../CHANGELOG:3058 ../../../CHANGELOG:3072 -#: ../../../CHANGELOG:3147 ../../../CHANGELOG:3380 ../../../CHANGELOG:3462 -#: ../../../CHANGELOG:3584 ../../../CHANGELOG:4141 +#: ../../../CHANGELOG.md:2890 ../../../CHANGELOG.md:2903 +#: ../../../CHANGELOG.md:2915 ../../../CHANGELOG.md:2988 +#: ../../../CHANGELOG.md:3210 ../../../CHANGELOG.md:3283 +#: ../../../CHANGELOG.md:3398 ../../../CHANGELOG.md:3483 +#: ../../../CHANGELOG.md:3681 ../../../CHANGELOG.md:3791 +#: ../../../CHANGELOG.md:3934 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/upgrading.html" msgstr "" -#: ../../../CHANGELOG:3047 +#: ../../../CHANGELOG.md:2895 msgid "Fixed front-end not contacting the proper path on the API (!385)" msgstr "" -#: ../../../CHANGELOG:3051 +#: ../../../CHANGELOG.md:2897 msgid "0.16.2 (2018-08-21)" msgstr "" -#: ../../../CHANGELOG:3055 +#: ../../../CHANGELOG.md:2900 msgid "" "**This release is broken, do not use it. Upgrade to 0.16.3 or higher " "instead.**" msgstr "" -#: ../../../CHANGELOG:3063 +#: ../../../CHANGELOG.md:2908 msgid "" "Ensure we always have a default api url set on first load to avoid " "displaying the instance picker (#490)" msgstr "" -#: ../../../CHANGELOG:3065 +#: ../../../CHANGELOG.md:2910 msgid "" "Fixed CLI importer syntax error because of async reserved keyword usage " "(#494)" msgstr "" -#: ../../../CHANGELOG:3070 +#: ../../../CHANGELOG.md:2913 msgid "0.16.1 (2018-08-19)" msgstr "" -#: ../../../CHANGELOG:3077 +#: ../../../CHANGELOG.md:2920 msgid "Make funkwhale themable by loading external stylesheets (#456)" msgstr "" -#: ../../../CHANGELOG:3081 +#: ../../../CHANGELOG.md:2924 msgid "Add link to admin on \"Staff member\" button (#202)" msgstr "" -#: ../../../CHANGELOG:3082 +#: ../../../CHANGELOG.md:2925 msgid "Can now add a description to radios and better radio cards (#331)" msgstr "" -#: ../../../CHANGELOG:3083 +#: ../../../CHANGELOG.md:2926 msgid "Display track duration in track tables (#461)" msgstr "" -#: ../../../CHANGELOG:3084 +#: ../../../CHANGELOG.md:2927 msgid "More permissive default permissions for front-end files (#388)" msgstr "" -#: ../../../CHANGELOG:3085 +#: ../../../CHANGELOG.md:2928 msgid "Simpler configuration and toolchain for the front-end using vue-cli (!375)" msgstr "" -#: ../../../CHANGELOG:3086 +#: ../../../CHANGELOG.md:2929 msgid "Use Howler to manage audio instead of our own dirty/untested code (#392)" msgstr "" -#: ../../../CHANGELOG:3091 +#: ../../../CHANGELOG.md:2933 msgid "Fix alignment issue on top bar in Admin tabs (#395)" msgstr "" -#: ../../../CHANGELOG:3092 +#: ../../../CHANGELOG.md:2934 msgid "" "Fix Apache2 permission issue preventing `/media` folder from being served" " correctly (#389)" msgstr "" -#: ../../../CHANGELOG:3094 +#: ../../../CHANGELOG.md:2936 msgid "" "Fix loading on browse page lists causing them to go down, and dimming " "over the top bar (#468)" msgstr "" -#: ../../../CHANGELOG:3096 +#: ../../../CHANGELOG.md:2938 msgid "" "Fixed (again): administration section not showing up in sidebar after " "login (#245)" msgstr "" -#: ../../../CHANGELOG:3098 +#: ../../../CHANGELOG.md:2940 msgid "Fixed audio mimetype not showing up on track detail and list (#459)" msgstr "" -#: ../../../CHANGELOG:3099 +#: ../../../CHANGELOG.md:2941 msgid "Fixed broken audio playback on Chrome and invisible volume control (#390)" msgstr "" -#: ../../../CHANGELOG:3100 +#: ../../../CHANGELOG.md:2942 msgid "" "Fixed broken federation import on big imports due to missing transaction " "logic (#397)" msgstr "" -#: ../../../CHANGELOG:3102 +#: ../../../CHANGELOG.md:2944 msgid "Fixed crash on artist pages when no cover is available (#457)" msgstr "" -#: ../../../CHANGELOG:3103 +#: ../../../CHANGELOG.md:2945 msgid "Fixed favorited status of tracks not appearing in interface (#398)" msgstr "" -#: ../../../CHANGELOG:3104 +#: ../../../CHANGELOG.md:2946 msgid "" "Fixed invitation code not prefilled in form when accessing invitation " "link (#476)" msgstr "" -#: ../../../CHANGELOG:3106 +#: ../../../CHANGELOG.md:2948 msgid "Fixed typos in scheduled tasks configuration (#487)" msgstr "" -#: ../../../CHANGELOG:3107 +#: ../../../CHANGELOG.md:2949 msgid "Removed release date error in case of empty date (#478)" msgstr "" -#: ../../../CHANGELOG:3108 +#: ../../../CHANGELOG.md:2950 msgid "Removed white on white artist button on hover, on Album page (#393)" msgstr "" -#: ../../../CHANGELOG:3109 +#: ../../../CHANGELOG.md:2951 msgid "Smarter date parsing during import by replacing arrow with pendulum (#376)" msgstr "" -#: ../../../CHANGELOG:3110 +#: ../../../CHANGELOG.md:2952 msgid "Display public playlists properly for anonymous users (#488)" msgstr "" -#: ../../../CHANGELOG:3113 ../../../CHANGELOG:3205 +#: ../../../CHANGELOG.md:2954 ../../../CHANGELOG.md:3042 msgid "i18n:" msgstr "" -#: ../../../CHANGELOG:3115 +#: ../../../CHANGELOG.md:2956 msgid "Added portuguese, spanish and german translations" msgstr "" -#: ../../../CHANGELOG:3119 +#: ../../../CHANGELOG.md:2958 msgid "Custom themes for Funkwhale" msgstr "" -#: ../../../CHANGELOG:3121 +#: ../../../CHANGELOG.md:2960 msgid "" "If you ever wanted to give a custom look and feel to your instance, this " "is now possible." msgstr "" -#: ../../../CHANGELOG:3123 +#: ../../../CHANGELOG.md:2962 msgid "" "Check https://docs.funkwhale.audio/configuration.html#theming if you want" " to know more!" msgstr "" -#: ../../../CHANGELOG:3127 +#: ../../../CHANGELOG.md:2964 msgid "Fix Apache2 configuration file for media block [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3129 +#: ../../../CHANGELOG.md:2966 msgid "" "The permission scope on the current Apache2 configuration file is too " "narrow, preventing thumbnails from being served." msgstr "" -#: ../../../CHANGELOG:3131 -msgid "On Apache2 setups, you have to replace the following line::" +#: ../../../CHANGELOG.md:2968 +msgid "On Apache2 setups, you have to replace the following line:" msgstr "" -#: ../../../CHANGELOG:3135 -msgid "with::" +#: ../../../CHANGELOG.md:2974 +msgid "with:" msgstr "" -#: ../../../CHANGELOG:3139 -msgid "You can now restart your server::" +#: ../../../CHANGELOG.md:2980 +msgid "You can now restart your server:" msgstr "" -#: ../../../CHANGELOG:3145 +#: ../../../CHANGELOG.md:2986 msgid "0.16 (2018-07-22)" msgstr "" -#: ../../../CHANGELOG:3152 +#: ../../../CHANGELOG.md:2993 msgid "Complete redesign of the library home and playlist pages (#284)" msgstr "" -#: ../../../CHANGELOG:3153 +#: ../../../CHANGELOG.md:2994 msgid "Expose ActivityPub actors for users (#317)" msgstr "" -#: ../../../CHANGELOG:3154 +#: ../../../CHANGELOG.md:2995 msgid "" "Implemented a basic but functional Github-like search on federated tracks" " list (#344)" msgstr "" -#: ../../../CHANGELOG:3156 +#: ../../../CHANGELOG.md:2997 msgid "" "Internationalized interface as well as translations for Arabic, French, " "Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167)" msgstr "" -#: ../../../CHANGELOG:3158 +#: ../../../CHANGELOG.md:2999 msgid "Users can now upload an avatar in their settings page (#257)" msgstr "" -#: ../../../CHANGELOG:3163 +#: ../../../CHANGELOG.md:3003 msgid "Added feedback when creating/updating radio (#302)" msgstr "" -#: ../../../CHANGELOG:3164 +#: ../../../CHANGELOG.md:3004 msgid "Apply restrictions to username characters during signup" msgstr "" -#: ../../../CHANGELOG:3165 +#: ../../../CHANGELOG.md:3005 msgid "Autoselect best language based on browser configuration (#386)" msgstr "" -#: ../../../CHANGELOG:3166 +#: ../../../CHANGELOG.md:3006 msgid "Can now order tracks on federated track list (#326)" msgstr "" -#: ../../../CHANGELOG:3167 +#: ../../../CHANGELOG.md:3007 msgid "Can now relaunch pending import jobs from the web interface (#323)" msgstr "" -#: ../../../CHANGELOG:3168 +#: ../../../CHANGELOG.md:3008 msgid "Ensure we do not display pagination on single pages (#334)" msgstr "" -#: ../../../CHANGELOG:3169 +#: ../../../CHANGELOG.md:3009 msgid "" "Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and " "MUSIC_DIRECTORY_PATH in the deployment .env file (#350)" msgstr "" -#: ../../../CHANGELOG:3171 +#: ../../../CHANGELOG.md:3011 msgid "Make some space for the volume slider to allow precise control (#318)" msgstr "" -#: ../../../CHANGELOG:3172 +#: ../../../CHANGELOG.md:3012 msgid "Removed django-cacheops dependency" msgstr "" -#: ../../../CHANGELOG:3173 +#: ../../../CHANGELOG.md:3013 msgid "" "Store track artist and album artist separately (#237) Better handling of " "tracks with a different artist than the album artist" msgstr "" -#: ../../../CHANGELOG:3175 +#: ../../../CHANGELOG.md:3015 msgid "The navigation bar of Library is now fixed (#375)" msgstr "" -#: ../../../CHANGELOG:3176 +#: ../../../CHANGELOG.md:3016 msgid "Use thumbnails for avatars and covers to reduce bandwidth" msgstr "" -#: ../../../CHANGELOG:3181 +#: ../../../CHANGELOG.md:3020 msgid "Ensure 750 permissions on CI artifacts (#332)" msgstr "" -#: ../../../CHANGELOG:3182 +#: ../../../CHANGELOG.md:3021 msgid "Ensure images are not cropped in queue (#337)" msgstr "" -#: ../../../CHANGELOG:3183 +#: ../../../CHANGELOG.md:3022 msgid "Ensure we do not import artists with empty names (#351)" msgstr "" -#: ../../../CHANGELOG:3184 +#: ../../../CHANGELOG.md:3023 msgid "Fix notifications not closing when clicking on the cross (#366)" msgstr "" -#: ../../../CHANGELOG:3185 +#: ../../../CHANGELOG.md:3024 msgid "Fix the most annoying offset in the whole fediverse (#369)" msgstr "" -#: ../../../CHANGELOG:3186 +#: ../../../CHANGELOG.md:3025 msgid "Fixed persistent message in playlist modal (#304)" msgstr "" -#: ../../../CHANGELOG:3187 +#: ../../../CHANGELOG.md:3026 msgid "Fixed unfiltered results in favorites API (#384)" msgstr "" -#: ../../../CHANGELOG:3188 +#: ../../../CHANGELOG.md:3027 msgid "" "Raise a warning instead of crashing when getting a broken path in file " "import (#138)" msgstr "" -#: ../../../CHANGELOG:3190 +#: ../../../CHANGELOG.md:3029 msgid "" "Remove parallelization of uploads during import to avoid crashing small " "servers (#382)" msgstr "" -#: ../../../CHANGELOG:3192 +#: ../../../CHANGELOG.md:3031 msgid "Subsonic API login is now case insensitive (#339)" msgstr "" -#: ../../../CHANGELOG:3193 +#: ../../../CHANGELOG.md:3032 msgid "Validate Date header in HTTP Signatures (#328)" msgstr "" -#: ../../../CHANGELOG:3198 +#: ../../../CHANGELOG.md:3036 msgid "Added troubleshotting and technical overview documentation (#256)" msgstr "" -#: ../../../CHANGELOG:3199 +#: ../../../CHANGELOG.md:3037 msgid "Arch Linux installation steps" msgstr "" -#: ../../../CHANGELOG:3200 +#: ../../../CHANGELOG.md:3038 msgid "Document that users can use Ultrasonic on Android (#316)" msgstr "" -#: ../../../CHANGELOG:3201 +#: ../../../CHANGELOG.md:3039 msgid "Fixed a couple of typos" msgstr "" -#: ../../../CHANGELOG:3202 +#: ../../../CHANGELOG.md:3040 msgid "Some cosmetic improvements to the doc" msgstr "" -#: ../../../CHANGELOG:3207 +#: ../../../CHANGELOG.md:3044 msgid "Arabic translation (!302)" msgstr "" -#: ../../../CHANGELOG:3208 +#: ../../../CHANGELOG.md:3045 msgid "Polish translation (!304)" msgstr "" -#: ../../../CHANGELOG:3212 +#: ../../../CHANGELOG.md:3047 msgid "Library home and playlist page overhaul" msgstr "" -#: ../../../CHANGELOG:3214 +#: ../../../CHANGELOG.md:3049 msgid "The library home page have been completely redesigned to include:" msgstr "" -#: ../../../CHANGELOG:3216 +#: ../../../CHANGELOG.md:3051 msgid "other users activity (listenings, playlists and favorites)" msgstr "" -#: ../../../CHANGELOG:3217 +#: ../../../CHANGELOG.md:3052 msgid "recently imported albums" msgstr "" -#: ../../../CHANGELOG:3219 +#: ../../../CHANGELOG.md:3054 msgid "" "We think this new version showcases more music in a more useful way, let " "us know what you think about it!" msgstr "" -#: ../../../CHANGELOG:3222 +#: ../../../CHANGELOG.md:3057 msgid "The playlist page have been updated as well." msgstr "" -#: ../../../CHANGELOG:3226 +#: ../../../CHANGELOG.md:3059 msgid "Internationalized interface" msgstr "" -#: ../../../CHANGELOG:3228 +#: ../../../CHANGELOG.md:3061 msgid "" "After months of work, we're proud to announce our interface is now ready " "for internationalization." msgstr "" -#: ../../../CHANGELOG:3231 +#: ../../../CHANGELOG.md:3064 msgid "" "Translators have already started the work of translating Funkwhale in 8 " "different languages, and we're ready to add more as needed." msgstr "" -#: ../../../CHANGELOG:3234 +#: ../../../CHANGELOG.md:3067 msgid "" "You can easily get involved at " "https://translate.funkwhale.audio/engage/funkwhale/" msgstr "" -#: ../../../CHANGELOG:3238 +#: ../../../CHANGELOG.md:3069 msgid "Better handling of tracks with a different artist than the album artist" msgstr "" -#: ../../../CHANGELOG:3240 +#: ../../../CHANGELOG.md:3071 msgid "" "Some tracks involve a different artist than the album artist (e.g. a " "featuring) and Funkwhale has been known to do weird things when importing" @@ -6320,47 +6657,47 @@ msgid "" "instance." msgstr "" -#: ../../../CHANGELOG:3244 +#: ../../../CHANGELOG.md:3075 msgid "" "The situation should be improved with this release, as Funkwhale is now " "able to store separately the track and album artist, and display it " "properly in the interface." msgstr "" -#: ../../../CHANGELOG:3249 +#: ../../../CHANGELOG.md:3078 msgid "Users now have an ActivityPub Actor [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3251 +#: ../../../CHANGELOG.md:3080 msgid "" "In the process of implementing federation for user activity such as " "listening history, we are now making user profiles (a.k.a. ActivityPub " "actors) available through federation." msgstr "" -#: ../../../CHANGELOG:3254 +#: ../../../CHANGELOG.md:3083 msgid "" "This does not means the federation is working, but this is a needed step " "to implement it." msgstr "" -#: ../../../CHANGELOG:3256 +#: ../../../CHANGELOG.md:3085 msgid "" "Those profiles will be created automatically for new users, but you have " "to run a command to create them for existing users." msgstr "" -#: ../../../CHANGELOG:3267 +#: ../../../CHANGELOG.md:3100 msgid "" "This should only take a few seconds to run. It is safe to interrupt the " "process or rerun it multiple times." msgstr "" -#: ../../../CHANGELOG:3271 +#: ../../../CHANGELOG.md:3102 msgid "Image thumbnails [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3273 +#: ../../../CHANGELOG.md:3104 msgid "" "To reduce bandwidth usage on slow or limited connexions and improve " "performance in general, we now use smaller images in the front-end. For " @@ -6370,38 +6707,38 @@ msgid "" "image." msgstr "" -#: ../../../CHANGELOG:3279 +#: ../../../CHANGELOG.md:3110 msgid "" "Thumbnail will be created automatically for new objects, however, you " "have to launch a manual command to deal with existing ones." msgstr "" -#: ../../../CHANGELOG:3290 +#: ../../../CHANGELOG.md:3125 msgid "" "This should be quite fast but may take up to a few minutes depending on " "the number of albums you have in database. It is safe to interrupt the " "process or rerun it multiple times." msgstr "" -#: ../../../CHANGELOG:3295 +#: ../../../CHANGELOG.md:3128 msgid "Improved search on federated tracks list" msgstr "" -#: ../../../CHANGELOG:3297 +#: ../../../CHANGELOG.md:3130 msgid "" "Having a powerful but easy-to-use search is important but difficult to " "achieve, especially if you do not want to have a real complex search " "interface." msgstr "" -#: ../../../CHANGELOG:3300 +#: ../../../CHANGELOG.md:3133 msgid "" "Github does a pretty good job with that, using a structured but simple " "query system (See https://help.github.com/articles/searching-issues-and-" "pull-requests/#search-only-issues-or-pull-requests)." msgstr "" -#: ../../../CHANGELOG:3303 +#: ../../../CHANGELOG.md:3136 msgid "" "This release implements a limited but working subset of this query " "system. You can use it only on the federated tracks list " @@ -6409,51 +6746,51 @@ msgid "" "will be rolled-out on other pages as well." msgstr "" -#: ../../../CHANGELOG:3306 +#: ../../../CHANGELOG.md:3139 msgid "This is the type of query you can run:" msgstr "" -#: ../../../CHANGELOG:3308 +#: ../../../CHANGELOG.md:3141 msgid "" -"``hello world``: search for \"hello\" and \"world\" in all the available " +"`hello world`: search for \"hello\" and \"world\" in all the available " "fields" msgstr "" -#: ../../../CHANGELOG:3309 -msgid "``hello in:artist`` search for results where artist name is \"hello\"" +#: ../../../CHANGELOG.md:3142 +msgid "`hello in:artist` search for results where artist name is \"hello\"" msgstr "" -#: ../../../CHANGELOG:3310 +#: ../../../CHANGELOG.md:3143 msgid "" -"``spring in:artist,album`` search for results where artist name or album " +"`spring in:artist,album` search for results where artist name or album " "title contain \"spring\"" msgstr "" -#: ../../../CHANGELOG:3311 -msgid "``artist:hello`` search for results where artist name equals \"hello\"" +#: ../../../CHANGELOG.md:3144 +msgid "`artist:hello` search for results where artist name equals \"hello\"" msgstr "" -#: ../../../CHANGELOG:3312 +#: ../../../CHANGELOG.md:3145 msgid "" -"``artist:\"System of a Down\" domain:instance.funkwhale`` search for " +"`artist:\"System of a Down\" domain:instance.funkwhale` search for " "results where artist name equals \"System of a Down\" and inside " "\"instance.funkwhale\" library" msgstr "" -#: ../../../CHANGELOG:3316 +#: ../../../CHANGELOG.md:3147 msgid "" -"Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitly " -"[Manual action required]" +"Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set " +"explicitly [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3318 +#: ../../../CHANGELOG.md:3149 msgid "" "In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by " "default, causing some deployment issues on non-docker setups when people " "forgot to uncomment them." msgstr "" -#: ../../../CHANGELOG:3321 +#: ../../../CHANGELOG.md:3152 msgid "" "From now on, those variables are uncommented, and will also be used on " "docker setups to mount the volumes automatically in the docker-" @@ -6462,180 +6799,180 @@ msgid "" "file." msgstr "" -#: ../../../CHANGELOG:3326 +#: ../../../CHANGELOG.md:3157 msgid "" "This also applies to in-place paths (MUSIC_DIRECTORY_PATH and " "MUSIC_DIRECTORY_SERVE_PATH), whose values are now used directly to set up" " the proper Docker volumes." msgstr "" -#: ../../../CHANGELOG:3329 +#: ../../../CHANGELOG.md:3160 msgid "" "This will only affect new deployments though. If you want to benefit from" -" this on an existing instance, do a backup of your ``.env`` and ``docker-" -"compose.yml`` files and apply the following changes:" +" this on an existing instance, do a backup of your `.env` and `docker-" +"compose.yml` files and apply the following changes:" msgstr "" -#: ../../../CHANGELOG:3332 +#: ../../../CHANGELOG.md:3163 msgid "" -"Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the " +"Ensure `MEDIA_ROOT` is uncommented in your .env file and match the " "absolute path where media files are stored on your host " -"(``/srv/funkwhale/data/media`` by default)" +"(`/srv/funkwhale/data/media` by default)" msgstr "" -#: ../../../CHANGELOG:3334 +#: ../../../CHANGELOG.md:3165 msgid "" -"Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the " +"Ensure `STATIC_ROOT` is uncommented in your .env file and match the " "absolute path where static files are stored on your host " -"(``/srv/funkwhale/data/static`` by default)" +"(`/srv/funkwhale/data/static` by default)" msgstr "" -#: ../../../CHANGELOG:3338 +#: ../../../CHANGELOG.md:3167 msgid "If you use in-place import:" msgstr "" -#: ../../../CHANGELOG:3337 -msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``" +#: ../../../CHANGELOG.md:3168 +msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music`" msgstr "" -#: ../../../CHANGELOG:3338 +#: ../../../CHANGELOG.md:3169 msgid "" "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute " "path on your host were your music files are stored " -"(``/srv/funkwhale/data/music`` by default)" +"(`/srv/funkwhale/data/music` by default)" msgstr "" -#: ../../../CHANGELOG:3346 +#: ../../../CHANGELOG.md:3171 msgid "Edit your docker-compose.yml file to reflect the changes:" msgstr "" -#: ../../../CHANGELOG:3341 +#: ../../../CHANGELOG.md:3172 msgid "" "Search for volumes (there should be two occurrences) that contains " -"``/app/funkwhale_api/media`` on the right side, and replace the whole " -"line with ``- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"``" +"`/app/funkwhale_api/media` on the right side, and replace the whole line " +"with `- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"`" msgstr "" -#: ../../../CHANGELOG:3343 +#: ../../../CHANGELOG.md:3174 msgid "" -"Search for a volume that contains ``/app/staticfiles`` on the right side," -" and replace the whole line with ``- \"${STATIC_ROOT}:${STATIC_ROOT}\"``" +"Search for a volume that contains `/app/staticfiles` on the right side, " +"and replace the whole line with `- \"${STATIC_ROOT}:${STATIC_ROOT}\"`" msgstr "" -#: ../../../CHANGELOG:3345 +#: ../../../CHANGELOG.md:3176 msgid "" "If you use in-place import, search for volumes (there should be two " -"occurrences) that contains ``/music:ro`` on the right side, and replace " -"the whole line with ``- " -"\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"``" +"occurrences) that contains `/music:ro` on the right side, and replace the" +" whole line with `- " +"\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"`" msgstr "" -#: ../../../CHANGELOG:3348 +#: ../../../CHANGELOG.md:3179 msgid "" -"In the end, the ``volumes`` directives of your containers should look " -"like that::" +"In the end, the `volumes` directives of your containers should look like " +"that:" msgstr "" -#: ../../../CHANGELOG:3366 +#: ../../../CHANGELOG.md:3198 msgid "Removed Cacheops dependency" msgstr "" -#: ../../../CHANGELOG:3368 +#: ../../../CHANGELOG.md:3200 msgid "" "We removed one of our dependency named django-cacheops. It was unly used " "in a few places, and not playing nice with other dependencies." msgstr "" -#: ../../../CHANGELOG:3371 +#: ../../../CHANGELOG.md:3203 msgid "" -"You can safely remove this dependency in your environment with ``pip " -"uninstall django-cacheops`` if you're not using docker." +"You can safely remove this dependency in your environment with `pip " +"uninstall django-cacheops` if you're not using docker." msgstr "" -#: ../../../CHANGELOG:3374 +#: ../../../CHANGELOG.md:3206 msgid "" -"You can also safely remove any ``CACHEOPS_ENABLED`` setting from your " +"You can also safely remove any `CACHEOPS_ENABLED` setting from your " "environment file." msgstr "" -#: ../../../CHANGELOG:3378 +#: ../../../CHANGELOG.md:3208 msgid "0.15 (2018-06-24)" msgstr "" -#: ../../../CHANGELOG:3385 +#: ../../../CHANGELOG.md:3215 msgid "Added admin interface to manage import requests (#190)" msgstr "" -#: ../../../CHANGELOG:3386 +#: ../../../CHANGELOG.md:3216 msgid "" "Added replace flag during import to replace already present tracks with a" " new version of their track file (#222)" msgstr "" -#: ../../../CHANGELOG:3388 +#: ../../../CHANGELOG.md:3218 msgid "" "Funkwhale's front-end can now point to any instance (#327) Removed front-" "end and back-end coupling" msgstr "" -#: ../../../CHANGELOG:3390 +#: ../../../CHANGELOG.md:3220 msgid "Management interface for users (#212)" msgstr "" -#: ../../../CHANGELOG:3391 +#: ../../../CHANGELOG.md:3221 msgid "New invite system (#248) New invite system" msgstr "" -#: ../../../CHANGELOG:3396 +#: ../../../CHANGELOG.md:3225 msgid "Added \"TV\" to the list of highlighted words during YouTube import (#154)" msgstr "" -#: ../../../CHANGELOG:3397 +#: ../../../CHANGELOG.md:3226 msgid "Command line import now accepts unlimited args (#242)" msgstr "" -#: ../../../CHANGELOG:3402 +#: ../../../CHANGELOG.md:3230 msgid "Expose track files date in manage API (#307)" msgstr "" -#: ../../../CHANGELOG:3403 +#: ../../../CHANGELOG.md:3231 msgid "" "Fixed current track restart/hiccup when shuffling queue, deleting track " "from queue or reordering (#310)" msgstr "" -#: ../../../CHANGELOG:3405 +#: ../../../CHANGELOG.md:3233 msgid "Include user's current private playlists on playlist list (#302)" msgstr "" -#: ../../../CHANGELOG:3406 +#: ../../../CHANGELOG.md:3234 msgid "Remove link to generic radios, since they don't have detail pages (#324)" msgstr "" -#: ../../../CHANGELOG:3411 +#: ../../../CHANGELOG.md:3238 msgid "Document that Funkwhale may be installed with YunoHost (#325)" msgstr "" -#: ../../../CHANGELOG:3412 +#: ../../../CHANGELOG.md:3239 msgid "Documented a saner layout with symlinks for in-place imports (#254)" msgstr "" -#: ../../../CHANGELOG:3413 +#: ../../../CHANGELOG.md:3240 msgid "Upgrade documentation now use the correct user on non-docker setups (#265)" msgstr "" -#: ../../../CHANGELOG:3417 +#: ../../../CHANGELOG.md:3242 msgid "Invite system" msgstr "" -#: ../../../CHANGELOG:3419 +#: ../../../CHANGELOG.md:3244 msgid "" "On closed instances, it has always been a little bit painful to create " "accounts by hand for new users. This release solve that by adding " "invitations." msgstr "" -#: ../../../CHANGELOG:3422 +#: ../../../CHANGELOG.md:3247 msgid "" "You can generate invitation codes via the \"users\" admin interface " "(you'll find a link in the sidebar). Those codes are valid for 14 days, " @@ -6643,56 +6980,56 @@ msgid "" "registrations are closed." msgstr "" -#: ../../../CHANGELOG:3426 +#: ../../../CHANGELOG.md:3251 msgid "" "By default, we generate a random code for invitations, but you can also " "use custom codes if you need to print them or make them fancier ;)" msgstr "" -#: ../../../CHANGELOG:3429 +#: ../../../CHANGELOG.md:3254 msgid "" "Invitations generation and management requires the \"settings\" " "permission." msgstr "" -#: ../../../CHANGELOG:3433 +#: ../../../CHANGELOG.md:3256 msgid "Removed front-end and back-end coupling" msgstr "" -#: ../../../CHANGELOG:3435 +#: ../../../CHANGELOG.md:3258 msgid "" "Even though Funkwhale's front-end has always been a Single Page " "Application, talking to an API, it was only able to talk to an API on the" " same domain." msgstr "" -#: ../../../CHANGELOG:3438 +#: ../../../CHANGELOG.md:3261 msgid "" "There was no real technical justification behind this (only laziness), " "and it was also blocking interesting use cases:" msgstr "" -#: ../../../CHANGELOG:3441 +#: ../../../CHANGELOG.md:3264 msgid "Use multiple customized versions of the front-end with the same instance" msgstr "" -#: ../../../CHANGELOG:3442 +#: ../../../CHANGELOG.md:3265 msgid "Use a customized version of the front-end with multiple instances" msgstr "" -#: ../../../CHANGELOG:3443 +#: ../../../CHANGELOG.md:3266 msgid "" "Use a locally hosted front-end with a remote API, which is especially " "useful in development" msgstr "" -#: ../../../CHANGELOG:3445 +#: ../../../CHANGELOG.md:3268 msgid "" "From now on, Funkwhale's front-end can connect to any Funkwhale server. " "You can change the server you are connecting to in the footer." msgstr "" -#: ../../../CHANGELOG:3448 +#: ../../../CHANGELOG.md:3271 msgid "" "Fixing this also unlocked a really interesting feature in our " "development/review workflow: by leveraging Gitlab CI and review apps, we " @@ -6701,96 +7038,96 @@ msgid "" " the need to install a local environment." msgstr "" -#: ../../../CHANGELOG:3455 +#: ../../../CHANGELOG.md:3276 msgid "0.14.2 (2018-06-16)" msgstr "" -#: ../../../CHANGELOG:3459 +#: ../../../CHANGELOG.md:3279 msgid "" "This release contains a fix for a permission issue. You should upgrade as" " soon as possible. Read the changelog below for more details." msgstr "" -#: ../../../CHANGELOG:3467 +#: ../../../CHANGELOG.md:3288 msgid "Added feedback on shuffle button (#262)" msgstr "" -#: ../../../CHANGELOG:3468 +#: ../../../CHANGELOG.md:3289 msgid "" "Added multiple warnings in the documentation that you should never run " "makemigrations yourself (#291)" msgstr "" -#: ../../../CHANGELOG:3470 +#: ../../../CHANGELOG.md:3291 msgid "Album cover served in http (#264)" msgstr "" -#: ../../../CHANGELOG:3471 +#: ../../../CHANGELOG.md:3292 msgid "" "Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25)" " (!252)" msgstr "" -#: ../../../CHANGELOG:3473 +#: ../../../CHANGELOG.md:3294 msgid "Display file size in human format during file upload (#289)" msgstr "" -#: ../../../CHANGELOG:3474 +#: ../../../CHANGELOG.md:3295 msgid "Switch from BSD-3 licence to AGPL-3 licence (#280)" msgstr "" -#: ../../../CHANGELOG:3478 +#: ../../../CHANGELOG.md:3299 msgid "Ensure radios can only be edited and deleted by their owners (#311)" msgstr "" -#: ../../../CHANGELOG:3479 +#: ../../../CHANGELOG.md:3300 msgid "Fixed admin menu not showing after login (#245)" msgstr "" -#: ../../../CHANGELOG:3480 +#: ../../../CHANGELOG.md:3301 msgid "Fixed broken pagination in Subsonic API (#295)" msgstr "" -#: ../../../CHANGELOG:3481 +#: ../../../CHANGELOG.md:3302 msgid "Fixed duplicated websocket connection on timeline (#287)" msgstr "" -#: ../../../CHANGELOG:3486 +#: ../../../CHANGELOG.md:3306 msgid "Improved documentation about in-place imports setup (#298)" msgstr "" -#: ../../../CHANGELOG:3491 +#: ../../../CHANGELOG.md:3310 msgid "" "Added Black and flake8 checks in CI to ensure consistent code styling and" " formatting (#297)" msgstr "" -#: ../../../CHANGELOG:3493 +#: ../../../CHANGELOG.md:3312 msgid "Added bug and feature issue templates (#299)" msgstr "" -#: ../../../CHANGELOG:3497 +#: ../../../CHANGELOG.md:3314 msgid "Permission issues on radios" msgstr "" -#: ../../../CHANGELOG:3499 +#: ../../../CHANGELOG.md:3316 msgid "" "Because of an error in the way we checked user permissions on radios, " "public radios could be deleted by any logged-in user, even if they were " "not the owner of the radio." msgstr "" -#: ../../../CHANGELOG:3503 +#: ../../../CHANGELOG.md:3320 msgid "" "We recommend instances owners to upgrade as fast as possible to avoid any" " abuse and data loss." msgstr "" -#: ../../../CHANGELOG:3508 +#: ../../../CHANGELOG.md:3323 msgid "Funkwhale is now licenced under AGPL-3" msgstr "" -#: ../../../CHANGELOG:3510 +#: ../../../CHANGELOG.md:3325 msgid "" "Following the recent switch made by PixelFed " "(https://github.com/dansup/pixelfed/issues/143), we decided along with " @@ -6798,48 +7135,48 @@ msgid "" "this switch for various reasons:" msgstr "" -#: ../../../CHANGELOG:3515 +#: ../../../CHANGELOG.md:3330 msgid "This is better aligned with other fediverse software" msgstr "" -#: ../../../CHANGELOG:3516 +#: ../../../CHANGELOG.md:3331 msgid "" "It prohibits anyone to distribute closed-source and proprietary forks of " "Funkwhale" msgstr "" -#: ../../../CHANGELOG:3518 +#: ../../../CHANGELOG.md:3333 msgid "" "As end users and instance owners, this does not change anything. You can " "continue to use Funkwhale exactly as you did before :)" msgstr "" -#: ../../../CHANGELOG:3523 +#: ../../../CHANGELOG.md:3336 msgid "Apache support for websocket" msgstr "" -#: ../../../CHANGELOG:3525 +#: ../../../CHANGELOG.md:3338 msgid "" "Up until now, our Apache2 configuration was not working with websockets. " "This is now solved by adding this at the beginning of your Apache2 " -"configuration file::" +"configuration file:" msgstr "" -#: ../../../CHANGELOG:3530 -msgid "And this, before the \"/api\" block::" +#: ../../../CHANGELOG.md:3345 +msgid "And this, before the \"/api\" block:" msgstr "" -#: ../../../CHANGELOG:3535 +#: ../../../CHANGELOG.md:3352 msgid "" "Websockets may not be supported in older versions of Apache2. Be sure to " "upgrade to the latest version available." msgstr "" -#: ../../../CHANGELOG:3539 +#: ../../../CHANGELOG.md:3354 msgid "Serving album covers in https (Apache2 proxy)" msgstr "" -#: ../../../CHANGELOG:3541 +#: ../../../CHANGELOG.md:3356 msgid "" "Two issues are addressed here. The first one was about Django replying " "with mixed content (http) when queried for covers. Setting up the `X" @@ -6847,100 +7184,100 @@ msgid "" "and that the reply must be https as well." msgstr "" -#: ../../../CHANGELOG:3546 +#: ../../../CHANGELOG.md:3361 msgid "" "Second issue was a problem of permission causing Apache a denied access " "to album cover folder. It is solved by adding another block for this path" " in the Apache configuration file for funkwhale." msgstr "" -#: ../../../CHANGELOG:3550 -msgid "Here is how to modify your `funkwhale.conf` apache2 configuration::" +#: ../../../CHANGELOG.md:3365 +msgid "Here is how to modify your `funkwhale.conf` apache2 configuration:" msgstr "" -#: ../../../CHANGELOG:3571 +#: ../../../CHANGELOG.md:3385 msgid "About the makemigrations warning" msgstr "" -#: ../../../CHANGELOG:3573 -msgid "You may sometimes get the following warning while applying migrations::" +#: ../../../CHANGELOG.md:3387 +msgid "You may sometimes get the following warning while applying migrations:" msgstr "" -#: ../../../CHANGELOG:3577 +#: ../../../CHANGELOG.md:3393 msgid "" "This is a warning, not an error, and it can be safely ignored. Never run " -"the ``makemigrations`` command yourself." +"the `makemigrations` command yourself." msgstr "" -#: ../../../CHANGELOG:3582 +#: ../../../CHANGELOG.md:3396 msgid "0.14.1 (2018-06-06)" msgstr "" -#: ../../../CHANGELOG:3588 +#: ../../../CHANGELOG.md:3402 msgid "Display server version in the footer (#270)" msgstr "" -#: ../../../CHANGELOG:3589 +#: ../../../CHANGELOG.md:3403 msgid "" "fix_track_files will now update files with bad mimetype (and not only the" " one with no mimetype) (#273)" msgstr "" -#: ../../../CHANGELOG:3591 +#: ../../../CHANGELOG.md:3405 msgid "" "Huge performance boost (~x5 to x7) during CLI import that queries " "MusicBrainz (#288)" msgstr "" -#: ../../../CHANGELOG:3593 +#: ../../../CHANGELOG.md:3407 msgid "Removed alpha-state transcoding support (#271)" msgstr "" -#: ../../../CHANGELOG:3597 +#: ../../../CHANGELOG.md:3411 msgid "Broken logging statement during import error (#274)" msgstr "" -#: ../../../CHANGELOG:3598 +#: ../../../CHANGELOG.md:3412 msgid "Broken search bar on library home (#278)" msgstr "" -#: ../../../CHANGELOG:3599 +#: ../../../CHANGELOG.md:3413 msgid "" "Do not crash when importing track with an artist that do not match the " "release artist (#237)" msgstr "" -#: ../../../CHANGELOG:3601 +#: ../../../CHANGELOG.md:3415 msgid "Do not crash when tag contains multiple uuids with a / separator (#267)" msgstr "" -#: ../../../CHANGELOG:3602 +#: ../../../CHANGELOG.md:3416 msgid "Ensure we do not store bad mimetypes (such as application/x-empty) (#266)" msgstr "" -#: ../../../CHANGELOG:3603 +#: ../../../CHANGELOG.md:3417 msgid "Fix broken \"play all\" button that played only 25 tracks (#281)" msgstr "" -#: ../../../CHANGELOG:3604 +#: ../../../CHANGELOG.md:3418 msgid "Fixed broken track download modal (overflow and wrong URL) (#239)" msgstr "" -#: ../../../CHANGELOG:3605 +#: ../../../CHANGELOG.md:3419 msgid "Removed hardcoded size limit in file upload widget (#275)" msgstr "" -#: ../../../CHANGELOG:3610 +#: ../../../CHANGELOG.md:3423 msgid "" -"Added warning about _protected/music location in nginx configuration " +"Added warning about \\_protected/music location in nginx configuration " "(#247)" msgstr "" -#: ../../../CHANGELOG:3614 +#: ../../../CHANGELOG.md:3425 msgid "Removed alpha-state transcoding (#271)" msgstr "" -#: ../../../CHANGELOG:3616 +#: ../../../CHANGELOG.md:3427 msgid "" "A few months ago, a basic transcoding feature was implemented. Due to the" " way this feature was designed, it was slow, CPU intensive on the server " @@ -6949,170 +7286,161 @@ msgid "" "with Subsonic clients." msgstr "" -#: ../../../CHANGELOG:3621 +#: ../../../CHANGELOG.md:3432 msgid "" "Based on that, we're currently removing support for transcoding **in its " "current state**. The work on a better designed transcoding feature can be" " tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272." msgstr "" -#: ../../../CHANGELOG:3625 +#: ../../../CHANGELOG.md:3436 msgid "" "You don't have to do anything on your side, but you may want to remove " -"the now obsolete configuration from your reverse proxy file (nginx " -"only)::" +"the now obsolete configuration from your reverse proxy file (nginx only):" msgstr "" -#: ../../../CHANGELOG:3670 +#: ../../../CHANGELOG.md:3481 msgid "0.14 (2018-06-02)" msgstr "" -#: ../../../CHANGELOG:3673 ../../../CHANGELOG:3877 ../../../CHANGELOG:3998 -msgid "Upgrade instructions are available at" -msgstr "" - -#: ../../../CHANGELOG:3673 ../../../CHANGELOG:3877 ../../../CHANGELOG:3998 -msgid "https://docs.funkwhale.audio/upgrading.html" -msgstr "" - -#: ../../../CHANGELOG:3677 +#: ../../../CHANGELOG.md:3488 msgid "" "Admins can now configure default permissions that will be granted to all " "registered users (#236)" msgstr "" -#: ../../../CHANGELOG:3679 +#: ../../../CHANGELOG.md:3490 msgid "Files management interface for users with \"library\" permission (#223)" msgstr "" -#: ../../../CHANGELOG:3680 +#: ../../../CHANGELOG.md:3491 msgid "" "New action table component for quick and efficient batch actions (#228) " "This is implemented on the federated tracks pages, but will be included " "in other pages as well depending on the feedback." msgstr "" -#: ../../../CHANGELOG:3687 +#: ../../../CHANGELOG.md:3497 msgid "" "Added a new \"upload\" permission that allows user to launch import and " "view their own imports (#230)" msgstr "" -#: ../../../CHANGELOG:3689 +#: ../../../CHANGELOG.md:3499 msgid "Added Support for OggTheora in import." msgstr "" -#: ../../../CHANGELOG:3690 +#: ../../../CHANGELOG.md:3500 msgid "Autoremove media files on model instance deletion (#241)" msgstr "" -#: ../../../CHANGELOG:3691 +#: ../../../CHANGELOG.md:3501 msgid "" "Can now import a whole remote library at once thanks to new Action Table " "component (#164)" msgstr "" -#: ../../../CHANGELOG:3693 +#: ../../../CHANGELOG.md:3503 msgid "" "Can now use album covers from flac/mp3 metadata and separate file in " "track directory (#219)" msgstr "" -#: ../../../CHANGELOG:3695 +#: ../../../CHANGELOG.md:3505 msgid "Implemented getCovertArt in Subsonic API to serve album covers (#258)" msgstr "" -#: ../../../CHANGELOG:3696 +#: ../../../CHANGELOG.md:3506 msgid "" "Implemented scrobble endpoint of subsonic API, listenings are now tracked" " correctly from third party apps that use this endpoint (#260)" msgstr "" -#: ../../../CHANGELOG:3698 +#: ../../../CHANGELOG.md:3508 msgid "" "Retructured music API to increase performance and remove useless " "endpoints (#224)" msgstr "" -#: ../../../CHANGELOG:3704 +#: ../../../CHANGELOG.md:3513 msgid "Consistent constraints/checks for URL size (#207)" msgstr "" -#: ../../../CHANGELOG:3705 +#: ../../../CHANGELOG.md:3514 msgid "Display proper total number of tracks on radio detail (#225)" msgstr "" -#: ../../../CHANGELOG:3706 +#: ../../../CHANGELOG.md:3515 msgid "Do not crash on flac import if musicbrainz tags are missing (#214)" msgstr "" -#: ../../../CHANGELOG:3707 +#: ../../../CHANGELOG.md:3516 msgid "Empty save button in radio builder (#226)" msgstr "" -#: ../../../CHANGELOG:3708 +#: ../../../CHANGELOG.md:3517 msgid "" "Ensure anonymous users can use the app if the instance is configured " "accordingly (#229)" msgstr "" -#: ../../../CHANGELOG:3710 +#: ../../../CHANGELOG.md:3519 msgid "" "Ensure inactive users cannot get auth tokens (#218) This was already the " "case bug we missed some checks" msgstr "" -#: ../../../CHANGELOG:3712 +#: ../../../CHANGELOG.md:3521 msgid "File-upload import now supports Flac files (#213)" msgstr "" -#: ../../../CHANGELOG:3713 +#: ../../../CHANGELOG.md:3522 msgid "" "File-upload importer should now work properly, assuming files are tagged " "(#106)" msgstr "" -#: ../../../CHANGELOG:3715 +#: ../../../CHANGELOG.md:3524 msgid "Fixed a few broken translations strings (#227)" msgstr "" -#: ../../../CHANGELOG:3716 +#: ../../../CHANGELOG.md:3525 msgid "Fixed broken ordering in front-end lists (#179)" msgstr "" -#: ../../../CHANGELOG:3717 +#: ../../../CHANGELOG.md:3526 msgid "Fixed ignored page_size parameter on artist and favorites list (#240)" msgstr "" -#: ../../../CHANGELOG:3718 +#: ../../../CHANGELOG.md:3527 msgid "Read ID3Tag Tracknumber from TRCK (#220)" msgstr "" -#: ../../../CHANGELOG:3719 +#: ../../../CHANGELOG.md:3528 msgid "We now fetch album covers regardless of the import methods (#231)" msgstr "" -#: ../../../CHANGELOG:3723 +#: ../../../CHANGELOG.md:3532 msgid "" "Added missing subsonic configuration block in deployment vhost files " "(#249)" msgstr "" -#: ../../../CHANGELOG:3724 +#: ../../../CHANGELOG.md:3533 msgid "Moved upgrade doc under install doc in TOC (#251)" msgstr "" -#: ../../../CHANGELOG:3729 +#: ../../../CHANGELOG.md:3537 msgid "" "Removed acoustid support, as the integration was buggy and error-prone " "(#106)" msgstr "" -#: ../../../CHANGELOG:3733 +#: ../../../CHANGELOG.md:3539 msgid "Files management interface" msgstr "" -#: ../../../CHANGELOG:3735 +#: ../../../CHANGELOG.md:3541 msgid "" "This is the first bit of an ongoing work that will span several releases," " to bring more powerful library management features to Funkwhale. This " @@ -7121,11 +7449,11 @@ msgid "" "using various criteria (size, bitrate, duration...) and delete them." msgstr "" -#: ../../../CHANGELOG:3742 +#: ../../../CHANGELOG.md:3547 msgid "New \"upload\" permission" msgstr "" -#: ../../../CHANGELOG:3744 +#: ../../../CHANGELOG.md:3549 msgid "" "This new permission is helpful if you want to give upload/import rights " "to some users, but don't want them to be able to manage the library as a " @@ -7134,7 +7462,7 @@ msgid "" "artists, files, etc." msgstr "" -#: ../../../CHANGELOG:3750 +#: ../../../CHANGELOG.md:3555 msgid "" "Because of that, users with the \"library\" permission will have much " "more power, and will also be able to remove content from the platform. On" @@ -7142,7 +7470,7 @@ msgid "" "ability to add new content." msgstr "" -#: ../../../CHANGELOG:3755 +#: ../../../CHANGELOG.md:3560 msgid "" "Also, this release also includes a new feature called \"default " "permissions\": those are permissions that are granted to every users on " @@ -7152,11 +7480,11 @@ msgid "" "user." msgstr "" -#: ../../../CHANGELOG:3762 +#: ../../../CHANGELOG.md:3566 msgid "Smarter album cover importer" msgstr "" -#: ../../../CHANGELOG:3764 +#: ../../../CHANGELOG.md:3568 msgid "" "In earlier versions, covers where only imported when launching a YouTube " "import. Starting from this release, covers will be imported regardless of" @@ -7164,43 +7492,43 @@ msgid "" "will look for covers in the following order:" msgstr "" -#: ../../../CHANGELOG:3769 +#: ../../../CHANGELOG.md:3573 msgid "In the imported file itself (FLAC/MP3 only)" msgstr "" -#: ../../../CHANGELOG:3770 +#: ../../../CHANGELOG.md:3574 msgid "In a cover.jpg or cover.png in the file directory" msgstr "" -#: ../../../CHANGELOG:3771 +#: ../../../CHANGELOG.md:3575 msgid "" "By fetching cover art from Musibrainz, assuming the file is tagged " "correctly" msgstr "" -#: ../../../CHANGELOG:3773 +#: ../../../CHANGELOG.md:3577 msgid "" "This will only work for newly imported tracks and albums though. In the " "future, we may offer an option to refetch album covers from the " "interface, but in the meantime, you can use the following snippet:" msgstr "" -#: ../../../CHANGELOG:3791 -msgid "Then launch it::" +#: ../../../CHANGELOG.md:3595 +msgid "Then launch it:" msgstr "" -#: ../../../CHANGELOG:3806 +#: ../../../CHANGELOG.md:3611 msgid "" "Depending on your number of albums, the previous snippet may take some " "time to execute. You can interrupt it at any time using ctrl-c and " "relaunch it later, as it's idempotent." msgstr "" -#: ../../../CHANGELOG:3811 +#: ../../../CHANGELOG.md:3616 msgid "Music API changes" msgstr "" -#: ../../../CHANGELOG:3813 +#: ../../../CHANGELOG.md:3618 msgid "" "This release includes an API break. Even though the API is advertised as " "unstable, and not documented, here is a brief explanation of the change " @@ -7208,66 +7536,66 @@ msgid "" "changes:" msgstr "" -#: ../../../CHANGELOG:3817 +#: ../../../CHANGELOG.md:3622 msgid "" -"``/api/v1/artists`` does not includes a list of tracks anymore. It was to" -" heavy to return all of this data all the time. You can get all tracks " -"for an artist using ``/api/v1/tracks?artist=artist_id``" +"`/api/v1/artists` does not includes a list of tracks anymore. It was to " +"heavy to return all of this data all the time. You can get all tracks for" +" an artist using `/api/v1/tracks?artist=artist_id`" msgstr "" -#: ../../../CHANGELOG:3820 +#: ../../../CHANGELOG.md:3625 msgid "" -"Additionally, ``/api/v1/tracks`` now support an ``album`` filter to " -"filter tracks matching an album" +"Additionally, `/api/v1/tracks` now support an `album` filter to filter " +"tracks matching an album" msgstr "" -#: ../../../CHANGELOG:3822 +#: ../../../CHANGELOG.md:3627 msgid "" -"``/api/v1/artists/search``, ``/api/v1/albums/search`` and " -"``/api/v1/tracks/search`` endpoints are removed. Use " -"``/api/v1/{artists|albums|tracks}/?q=yourquery`` instead. It's also more " +"`/api/v1/artists/search`, `/api/v1/albums/search` and " +"`/api/v1/tracks/search` endpoints are removed. Use " +"`/api/v1/{artists|albums|tracks}/?q=yourquery` instead. It's also more " "powerful, since you can combine search with other filters and ordering " "options." msgstr "" -#: ../../../CHANGELOG:3826 +#: ../../../CHANGELOG.md:3631 msgid "" -"``/api/v1/requests/import-requests/search`` endpoint is removed as well. " -"Use ``/api/v1/requests/import-requests/?q=yourquery`` instead. It's also " +"`/api/v1/requests/import-requests/search` endpoint is removed as well. " +"Use `/api/v1/requests/import-requests/?q=yourquery` instead. It's also " "more powerful, since you can combine search with other filters and " "ordering options." msgstr "" -#: ../../../CHANGELOG:3831 +#: ../../../CHANGELOG.md:3636 msgid "" "Of course, the front-end was updated to work with the new API, so this " "should not impact end-users in any way, apart from slight performance " "gains." msgstr "" -#: ../../../CHANGELOG:3836 +#: ../../../CHANGELOG.md:3640 msgid "" "The API is still not stable and may evolve again in the future. API " "freeze will come at a later point." msgstr "" -#: ../../../CHANGELOG:3840 +#: ../../../CHANGELOG.md:3644 msgid "Flac files imports via upload" msgstr "" -#: ../../../CHANGELOG:3842 +#: ../../../CHANGELOG.md:3646 msgid "" "You have nothing to do to benefit from this, however, since Flac files " "tend to be a lot bigger than other files, you may want to increase the " -"``client_max_body_size`` value in your Nginx configuration if you plan to" -" upload flac files." +"`client_max_body_size` value in your Nginx configuration if you plan to " +"upload flac files." msgstr "" -#: ../../../CHANGELOG:3848 +#: ../../../CHANGELOG.md:3651 msgid "Missing subsonic configuration block in vhost files" msgstr "" -#: ../../../CHANGELOG:3850 +#: ../../../CHANGELOG.md:3653 msgid "" "Because of a missing block in the sample Nginx and Apache configurations," " instances that were deployed after the 0.13 release are likely to be " @@ -7275,85 +7603,85 @@ msgid "" "documented in the changelog)." msgstr "" -#: ../../../CHANGELOG:3855 +#: ../../../CHANGELOG.md:3658 msgid "" "Ensure you have the following snippets in your Nginx or Apache " "configuration if you plan to use the Subsonic API." msgstr "" -#: ../../../CHANGELOG:3858 -msgid "Nginx::" +#: ../../../CHANGELOG.md:3661 +msgid "Nginx:" msgstr "" -#: ../../../CHANGELOG:3865 -msgid "Apache2::" +#: ../../../CHANGELOG.md:3670 +msgid "Apache2:" msgstr "" -#: ../../../CHANGELOG:3874 +#: ../../../CHANGELOG.md:3679 msgid "0.13 (2018-05-19)" msgstr "" -#: ../../../CHANGELOG:3881 +#: ../../../CHANGELOG.md:3686 msgid "Can now import and play flac files (#157)" msgstr "" -#: ../../../CHANGELOG:3882 +#: ../../../CHANGELOG.md:3687 msgid "Simpler permission system (#152)" msgstr "" -#: ../../../CHANGELOG:3883 +#: ../../../CHANGELOG.md:3688 msgid "Store file length, size and bitrate (#195)" msgstr "" -#: ../../../CHANGELOG:3884 +#: ../../../CHANGELOG.md:3689 msgid "" "We now have a brand new instance settings interface in the front-end " "(#206)" msgstr "" -#: ../../../CHANGELOG:3889 +#: ../../../CHANGELOG.md:3693 msgid "Disabled browsable HTML API in production (#205)" msgstr "" -#: ../../../CHANGELOG:3890 +#: ../../../CHANGELOG.md:3694 msgid "" "Instances can now indicate on the nodeinfo endpoint if they want to " "remain private (#200)" msgstr "" -#: ../../../CHANGELOG:3896 +#: ../../../CHANGELOG.md:3699 msgid "" ".well-known/nodeinfo endpoint can now answer to request with Accept: " "application/json (#197)" msgstr "" -#: ../../../CHANGELOG:3898 +#: ../../../CHANGELOG.md:3701 msgid "Fixed escaping issue of track name in playlist modal (#201)" msgstr "" -#: ../../../CHANGELOG:3899 +#: ../../../CHANGELOG.md:3702 msgid "Fixed missing dot when downloading file (#204)" msgstr "" -#: ../../../CHANGELOG:3900 +#: ../../../CHANGELOG.md:3703 msgid "" "In-place imported tracks with non-ascii characters don't break reverse-" "proxy serving (#196)" msgstr "" -#: ../../../CHANGELOG:3902 +#: ../../../CHANGELOG.md:3705 msgid "Removed Python 3.6 dependency (secrets module) (#198)" msgstr "" -#: ../../../CHANGELOG:3903 +#: ../../../CHANGELOG.md:3706 msgid "Uplayable tracks are now properly disabled in the interface (#199)" msgstr "" -#: ../../../CHANGELOG:3907 +#: ../../../CHANGELOG.md:3708 msgid "Instance settings interface" msgstr "" -#: ../../../CHANGELOG:3909 +#: ../../../CHANGELOG.md:3710 msgid "" "Prior to this release, the only way to update instance settings (such as " "instance description, signup policy, federation configuration, etc.) was " @@ -7361,46 +7689,46 @@ msgid "" "which power the API)." msgstr "" -#: ../../../CHANGELOG:3913 +#: ../../../CHANGELOG.md:3714 msgid "This interface worked, but was not really-user friendly and intuitive." msgstr "" -#: ../../../CHANGELOG:3915 +#: ../../../CHANGELOG.md:3716 msgid "" "Starting from this release, we now offer a dedicated interface directly " "in the front-end. You can view and edit all your instance settings from " "here, assuming you have the required permissions." msgstr "" -#: ../../../CHANGELOG:3919 +#: ../../../CHANGELOG.md:3720 msgid "" -"This interface is available at ``/manage/settings`` and via link in the " +"This interface is available at `/manage/settings` and via link in the " "sidebar." msgstr "" -#: ../../../CHANGELOG:3923 +#: ../../../CHANGELOG.md:3722 msgid "Storage of bitrate, size and length in database" msgstr "" -#: ../../../CHANGELOG:3925 +#: ../../../CHANGELOG.md:3724 msgid "" "Starting with this release, when importing files, Funkwhale will store " "additional information about audio files:" msgstr "" -#: ../../../CHANGELOG:3928 +#: ../../../CHANGELOG.md:3727 msgid "Bitrate" msgstr "" -#: ../../../CHANGELOG:3929 +#: ../../../CHANGELOG.md:3728 msgid "Size (in bytes)" msgstr "" -#: ../../../CHANGELOG:3930 +#: ../../../CHANGELOG.md:3729 msgid "Duration" msgstr "" -#: ../../../CHANGELOG:3932 +#: ../../../CHANGELOG.md:3731 msgid "" "This change is not retroactive, meaning already imported files will lack " "those information. The interface and API should work as before in such " @@ -7408,15 +7736,7 @@ msgid "" "the missing values." msgstr "" -#: ../../../CHANGELOG:3936 ../../../CHANGELOG:3976 -msgid "On docker setups:" -msgstr "" - -#: ../../../CHANGELOG:3943 ../../../CHANGELOG:3982 -msgid "On non-docker setups:" -msgstr "" - -#: ../../../CHANGELOG:3952 +#: ../../../CHANGELOG.md:3749 msgid "" "The execution time for this command is proportional to the number of " "audio files stored on your instance. This is because we need to read the " @@ -7424,87 +7744,87 @@ msgid "" " Funkwhale is up." msgstr "" -#: ../../../CHANGELOG:3957 +#: ../../../CHANGELOG.md:3754 msgid "" "It's also safe to interrupt this command and rerun it at a later point, " "or run it multiple times." msgstr "" -#: ../../../CHANGELOG:3960 +#: ../../../CHANGELOG.md:3757 msgid "Use the --dry-run flag to check how many files would be impacted." msgstr "" -#: ../../../CHANGELOG:3964 +#: ../../../CHANGELOG.md:3760 msgid "Simpler permission system" msgstr "" -#: ../../../CHANGELOG:3966 +#: ../../../CHANGELOG.md:3762 msgid "" "Starting from this release, the permission system is much simpler. Up " "until now, we were using Django's built-in permission system, which was " "working, but also quite complex to deal with." msgstr "" -#: ../../../CHANGELOG:3970 +#: ../../../CHANGELOG.md:3766 msgid "" "The new implementation relies on simpler logic, which will make " "integration on the front-end in upcoming releases faster and easier." msgstr "" -#: ../../../CHANGELOG:3973 +#: ../../../CHANGELOG.md:3769 msgid "" "If you have manually given permissions to users on your instance, you can" " migrate those to the new system." msgstr "" -#: ../../../CHANGELOG:3989 +#: ../../../CHANGELOG.md:3785 msgid "" "There is still no dedicated interface to manage user permissions, but you" -" can use the admin interface at ``/api/admin/users/user/`` for that " -"purpose in the meantime." +" can use the admin interface at `/api/admin/users/user/` for that purpose" +" in the meantime." msgstr "" -#: ../../../CHANGELOG:3995 +#: ../../../CHANGELOG.md:3789 msgid "0.12 (2018-05-09)" msgstr "" -#: ../../../CHANGELOG:4002 +#: ../../../CHANGELOG.md:3796 msgid "" "Subsonic API implementation to offer compatibility with existing clients " "such as DSub (#75)" msgstr "" -#: ../../../CHANGELOG:4004 +#: ../../../CHANGELOG.md:3798 msgid "Use nodeinfo standard for publishing instance information (#192)" msgstr "" -#: ../../../CHANGELOG:4009 +#: ../../../CHANGELOG.md:3802 msgid "" "Play button now play tracks immediately instead of appending them to the " "queue (#99, #156)" msgstr "" -#: ../../../CHANGELOG:4015 +#: ../../../CHANGELOG.md:3807 msgid "Fix broken federated import (#193)" msgstr "" -#: ../../../CHANGELOG:4020 +#: ../../../CHANGELOG.md:3811 msgid "" "Up-to-date documentation for upgrading front-end files on docker setup " "(#132)" msgstr "" -#: ../../../CHANGELOG:4024 +#: ../../../CHANGELOG.md:3813 msgid "Subsonic API" msgstr "" -#: ../../../CHANGELOG:4026 +#: ../../../CHANGELOG.md:3815 msgid "" "This release implements some core parts of the Subsonic API, which is " "widely deployed in various projects and supported by numerous clients." msgstr "" -#: ../../../CHANGELOG:4029 +#: ../../../CHANGELOG.md:3818 msgid "" "By offering this API in Funkwhale, we make it possible to access the " "instance library and listen to the music without from existing Subsonic " @@ -7512,40 +7832,40 @@ msgid "" " every platform." msgstr "" -#: ../../../CHANGELOG:4033 +#: ../../../CHANGELOG.md:3822 msgid "" "Most advanced Subsonic clients support offline caching of music files, " "playlist management and search, which makes them well-suited for nomadic " "use." msgstr "" -#: ../../../CHANGELOG:4036 +#: ../../../CHANGELOG.md:3825 msgid "" -"Please see `our list of supported apps " -"<https://funkwhale.audio/en_US/apps>`_ for more information about " +"Please see [our list of supported " +"apps](https://funkwhale.audio/en_US/apps) for more information about " "supported clients and user instructions." msgstr "" -#: ../../../CHANGELOG:4039 +#: ../../../CHANGELOG.md:3828 msgid "" "At the instance-level, the Subsonic API is enabled by default, but " "require and additional endpoint to be added in you reverse-proxy " "configuration." msgstr "" -#: ../../../CHANGELOG:4042 -msgid "On nginx, add the following block::" +#: ../../../CHANGELOG.md:3831 +msgid "On nginx, add the following block:" msgstr "" -#: ../../../CHANGELOG:4049 -msgid "On Apache, add the following block::" +#: ../../../CHANGELOG.md:3840 +msgid "On Apache, add the following block:" msgstr "" -#: ../../../CHANGELOG:4056 +#: ../../../CHANGELOG.md:3849 msgid "The Subsonic can be disabled at the instance level from the django admin." msgstr "" -#: ../../../CHANGELOG:4060 +#: ../../../CHANGELOG.md:3852 msgid "" "Because of Subsonic's API design which assumes cleartext storing of user " "passwords, we chose to have a dedicated, separate password for that " @@ -7553,25 +7873,25 @@ msgid "" " web client." msgstr "" -#: ../../../CHANGELOG:4067 +#: ../../../CHANGELOG.md:3858 msgid "Nodeinfo standard for instance information and stats" msgstr "" -#: ../../../CHANGELOG:4071 +#: ../../../CHANGELOG.md:3861 msgid "" "The ``/api/v1/instance/stats/`` endpoint which was used to display " "instance data in the about page is removed in favor of the new " "``/api/v1/instance/nodeinfo/2.0/`` endpoint." msgstr "" -#: ../../../CHANGELOG:4075 +#: ../../../CHANGELOG.md:3866 msgid "" "In earlier version, we where using a custom endpoint and format for our " "instance information and statistics. While this was working, this was not" " compatible with anything else on the fediverse." msgstr "" -#: ../../../CHANGELOG:4079 +#: ../../../CHANGELOG.md:3870 msgid "" "We now offer a nodeinfo 2.0 endpoint which provides, in a single place, " "all the instance information such as library and user activity " @@ -7579,18 +7899,18 @@ msgid "" "federation status, etc.)." msgstr "" -#: ../../../CHANGELOG:4083 +#: ../../../CHANGELOG.md:3874 msgid "We offer two settings to manage nodeinfo in your Funkwhale instance:" msgstr "" -#: ../../../CHANGELOG:4085 +#: ../../../CHANGELOG.md:3876 msgid "" "One setting to completely disable nodeinfo, but this is not recommended " "as the exposed data may be needed to make some parts of the front-end " "work (especially the about page)." msgstr "" -#: ../../../CHANGELOG:4088 +#: ../../../CHANGELOG.md:3879 msgid "" "One setting to disable only usage and library statistics in the nodeinfo " "endpoint. This is useful if you want the nodeinfo endpoint to work, but " @@ -7598,42 +7918,42 @@ msgid "" "and user activity." msgstr "" -#: ../../../CHANGELOG:4093 +#: ../../../CHANGELOG.md:3884 msgid "" "To make your instance fully compatible with the nodeinfo protocol, you " -"need to to edit your nginx configuration file::" +"need to to edit your nginx configuration file:" msgstr "" -#: ../../../CHANGELOG:4112 -msgid "You can do the same if you use apache::" +#: ../../../CHANGELOG.md:3905 +msgid "You can do the same if you use apache:" msgstr "" -#: ../../../CHANGELOG:4130 +#: ../../../CHANGELOG.md:3925 msgid "" "This will ensure all well-known endpoints are proxied to funkwhale, and " "not just webfinger one." msgstr "" -#: ../../../CHANGELOG:4133 +#: ../../../CHANGELOG.md:3928 msgid "Links:" msgstr "" -#: ../../../CHANGELOG:4135 +#: ../../../CHANGELOG.md:3930 msgid "About nodeinfo: https://github.com/jhass/nodeinfo" msgstr "" -#: ../../../CHANGELOG:4139 +#: ../../../CHANGELOG.md:3932 msgid "0.11 (2018-05-06)" msgstr "" -#: ../../../CHANGELOG:4143 +#: ../../../CHANGELOG.md:3936 msgid "" "Special thanks for this release go to @renon:matrix.org (@Hazmo on " "Gitlab) for bringing Apache2 support to Funkwhale and contributing on " "other issues. Thank you!" msgstr "" -#: ../../../CHANGELOG:4149 +#: ../../../CHANGELOG.md:3942 msgid "" "Funkwhale now works behind an Apache2 reverse proxy (!165) check out the " "brand new documentation at " @@ -7641,270 +7961,269 @@ msgid "" "to try it!" msgstr "" -#: ../../../CHANGELOG:4152 +#: ../../../CHANGELOG.md:3945 msgid "" "Users can now request password reset by email, assuming a SMTP server was" " correctly configured (#187)" msgstr "" -#: ../../../CHANGELOG:4157 +#: ../../../CHANGELOG.md:3950 msgid "" "Added a fix_track_files command to run checks and fixes against library " "(#183)" msgstr "" -#: ../../../CHANGELOG:4159 +#: ../../../CHANGELOG.md:3952 msgid "Avoid fetching Actor object on every request authentication" msgstr "" -#: ../../../CHANGELOG:4160 +#: ../../../CHANGELOG.md:3953 msgid "Can now relaunch errored jobs and batches (#176)" msgstr "" -#: ../../../CHANGELOG:4161 +#: ../../../CHANGELOG.md:3954 msgid "" "List pending requests by default, added a status filter for requests " "(#109)" msgstr "" -#: ../../../CHANGELOG:4162 +#: ../../../CHANGELOG.md:3955 msgid "More structured menus in sidebar, added labels with notifications" msgstr "" -#: ../../../CHANGELOG:4163 +#: ../../../CHANGELOG.md:3956 msgid "Sample virtual-host file for Apache2 reverse-proxy (!165)" msgstr "" -#: ../../../CHANGELOG:4164 +#: ../../../CHANGELOG.md:3957 msgid "" "Store high-level settings (such as federation or auth-related ones) in " "database (#186)" msgstr "" -#: ../../../CHANGELOG:4170 +#: ../../../CHANGELOG.md:3962 msgid "Ensure in place imported files get a proper mimetype (#183)" msgstr "" -#: ../../../CHANGELOG:4171 +#: ../../../CHANGELOG.md:3963 msgid "" "Federation cache suppression is now simpler and also deletes orphaned " "files (#189)" msgstr "" -#: ../../../CHANGELOG:4173 +#: ../../../CHANGELOG.md:3965 msgid "Fixed small UI glitches/bugs in federation tabs (#184)" msgstr "" -#: ../../../CHANGELOG:4174 +#: ../../../CHANGELOG.md:3966 msgid "X-sendfile not working with in place import (#182)" msgstr "" -#: ../../../CHANGELOG:4179 +#: ../../../CHANGELOG.md:3970 msgid "Added a documentation area for third-party projects (#180)" msgstr "" -#: ../../../CHANGELOG:4180 +#: ../../../CHANGELOG.md:3971 msgid "" "Added documentation for optimizing Funkwhale and reduce its memory " "footprint." msgstr "" -#: ../../../CHANGELOG:4181 +#: ../../../CHANGELOG.md:3972 msgid "Document that the database should use an utf-8 encoding (#185)" msgstr "" -#: ../../../CHANGELOG:4182 +#: ../../../CHANGELOG.md:3973 msgid "Foundations for API documentation with Swagger (#178)" msgstr "" -#: ../../../CHANGELOG:4186 +#: ../../../CHANGELOG.md:3975 msgid "Database storage for high-level settings" msgstr "" -#: ../../../CHANGELOG:4188 +#: ../../../CHANGELOG.md:3977 msgid "" "Due to the work done in #186, the following environment variables have " "been deprecated:" msgstr "" -#: ../../../CHANGELOG:4191 +#: ../../../CHANGELOG.md:3980 msgid "FEDERATION_ENABLED" msgstr "" -#: ../../../CHANGELOG:4192 +#: ../../../CHANGELOG.md:3981 msgid "FEDERATION_COLLECTION_PAGE_SIZE" msgstr "" -#: ../../../CHANGELOG:4193 +#: ../../../CHANGELOG.md:3982 msgid "FEDERATION_MUSIC_NEEDS_APPROVAL" msgstr "" -#: ../../../CHANGELOG:4194 +#: ../../../CHANGELOG.md:3983 msgid "FEDERATION_ACTOR_FETCH_DELAY" msgstr "" -#: ../../../CHANGELOG:4195 +#: ../../../CHANGELOG.md:3984 msgid "PLAYLISTS_MAX_TRACKS" msgstr "" -#: ../../../CHANGELOG:4196 +#: ../../../CHANGELOG.md:3985 msgid "API_AUTHENTICATION_REQUIRED" msgstr "" -#: ../../../CHANGELOG:4198 +#: ../../../CHANGELOG.md:3987 msgid "" "Configuration for this settings has been moved to database, as it will " "provide a better user-experience, by allowing you to edit these values " "on-the-fly, without restarting Funkwhale processes." msgstr "" -#: ../../../CHANGELOG:4202 +#: ../../../CHANGELOG.md:3991 msgid "" "You can leave those environment variables in your .env file for now, as " "the values will be used to populate the database entries. We'll make a " "proper announcement when the variables won't be used anymore." msgstr "" -#: ../../../CHANGELOG:4206 +#: ../../../CHANGELOG.md:3995 msgid "" "Please browse https://docs.funkwhale.audio/configuration.html#instance-" "settings for more information about instance configuration using the web " "interface." msgstr "" -#: ../../../CHANGELOG:4211 +#: ../../../CHANGELOG.md:3998 msgid "System emails" msgstr "" -#: ../../../CHANGELOG:4213 +#: ../../../CHANGELOG.md:4000 msgid "Starting from this release, Funkwhale will send two types of emails:" msgstr "" -#: ../../../CHANGELOG:4216 +#: ../../../CHANGELOG.md:4003 msgid "Email confirmation emails, to ensure a user's email is valid" msgstr "" -#: ../../../CHANGELOG:4217 +#: ../../../CHANGELOG.md:4004 msgid "" "Password reset emails, enabling user to reset their password without an " "admin's intervention" msgstr "" -#: ../../../CHANGELOG:4219 +#: ../../../CHANGELOG.md:4006 msgid "" "Email sending is disabled by default, as it requires additional " "configuration. In this mode, emails are simply outputted on stdout." msgstr "" -#: ../../../CHANGELOG:4222 +#: ../../../CHANGELOG.md:4009 msgid "" "If you want to actually send those emails to your users, you should edit " -"your .env file and tweak the ``EMAIL_CONFIG`` variable. See " +"your .env file and tweak the `EMAIL_CONFIG` variable. See " ":data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` for more " "details." msgstr "" -#: ../../../CHANGELOG:4228 +#: ../../../CHANGELOG.md:4014 msgid "" "As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, " "which was not documented, has no effect anymore. You can safely remove it" " from your .env file if it is set." msgstr "" -#: ../../../CHANGELOG:4234 +#: ../../../CHANGELOG.md:4019 msgid "Proxy headers for non-docker deployments" msgstr "" -#: ../../../CHANGELOG:4236 +#: ../../../CHANGELOG.md:4021 msgid "" -"For non-docker deployments, add ``--proxy-headers`` at the end of the " -"``daphne`` command in :file:`/etc/systemd/system/funkwhale-" -"server.service`." +"For non-docker deployments, add `--proxy-headers` at the end of the " +"`daphne` command in :file:`/etc/systemd/system/funkwhale-server.service`." msgstr "" -#: ../../../CHANGELOG:4239 +#: ../../../CHANGELOG.md:4024 msgid "" "This will ensure the application receive the correct IP address from the " "client and not the proxy's one." msgstr "" -#: ../../../CHANGELOG:4244 +#: ../../../CHANGELOG.md:4027 msgid "0.10 (2018-04-23)" msgstr "" -#: ../../../CHANGELOG:4248 +#: ../../../CHANGELOG.md:4031 msgid "Can now import files in-place from the CLI importer (#155)" msgstr "" -#: ../../../CHANGELOG:4253 +#: ../../../CHANGELOG.md:4035 msgid "Avoid downloading audio files multiple times from remote libraries (#163)" msgstr "" -#: ../../../CHANGELOG:4254 +#: ../../../CHANGELOG.md:4036 msgid "Better file import performance and error handling (#144)" msgstr "" -#: ../../../CHANGELOG:4255 +#: ../../../CHANGELOG.md:4037 msgid "" "Import job and batch API and front-end have been improved with better " "performance, pagination and additional filters (#171)" msgstr "" -#: ../../../CHANGELOG:4257 +#: ../../../CHANGELOG.md:4039 msgid "" "Increased max_length on TrackFile.source, this will help when importing " "files with a really long path (#142)" msgstr "" -#: ../../../CHANGELOG:4259 +#: ../../../CHANGELOG.md:4041 msgid "Player is back in Queue tab (#150)" msgstr "" -#: ../../../CHANGELOG:4264 +#: ../../../CHANGELOG.md:4045 msgid "Fail graciously when AP representation includes a null_value for mediaType" msgstr "" -#: ../../../CHANGELOG:4265 +#: ../../../CHANGELOG.md:4046 msgid "Fix sidebar tabs not showing under small resolution under Chrome (#173)" msgstr "" -#: ../../../CHANGELOG:4266 +#: ../../../CHANGELOG.md:4047 msgid "Fixed broken login due to badly configured Axios (#172)" msgstr "" -#: ../../../CHANGELOG:4267 +#: ../../../CHANGELOG.md:4048 msgid "Fixed broken playlist modal after login (#155)" msgstr "" -#: ../../../CHANGELOG:4268 +#: ../../../CHANGELOG.md:4049 msgid "" "Fixed queue reorder or track deletion restarting currently playing track " "(#151)" msgstr "" -#: ../../../CHANGELOG:4270 +#: ../../../CHANGELOG.md:4051 msgid "" "Radio will now append new track if you delete the last track in queue " "(#145)" msgstr "" -#: ../../../CHANGELOG:4271 +#: ../../../CHANGELOG.md:4052 msgid "Reset all sensitive front-end data on logout (#124)" msgstr "" -#: ../../../CHANGELOG:4272 +#: ../../../CHANGELOG.md:4053 msgid "Typos/not showing text due to i18n work (#175)" msgstr "" -#: ../../../CHANGELOG:4277 +#: ../../../CHANGELOG.md:4057 msgid "Better documentation for hardware requirements and memory usage (#165)" msgstr "" -#: ../../../CHANGELOG:4281 +#: ../../../CHANGELOG.md:4059 msgid "In-place import" msgstr "" -#: ../../../CHANGELOG:4283 +#: ../../../CHANGELOG.md:4061 msgid "" "This release includes in-place imports for the CLI import. This means you" " can load gigabytes of music into funkwhale without worrying about about " @@ -7912,120 +8231,119 @@ msgid "" "your disk space." msgstr "" -#: ../../../CHANGELOG:4287 +#: ../../../CHANGELOG.md:4065 msgid "" -"`This new feature is documented here <https://docs.funkwhale.audio" -"/importing-music.html#in-place-import>`_ and require additional " +"[This new feature is documented here](https://docs.funkwhale.audio" +"/importing-music.html#in-place-import) and require additional " "configuration to ensure funkwhale and your webserver can serve those " "files properly." msgstr "" -#: ../../../CHANGELOG:4291 +#: ../../../CHANGELOG.md:4069 msgid "**Non-docker users:**" msgstr "" -#: ../../../CHANGELOG:4293 ../../../CHANGELOG:4307 +#: ../../../CHANGELOG.md:4071 ../../../CHANGELOG.md:4089 msgid "" -"Assuming your music is stored in ``/srv/funkwhale/data/music``, add the " -"following block to your nginx configuration::" +"Assuming your music is stored in `/srv/funkwhale/data/music`, add the " +"following block to your nginx configuration:" msgstr "" -#: ../../../CHANGELOG:4301 -msgid "And the following to your .env file::" +#: ../../../CHANGELOG.md:4081 +msgid "And the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4305 +#: ../../../CHANGELOG.md:4087 msgid "**Docker users:**" msgstr "" -#: ../../../CHANGELOG:4315 +#: ../../../CHANGELOG.md:4099 msgid "" -"Assuming you have the following volume directive in your ``docker-" -"compose.yml`` (it's the default): " -"``/srv/funkwhale/data/music:/music:ro``, then add the following to your " -".env file::" +"Assuming you have the following volume directive in your `docker-" +"compose.yml` (it's the default): `/srv/funkwhale/data/music:/music:ro`, " +"then add the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4326 +#: ../../../CHANGELOG.md:4110 msgid "0.9.1 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4330 +#: ../../../CHANGELOG.md:4114 msgid "Allow null values for musicbrainz_id in Audio ActivityPub representation" msgstr "" -#: ../../../CHANGELOG:4331 +#: ../../../CHANGELOG.md:4115 msgid "" "Fixed broken permission check on library scanning and too aggressive page" " validation" msgstr "" -#: ../../../CHANGELOG:4336 +#: ../../../CHANGELOG.md:4118 msgid "0.9 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4340 +#: ../../../CHANGELOG.md:4122 msgid "Add internationalization support (#5)" msgstr "" -#: ../../../CHANGELOG:4341 +#: ../../../CHANGELOG.md:4123 msgid "Can now follow and import music from remote libraries (#136, #137)" msgstr "" -#: ../../../CHANGELOG:4346 +#: ../../../CHANGELOG.md:4127 msgid "Added a i18n-extract yarn script to extract strings to PO files (#162)" msgstr "" -#: ../../../CHANGELOG:4347 +#: ../../../CHANGELOG.md:4128 msgid "User admin now includes signup and last login dates (#148)" msgstr "" -#: ../../../CHANGELOG:4348 +#: ../../../CHANGELOG.md:4129 msgid "" "We now use a proper user agent including instance version and url during " "outgoing requests" msgstr "" -#: ../../../CHANGELOG:4353 +#: ../../../CHANGELOG.md:4132 msgid "Federation is here!" msgstr "" -#: ../../../CHANGELOG:4355 +#: ../../../CHANGELOG.md:4134 msgid "This is for real this time, and includes:" msgstr "" -#: ../../../CHANGELOG:4357 +#: ../../../CHANGELOG.md:4136 msgid "Following other Funkwhale libraries" msgstr "" -#: ../../../CHANGELOG:4358 +#: ../../../CHANGELOG.md:4137 msgid "" "Importing tracks from remote libraries (tracks are hotlinked, and only " "cached for a short amount of time)" msgstr "" -#: ../../../CHANGELOG:4359 +#: ../../../CHANGELOG.md:4138 msgid "Searching across federated catalogs" msgstr "" -#: ../../../CHANGELOG:4361 +#: ../../../CHANGELOG.md:4140 msgid "" "Note that by default, federation is opt-in, on a per-instance basis: " "instances will request access to your catalog, and you can accept or " "refuse those requests. You can also revoke the access at any time." msgstr "" -#: ../../../CHANGELOG:4365 +#: ../../../CHANGELOG.md:4144 msgid "" "Documentation was updated with relevant instructions to use and benefit " "from this new feature: https://docs.funkwhale.audio/federation.html" msgstr "" -#: ../../../CHANGELOG:4369 +#: ../../../CHANGELOG.md:4147 msgid "Preparing internationalization" msgstr "" -#: ../../../CHANGELOG:4371 +#: ../../../CHANGELOG.md:4149 msgid "" "Funkwhale's front-end as always been english-only, and this is a barrier " "to new users. The work make Funkwhale's interface translatable was " @@ -8034,24 +8352,24 @@ msgid "" " in the near future." msgstr "" -#: ../../../CHANGELOG:4377 +#: ../../../CHANGELOG.md:4155 msgid "" "Many thank to Baptiste for the hard work and for figuring out a proper " "solution to this difficult problem." msgstr "" -#: ../../../CHANGELOG:4381 +#: ../../../CHANGELOG.md:4158 msgid "Upgrade path" msgstr "" -#: ../../../CHANGELOG:4383 +#: ../../../CHANGELOG.md:4160 msgid "" "In addition to the usual instructions from " "https://docs.funkwhale.audio/upgrading.html, non-docker users will have " "to setup an additional systemd unit file for recurrent tasks." msgstr "" -#: ../../../CHANGELOG:4387 +#: ../../../CHANGELOG.md:4164 msgid "" "This was forgotten in the deployment documentation, but recurrent tasks, " "managed by the celery beat process, will be needed more and more in " @@ -8059,97 +8377,97 @@ msgid "" "federated music files and keep disk usage to a minimum." msgstr "" -#: ../../../CHANGELOG:4392 +#: ../../../CHANGELOG.md:4169 msgid "" "In the future, they will also be needed to refetch music metadata or " "federated information periodically." msgstr "" -#: ../../../CHANGELOG:4395 -msgid "Celery beat can be enabled easily::" +#: ../../../CHANGELOG.md:4172 +msgid "Celery beat can be enabled easily:" msgstr "" -#: ../../../CHANGELOG:4405 +#: ../../../CHANGELOG.md:4184 msgid "Docker users already have celerybeat enabled." msgstr "" -#: ../../../CHANGELOG:4409 +#: ../../../CHANGELOG.md:4186 msgid "0.8 (2018-04-02)" msgstr "" -#: ../../../CHANGELOG:4413 +#: ../../../CHANGELOG.md:4190 msgid "Add a detail page for radios (#64)" msgstr "" -#: ../../../CHANGELOG:4414 +#: ../../../CHANGELOG.md:4191 msgid "Implemented page title binding (#1)" msgstr "" -#: ../../../CHANGELOG:4415 +#: ../../../CHANGELOG.md:4192 msgid "Previous Track button restart playback after 3 seconds (#146)" msgstr "" -#: ../../../CHANGELOG:4420 +#: ../../../CHANGELOG.md:4196 msgid "Added credits to Francis Gading for the logotype (#101)" msgstr "" -#: ../../../CHANGELOG:4421 +#: ../../../CHANGELOG.md:4197 msgid "" "API endpoint for fetching instance activity and updated timeline to use " "this new endpoint (#141)" msgstr "" -#: ../../../CHANGELOG:4423 +#: ../../../CHANGELOG.md:4199 msgid "Better error messages in case of missing environment variables (#140)" msgstr "" -#: ../../../CHANGELOG:4424 +#: ../../../CHANGELOG.md:4200 msgid "" "Implemented a @test@yourfunkwhaledomain bot to ensure federation works " "properly. Send it \"/ping\" and it will answer back :)" msgstr "" -#: ../../../CHANGELOG:4426 +#: ../../../CHANGELOG.md:4202 msgid "Queue shuffle now apply only to tracks after the current one (#97)" msgstr "" -#: ../../../CHANGELOG:4427 +#: ../../../CHANGELOG.md:4203 msgid "" "Removed player from queue tab and consistently show current track in " "queue (#131)" msgstr "" -#: ../../../CHANGELOG:4429 +#: ../../../CHANGELOG.md:4205 msgid "We now restrict some usernames from being used during signup (#139)" msgstr "" -#: ../../../CHANGELOG:4434 +#: ../../../CHANGELOG.md:4209 msgid "Better error handling during file import (#120)" msgstr "" -#: ../../../CHANGELOG:4435 +#: ../../../CHANGELOG.md:4210 msgid "Better handling of utf-8 filenames during file import (#138)" msgstr "" -#: ../../../CHANGELOG:4436 +#: ../../../CHANGELOG.md:4211 msgid "Converted favicon from .ico to .png (#130)" msgstr "" -#: ../../../CHANGELOG:4437 +#: ../../../CHANGELOG.md:4212 msgid "" "Upgraded to Python 3.6 to fix weird but harmless weakref error on django " "task (#121)" msgstr "" -#: ../../../CHANGELOG:4443 +#: ../../../CHANGELOG.md:4217 msgid "Documented the upgrade process (#127)" msgstr "" -#: ../../../CHANGELOG:4447 +#: ../../../CHANGELOG.md:4219 msgid "Preparing for federation" msgstr "" -#: ../../../CHANGELOG:4449 +#: ../../../CHANGELOG.md:4221 msgid "" "Federation of music libraries is one of the most asked feature. While " "there is still a lot of work to do, this version includes the foundation " @@ -8157,162 +8475,162 @@ msgid "" "and with other federated software, such as Mastodon." msgstr "" -#: ../../../CHANGELOG:4455 +#: ../../../CHANGELOG.md:4227 msgid "Funkwhale will use ActivityPub as it's federation protocol." msgstr "" -#: ../../../CHANGELOG:4457 +#: ../../../CHANGELOG.md:4229 msgid "" "In order to prepare for federation (see #136 and #137), new API endpoints" " have been added under /federation and /.well-known/webfinger." msgstr "" -#: ../../../CHANGELOG:4460 +#: ../../../CHANGELOG.md:4232 msgid "" "For these endpoints to work, you will need to update your nginx " -"configuration, and add the following snippets::" +"configuration, and add the following snippets:" msgstr "" -#: ../../../CHANGELOG:4473 +#: ../../../CHANGELOG.md:4246 msgid "" "This will ensure federation endpoints will be reachable in the future. " "You can of course skip this part if you know you will not federate your " "instance." msgstr "" -#: ../../../CHANGELOG:4476 +#: ../../../CHANGELOG.md:4249 msgid "" -"A new ``FEDERATION_ENABLED`` env var have also been added to control " +"A new `FEDERATION_ENABLED` env var have also been added to control " "whether federation is enabled or not on the application side. This " "settings defaults to True, which should have no consequences at the " "moment, since actual federation is not implemented and the only available" " endpoints are for testing purposes." msgstr "" -#: ../../../CHANGELOG:4482 +#: ../../../CHANGELOG.md:4255 msgid "" -"Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation " -"on the application side." +"Add `FEDERATION_ENABLED=false` to your .env file to disable federation on" +" the application side." msgstr "" -#: ../../../CHANGELOG:4485 +#: ../../../CHANGELOG.md:4258 msgid "" "To test and troubleshoot federation, we've added a bot account. This bot " "is available at @test@yourinstancedomain, and sending it \"/ping\", for " "example, via Mastodon, should trigger a response." msgstr "" -#: ../../../CHANGELOG:4492 +#: ../../../CHANGELOG.md:4262 msgid "0.7 (2018-03-21)" msgstr "" -#: ../../../CHANGELOG:4496 +#: ../../../CHANGELOG.md:4266 msgid "Can now filter artists and albums with no listenable tracks (#114)" msgstr "" -#: ../../../CHANGELOG:4497 +#: ../../../CHANGELOG.md:4267 msgid "" "Improve the style of the sidebar to make it easier to understand which " "tab is selected (#118)" msgstr "" -#: ../../../CHANGELOG:4499 +#: ../../../CHANGELOG.md:4269 msgid "On artist page, albums are not sorted by release date, if any (#116)" msgstr "" -#: ../../../CHANGELOG:4500 +#: ../../../CHANGELOG.md:4270 msgid "Playlists are here \\o/ :tada: (#3, #93, #94)" msgstr "" -#: ../../../CHANGELOG:4501 +#: ../../../CHANGELOG.md:4271 msgid "Use django-cacheops to cache common ORM requests (#117)" msgstr "" -#: ../../../CHANGELOG:4506 +#: ../../../CHANGELOG.md:4275 msgid "Fixed broken import request admin (#115)" msgstr "" -#: ../../../CHANGELOG:4507 +#: ../../../CHANGELOG.md:4276 msgid "" "Fixed forced redirection to login event with " "API_AUTHENTICATION_REQUIRED=False (#119)" msgstr "" -#: ../../../CHANGELOG:4509 +#: ../../../CHANGELOG.md:4278 msgid "" "Fixed position not being reset properly when playing the same track " "multiple times in a row" msgstr "" -#: ../../../CHANGELOG:4511 +#: ../../../CHANGELOG.md:4280 msgid "Fixed synchronized start/stop radio buttons for all custom radios (#103)" msgstr "" -#: ../../../CHANGELOG:4512 +#: ../../../CHANGELOG.md:4281 msgid "Fixed typo and missing icon on homepage (#96)" msgstr "" -#: ../../../CHANGELOG:4517 +#: ../../../CHANGELOG.md:4285 msgid "" "Up-to-date and complete development and contribution instructions in " "README.rst (#123)" msgstr "" -#: ../../../CHANGELOG:4522 +#: ../../../CHANGELOG.md:4288 msgid "0.6.1 (2018-03-06)" msgstr "" -#: ../../../CHANGELOG:4526 +#: ../../../CHANGELOG.md:4292 msgid "Can now skip acoustid on file import with the --no-acoustid flag (#111)" msgstr "" -#: ../../../CHANGELOG:4531 +#: ../../../CHANGELOG.md:4296 msgid "Added missing batch id in output during import (#112)" msgstr "" -#: ../../../CHANGELOG:4532 +#: ../../../CHANGELOG.md:4297 msgid "Added some feedback on the play button (#100)" msgstr "" -#: ../../../CHANGELOG:4533 +#: ../../../CHANGELOG.md:4298 msgid "Smarter pagination which takes a fixed size (#84)" msgstr "" -#: ../../../CHANGELOG:4538 +#: ../../../CHANGELOG.md:4302 msgid "" "Completely removed django-cachalot from the codebase (#110). You can " "safely remove the CACHALOT_ENABLED setting from your .env file" msgstr "" -#: ../../../CHANGELOG:4543 +#: ../../../CHANGELOG.md:4305 msgid "0.6 (2018-03-04)" msgstr "" -#: ../../../CHANGELOG:4547 +#: ../../../CHANGELOG.md:4309 msgid "Basic activity stream for listening and favorites (#23)" msgstr "" -#: ../../../CHANGELOG:4548 +#: ../../../CHANGELOG.md:4310 msgid "" "Switched to django-channels and daphne for serving HTTP and websocket " "(#34)" msgstr "" -#: ../../../CHANGELOG:4551 +#: ../../../CHANGELOG.md:4312 msgid "Upgrades notes" msgstr "" -#: ../../../CHANGELOG:4553 +#: ../../../CHANGELOG.md:4314 msgid "" "This version contains breaking changes in the way funkwhale is deployed, " "please read the notes carefully." msgstr "" -#: ../../../CHANGELOG:4557 +#: ../../../CHANGELOG.md:4317 msgid "Instance timeline" msgstr "" -#: ../../../CHANGELOG:4559 +#: ../../../CHANGELOG.md:4319 msgid "" "A new \"Activity\" page is now available from the sidebar, where you can " "browse your instance activity. At the moment, this includes other users " @@ -8320,14 +8638,14 @@ msgid "" "the future." msgstr "" -#: ../../../CHANGELOG:4564 +#: ../../../CHANGELOG.md:4324 msgid "" "Internally, we implemented those events by following the Activity Stream " "specification, which will help us to be compatible with other networks in" " the long-term." msgstr "" -#: ../../../CHANGELOG:4568 +#: ../../../CHANGELOG.md:4328 msgid "" "A new settings page has been added to control the visibility of your " "activity. By default, your activity will be browsable by anyone on your " @@ -8335,15 +8653,15 @@ msgid "" "shared." msgstr "" -#: ../../../CHANGELOG:4572 +#: ../../../CHANGELOG.md:4332 msgid "The setting form is available in your profile." msgstr "" -#: ../../../CHANGELOG:4575 +#: ../../../CHANGELOG.md:4334 msgid "Switch from gunicorn to daphne" msgstr "" -#: ../../../CHANGELOG:4577 +#: ../../../CHANGELOG.md:4336 msgid "" "This release include an important change in the way we serve the HTTP " "API. To prepare for new realtime features and enable websocket support in" @@ -8351,190 +8669,190 @@ msgid "" " websocket traffic." msgstr "" -#: ../../../CHANGELOG:4581 +#: ../../../CHANGELOG.md:4340 msgid "" "This replaces gunicorn and the switch should be easy assuming you follow " "the upgrade process described below." msgstr "" -#: ../../../CHANGELOG:4584 +#: ../../../CHANGELOG.md:4343 msgid "" "If you are using docker, please remove the command instruction inside the" " api service, as the up-to-date command is now included directly in the " "image as the default entry point:" msgstr "" -#: ../../../CHANGELOG:4595 +#: ../../../CHANGELOG.md:4355 msgid "" -"On non docker setups, you'll have to update the [Service] block of your " -"funkwhale-server systemd unit file to launch the application server using" -" daphne instead of gunicorn." +"On non docker setups, you'll have to update the `[Service]` block of your" +" funkwhale-server systemd unit file to launch the application server " +"using daphne instead of gunicorn." msgstr "" -#: ../../../CHANGELOG:4598 +#: ../../../CHANGELOG.md:4358 msgid "The new configuration should be similar to this:" msgstr "" -#: ../../../CHANGELOG:4609 +#: ../../../CHANGELOG.md:4369 msgid "" "Ensure you update funkwhale's dependencies as usual to install the " "required packages." msgstr "" -#: ../../../CHANGELOG:4612 +#: ../../../CHANGELOG.md:4372 msgid "" "On both docker and non-docker setup, you'll also have to update your " "nginx configuration for websocket support. Ensure you have the following " "blocks included in your virtualhost file:" msgstr "" -#: ../../../CHANGELOG:4630 +#: ../../../CHANGELOG.md:4390 msgid "Remember to reload your nginx server after the edit." msgstr "" -#: ../../../CHANGELOG:4634 +#: ../../../CHANGELOG.md:4392 msgid "0.5.4 (2018-02-28)" msgstr "" -#: ../../../CHANGELOG:4638 +#: ../../../CHANGELOG.md:4396 msgid "Now stop running radio when clearing queue (#98)" msgstr "" -#: ../../../CHANGELOG:4642 +#: ../../../CHANGELOG.md:4400 msgid "Fixed queue skipping tracks (#91)" msgstr "" -#: ../../../CHANGELOG:4643 +#: ../../../CHANGELOG.md:4401 msgid "Now loop properly on queue when we only have one track (#95)" msgstr "" -#: ../../../CHANGELOG:4647 +#: ../../../CHANGELOG.md:4403 msgid "0.5.3 (2018-02-27)" msgstr "" -#: ../../../CHANGELOG:4651 +#: ../../../CHANGELOG.md:4407 msgid "" "Added admin interface for radios, track files, favorites and import " "requests (#80)" msgstr "" -#: ../../../CHANGELOG:4652 +#: ../../../CHANGELOG.md:4408 msgid "Added basic instance stats on /about (#82)" msgstr "" -#: ../../../CHANGELOG:4653 +#: ../../../CHANGELOG.md:4409 msgid "" "Search now unaccent letters for queries like \"The Dø\" or \"Björk\" " "yielding more results (#81)" msgstr "" -#: ../../../CHANGELOG:4658 +#: ../../../CHANGELOG.md:4413 msgid "Always use username in sidebar (#89)" msgstr "" -#: ../../../CHANGELOG:4659 +#: ../../../CHANGELOG.md:4414 msgid "Click event outside of player icons (#83)" msgstr "" -#: ../../../CHANGELOG:4660 +#: ../../../CHANGELOG.md:4415 msgid "Fixed broken import because of missing transaction" msgstr "" -#: ../../../CHANGELOG:4661 +#: ../../../CHANGELOG.md:4416 msgid "Now always load next radio track on last queue track ended (#87)" msgstr "" -#: ../../../CHANGELOG:4662 +#: ../../../CHANGELOG.md:4417 msgid "Now exclude tracks without file from radio candidates (#88)" msgstr "" -#: ../../../CHANGELOG:4663 +#: ../../../CHANGELOG.md:4418 msgid "skip to next track properly on 40X errors (#86)" msgstr "" -#: ../../../CHANGELOG:4668 +#: ../../../CHANGELOG.md:4422 msgid "Switched to towncrier for changelog management and compilation" msgstr "" -#: ../../../CHANGELOG:4672 +#: ../../../CHANGELOG.md:4424 msgid "0.5.2 (2018-02-26)" msgstr "" -#: ../../../CHANGELOG:4674 +#: ../../../CHANGELOG.md:4426 msgid "Fixed broken file import due to wrong url (#73)" msgstr "" -#: ../../../CHANGELOG:4675 +#: ../../../CHANGELOG.md:4427 msgid "More accurate mimetype detection" msgstr "" -#: ../../../CHANGELOG:4676 +#: ../../../CHANGELOG.md:4428 msgid "Fixed really small size on small screens" msgstr "" -#: ../../../CHANGELOG:4677 +#: ../../../CHANGELOG.md:4429 msgid "Added masonry layout for artists, requests and radios (#68)" msgstr "" -#: ../../../CHANGELOG:4678 +#: ../../../CHANGELOG.md:4430 msgid "We now have a favicon!" msgstr "" -#: ../../../CHANGELOG:4679 +#: ../../../CHANGELOG.md:4431 msgid "Fixed truncated play icon (#65)" msgstr "" -#: ../../../CHANGELOG:4683 +#: ../../../CHANGELOG.md:4433 msgid "0.5.1 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4685 +#: ../../../CHANGELOG.md:4435 msgid "Front: Fixed broken ajax call on radio builder (#69)" msgstr "" -#: ../../../CHANGELOG:4686 +#: ../../../CHANGELOG.md:4436 msgid "Front: Shuffle now restart next track from beginning (#70)" msgstr "" -#: ../../../CHANGELOG:4687 +#: ../../../CHANGELOG.md:4437 msgid "Front: volume slider should now have the same style everywhere (#72)" msgstr "" -#: ../../../CHANGELOG:4691 +#: ../../../CHANGELOG.md:4439 msgid "0.5 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4693 +#: ../../../CHANGELOG.md:4441 msgid "Front: Now reset player colors when track has no cover (#46)" msgstr "" -#: ../../../CHANGELOG:4694 +#: ../../../CHANGELOG.md:4442 msgid "Front: play button now disabled for unplayable tracks" msgstr "" -#: ../../../CHANGELOG:4695 +#: ../../../CHANGELOG.md:4443 msgid "" "API: You can now enable or disable registration on the fly, via a " "preference (#58)" msgstr "" -#: ../../../CHANGELOG:4696 +#: ../../../CHANGELOG.md:4444 msgid "Front: can now signup via the web interface (#35)" msgstr "" -#: ../../../CHANGELOG:4697 +#: ../../../CHANGELOG.md:4445 msgid "Front: Fixed broken redirection on login" msgstr "" -#: ../../../CHANGELOG:4698 +#: ../../../CHANGELOG.md:4446 msgid "Front: Fixed broken error handling on settings and login form" msgstr "" -#: ../../../CHANGELOG:4700 +#: ../../../CHANGELOG.md:4448 msgid "About page:" msgstr "" -#: ../../../CHANGELOG:4702 +#: ../../../CHANGELOG.md:4450 msgid "" "There is a brand new about page on instances (/about), and instance owner" " can now provide a name, a short and a long description for their " @@ -8542,21 +8860,21 @@ msgid "" "(/api/admin/dynamic_preferences/globalpreferencemodel/)." msgstr "" -#: ../../../CHANGELOG:4705 +#: ../../../CHANGELOG.md:4453 msgid "Transcoding:" msgstr "" -#: ../../../CHANGELOG:4707 +#: ../../../CHANGELOG.md:4455 msgid "" "Basic transcoding is now available to/from the following formats : ogg " "and mp3." msgstr "" -#: ../../../CHANGELOG:4709 -msgid "*This is still an alpha feature at the moment, please report any bug.*" +#: ../../../CHANGELOG.md:4457 +msgid "_This is still an alpha feature at the moment, please report any bug._" msgstr "" -#: ../../../CHANGELOG:4711 +#: ../../../CHANGELOG.md:4459 msgid "" "This relies internally on FFMPEG and can put some load on your server. " "It's definitely recommended you setup some caching for the transcoded " @@ -8564,251 +8882,1201 @@ msgid "" "deploy/nginx.conf for an implementation." msgstr "" -#: ../../../CHANGELOG:4716 +#: ../../../CHANGELOG.md:4464 msgid "On the frontend, usage of transcoding should be transparent in the player." msgstr "" -#: ../../../CHANGELOG:4718 +#: ../../../CHANGELOG.md:4466 msgid "Music Requests:" msgstr "" -#: ../../../CHANGELOG:4720 +#: ../../../CHANGELOG.md:4468 msgid "" "This release includes a new feature, music requests, which allows users " "to request music they'd like to see imported. Admins can browse those " "requests and mark them as completed when an import is made." msgstr "" -#: ../../../CHANGELOG:4726 +#: ../../../CHANGELOG.md:4473 msgid "0.4 (2018-02-18)" msgstr "" -#: ../../../CHANGELOG:4728 +#: ../../../CHANGELOG.md:4475 msgid "Front: ambiant colors in player based on current track cover (#59)" msgstr "" -#: ../../../CHANGELOG:4729 +#: ../../../CHANGELOG.md:4476 msgid "Front: simplified front dev setup thanks to webpack proxy (#59)" msgstr "" -#: ../../../CHANGELOG:4730 +#: ../../../CHANGELOG.md:4477 msgid "Front: added some unittests for the store (#55)" msgstr "" -#: ../../../CHANGELOG:4731 +#: ../../../CHANGELOG.md:4478 msgid "Front: fixed broken login redirection when 401" msgstr "" -#: ../../../CHANGELOG:4732 +#: ../../../CHANGELOG.md:4479 msgid "Front: Removed autoplay on page reload" msgstr "" -#: ../../../CHANGELOG:4733 +#: ../../../CHANGELOG.md:4480 msgid "API: Added a /instance/settings endpoint" msgstr "" -#: ../../../CHANGELOG:4734 +#: ../../../CHANGELOG.md:4481 msgid "Front: load /instance/settings on page load" msgstr "" -#: ../../../CHANGELOG:4735 +#: ../../../CHANGELOG.md:4482 msgid "" "Added settings to report JS and Python error to a Sentry instance This is" " disabled by default, but feel free to enable it if you want to help us " "by sending your error reports :) (#8)" msgstr "" -#: ../../../CHANGELOG:4741 +#: ../../../CHANGELOG.md:4486 msgid "0.3.5 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4743 +#: ../../../CHANGELOG.md:4488 msgid "Smarter BACKEND_URL in frontend" msgstr "" -#: ../../../CHANGELOG:4747 +#: ../../../CHANGELOG.md:4490 msgid "0.3.4 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4749 +#: ../../../CHANGELOG.md:4492 msgid "Fixed wrong URL construction in ajax call" msgstr "" -#: ../../../CHANGELOG:4753 +#: ../../../CHANGELOG.md:4494 msgid "0.3.3 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4755 +#: ../../../CHANGELOG.md:4496 msgid "Users can now create their own dynamic radios (#51)" msgstr "" -#: ../../../CHANGELOG:4759 +#: ../../../CHANGELOG.md:4498 msgid "0.3.2" msgstr "" -#: ../../../CHANGELOG:4761 +#: ../../../CHANGELOG.md:4500 msgid "Fixed an issue in the main dockerfile" msgstr "" -#: ../../../CHANGELOG:4765 +#: ../../../CHANGELOG.md:4502 msgid "0.3.1" msgstr "" -#: ../../../CHANGELOG:4767 +#: ../../../CHANGELOG.md:4504 msgid "Revamped all import logic, everything is more tested and consistent" msgstr "" -#: ../../../CHANGELOG:4768 +#: ../../../CHANGELOG.md:4505 msgid "" "Can now use Acoustid in file imports to automatically grab metadata from " "musicbrainz" msgstr "" -#: ../../../CHANGELOG:4769 +#: ../../../CHANGELOG.md:4506 msgid "Brand new file import wizard" msgstr "" -#: ../../../CHANGELOG:4773 +#: ../../../CHANGELOG.md:4508 msgid "0.2.7" msgstr "" -#: ../../../CHANGELOG:4775 +#: ../../../CHANGELOG.md:4510 msgid "" -"Shortcuts: can now use the ``f`` shortcut to toggle the currently playing" -" track as a favorite (#53)" +"Shortcuts: can now use the `f` shortcut to toggle the currently playing " +"track as a favorite (#53)" msgstr "" -#: ../../../CHANGELOG:4777 +#: ../../../CHANGELOG.md:4512 msgid "" "Shortcuts: avoid collisions between shortcuts by using the exact modifier" " (#53)" msgstr "" -#: ../../../CHANGELOG:4778 +#: ../../../CHANGELOG.md:4513 msgid "Player: Added looping controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4779 +#: ../../../CHANGELOG.md:4514 msgid "Player: Added shuffling controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4780 +#: ../../../CHANGELOG.md:4515 msgid "Favorites: can now modify the ordering of track list (#50)" msgstr "" -#: ../../../CHANGELOG:4781 +#: ../../../CHANGELOG.md:4516 msgid "Library: can now search/reorder results on artist browsing view (#50)" msgstr "" -#: ../../../CHANGELOG:4782 +#: ../../../CHANGELOG.md:4517 msgid "" "Upgraded celery to 4.1, added endpoint logic for fingerprinting audio " "files" msgstr "" -#: ../../../CHANGELOG:4783 +#: ../../../CHANGELOG.md:4518 msgid "" "Fixed #56: invalidate tokens on password change, also added change " "password form" msgstr "" -#: ../../../CHANGELOG:4784 +#: ../../../CHANGELOG.md:4519 msgid "Fixed #57: now refresh jwt token on page refresh" msgstr "" -#: ../../../CHANGELOG:4785 +#: ../../../CHANGELOG.md:4520 msgid "removed ugly dividers in batch import list" msgstr "" -#: ../../../CHANGELOG:4786 +#: ../../../CHANGELOG.md:4521 msgid "Fixed a few padding issues" msgstr "" -#: ../../../CHANGELOG:4787 +#: ../../../CHANGELOG.md:4522 msgid "Now persist/restore queue/radio/player state automatically" msgstr "" -#: ../../../CHANGELOG:4788 +#: ../../../CHANGELOG.md:4523 msgid "Removed old broken imports" msgstr "" -#: ../../../CHANGELOG:4789 +#: ../../../CHANGELOG.md:4524 msgid "Now force tests paths" msgstr "" -#: ../../../CHANGELOG:4790 +#: ../../../CHANGELOG.md:4525 msgid "Fixed #54: Now use pytest everywhere \\o/" msgstr "" -#: ../../../CHANGELOG:4791 +#: ../../../CHANGELOG.md:4526 msgid "Now use vuex to manage state for favorites" msgstr "" -#: ../../../CHANGELOG:4792 +#: ../../../CHANGELOG.md:4527 msgid "Now use vuex to manage state for authentication" msgstr "" -#: ../../../CHANGELOG:4793 +#: ../../../CHANGELOG.md:4528 msgid "Now use vuex to manage state for player/queue/radios" msgstr "" -#: ../../../CHANGELOG:4797 +#: ../../../CHANGELOG.md:4530 msgid "0.2.6 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4799 +#: ../../../CHANGELOG.md:4532 msgid "Fixed broken Dockerfile" msgstr "" -#: ../../../CHANGELOG:4803 +#: ../../../CHANGELOG.md:4534 msgid "0.2.5 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4807 +#: ../../../CHANGELOG.md:4538 msgid "Import: can now specify search template when querying import sources (#45)" msgstr "" -#: ../../../CHANGELOG:4808 +#: ../../../CHANGELOG.md:4539 msgid "Login form: now redirect to previous page after login (#2)" msgstr "" -#: ../../../CHANGELOG:4809 +#: ../../../CHANGELOG.md:4540 msgid "404: a decent 404 template, at least (#48)" msgstr "" -#: ../../../CHANGELOG:4813 +#: ../../../CHANGELOG.md:4544 msgid "Player: better handling of errors when fetching the audio file (#46)" msgstr "" -#: ../../../CHANGELOG:4814 +#: ../../../CHANGELOG.md:4545 msgid "" "Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues " "on admin (#49)" msgstr "" -#: ../../../CHANGELOG:4816 +#: ../../../CHANGELOG.md:4547 msgid "Tech:" msgstr "" -#: ../../../CHANGELOG:4818 +#: ../../../CHANGELOG.md:4549 msgid "Django 2 compatibility, lot of packages upgrades (#47)" msgstr "" -#: ../../../CHANGELOG:4822 +#: ../../../CHANGELOG.md:4551 msgid "0.2.4 (2017-12-14)" msgstr "" -#: ../../../CHANGELOG:4826 +#: ../../../CHANGELOG.md:4555 msgid "Models: now store release group mbid on Album model (#7)" msgstr "" -#: ../../../CHANGELOG:4827 +#: ../../../CHANGELOG.md:4556 msgid "Models: now bind import job to track files (#44)" msgstr "" -#: ../../../CHANGELOG:4831 +#: ../../../CHANGELOG.md:4560 msgid "" "Library: fixen broken \"play all albums\" button on artist cards in " "Artist browsing view (#43)" msgstr "" +#~ msgid "" +#~ "Following `@funkwhale@fosstodon.org " +#~ "<https://fosstodon.org/@funkwhale>`_ on Mastodon" +#~ msgstr "" + +#~ msgid "" +#~ "``` export FUNKWHALE_VERSION=\"1.3.0\" cd " +#~ "/srv/funkwhale docker-compose down mv " +#~ "docker-compose.yml docker-compose.bak curl " +#~ "-L -o /srv/funkwhale/docker-compose.yml " +#~ "\"https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy" +#~ "/docker-compose.yml\" ```" +#~ msgstr "" + +#~ msgid "" +#~ "If you need to customize your " +#~ "nginx template, e.g. to work around " +#~ "`problems with Docker's resolver " +#~ "<https://docs.funkwhale.audio/admin/external-storages.html" +#~ "#no-resolver-found>`_, you can mount " +#~ "your custom nginx configuration into the" +#~ " container. Uncomment the commented volumes" +#~ " in the `nginx` section of your " +#~ "`docker-compose.yml`. Additionally you need" +#~ " to update the paths in " +#~ "`nginx/funkwhale.template`. Replace all occurrences" +#~ " of `/funkwhale` by `/usr/share/nginx/html`. " +#~ "This loads the templates from your " +#~ "`nginx` folder and overrides the " +#~ "template files in the Docker container." +#~ msgstr "" + +#~ msgid "``` docker-compose up -d ```" +#~ msgstr "" + +#~ msgid "" +#~ "Download the `Docker compose plugin " +#~ "<https://docs.docker.com/compose/install/linux/#install-" +#~ "using-the-repository>`_" +#~ msgstr "" + +#~ msgid "```sh sudo docker-compose down ```" +#~ msgstr "" + +#~ msgid "```sh sudo docker compose up -d ```" +#~ msgstr "" + +#~ msgid "" +#~ "Update dependency vue-template-compiler " +#~ "to 2.6.14 Update dependency vue to " +#~ "^2.6.14 Update dependency vuex-persistedstate" +#~ " to ^2.7.1 Update dependency vuedraggable" +#~ " to ^2.24.3 Update dependency vue-" +#~ "lazyload to ^1.3.3 Update dependency " +#~ "vue-plyr to ^5.1.3 Update dependency " +#~ "vue-upload-component to ^2.8.22 Update " +#~ "dependency vue-gettext to ^2.1.12 Update" +#~ " dependency showdown to ^1.9.1 Update " +#~ "dependency js-logger to ^1.6.1 Update" +#~ " dependency register-service-worker to " +#~ "^1.7.2 Update dependency howler to " +#~ "^2.2.3 Update dependency fomantic-ui-css" +#~ " to ^2.8.8 Update dependency diff to" +#~ " ^4.0.2 Update dependency axios-auth-" +#~ "refresh to ^2.2.8" +#~ msgstr "" + +#~ msgid "" +#~ "Ciarán Ainsworth Georg Krause Jakob " +#~ "Schürz Mathieu Jourdan Micha Gläß-Stöcker " +#~ "petitminion" +#~ msgstr "" + +#~ msgid "Committers: Dignified Silence Georg Krause JuniorJPDJ nztvar" +#~ msgstr "" + +#~ msgid "" +#~ "`DETAIL: The data directory was " +#~ "initialized by PostgreSQL version 11, " +#~ "which is not compatible with this " +#~ "version 13.5.`" +#~ msgstr "" + +#~ msgid "" +#~ "Alexandra Parker Alyssa Ross appzer0 " +#~ "Arthur Brugière Asier Iturralde Sarasola " +#~ "bittin Blopware Brian McMillen Christoph " +#~ "Pomaska Ciaran Ainsworth Ciarán Ainsworth " +#~ "Classified Connor Hay Damian Szetela " +#~ "David Marzal Deleted User Dignified " +#~ "Silence Dominik Danelski egon0 Erik " +#~ "Präntare Georg Abenthung Georgios B " +#~ "Georgios Brellas Georg Krause ghose " +#~ "greengekota heyarne ian Vatega Janek " +#~ "jovuit JuniorJPDJ Konstantinos G manuelviens" +#~ " Manuel Viens Marcos Marcos Peña " +#~ "Martin Giger Matthew J Micha " +#~ "Gläß-Stöcker petitminion Petitminion Philipp " +#~ "Wolfer Porrumentzio Quentin PAGÈS Raphael " +#~ "Lullis Riccardo Sacchetto Romain Failliot " +#~ "Rubén Cabrera Ryan Harg Sergio Varela" +#~ " SpcCw Stefano Pigozzi Thomas Tony " +#~ "Simoes Tony Wasserka vachan-maker " +#~ "Virgile Robles" +#~ msgstr "" + +#~ msgid "" +#~ "AMoonRabbit Agate Antoine POPINEAU Arthur " +#~ "Brugière Ciarán Ainsworth Connor Hay " +#~ "Creak David Marzal Georg Krause Gerhard" +#~ " Beck Greg Poole JuniorJPDJ Kuba " +#~ "Orlik Lunar Control Marcos Peña Mateusz" +#~ " Korzeniewski Mathieu Jourdan Micha " +#~ "Gläß-Stöcker Philipp Wolfer Porrumentzio " +#~ "Thomas Tony Wasserka Ville Ranki arkhi" +#~ " heyarne interfect jovuit mal petitminion" +#~ " vachan-maker" +#~ msgstr "" + +#~ msgid "" +#~ "Agate Arthur Brugière Ciarán Ainsworth " +#~ "Connor Hay David Marzal Distopico Fanyx" +#~ " Georg Abenthung Georg Krause Janek " +#~ "JuniorJPDJ Kasper Seweryn Marcos Peña " +#~ "Mathieu Jourdan Matthew J. Micha " +#~ "Gläß-Stöcker Philipp Wolfer Thomas Tony " +#~ "Wasserka heyarne jovuit petitminion thanksd" +#~ msgstr "" + +#~ msgid "" +#~ "Adam Novak Agate alemairebe Alicia " +#~ "Blasco Leon anonymous Amaranthe appzer0 " +#~ "Arne Asier Iturralde Sarasola Christian " +#~ "Paul Ciarán Ainsworth Daniel David " +#~ "Dominik Danelski Eorn le goéland Eleos" +#~ " Erik Duxstad Esteban Fred Uggla " +#~ "Freyja Wildes Georg Krause ghose " +#~ "hellekin heyarne interfect Jess Jing " +#~ "Johannes H. jovuit marzzzello Meliurwen " +#~ "Mehdi Nitai Bezerra da Silva Philipp " +#~ "Wolfer Pierre Couy Porrumentzio Reg " +#~ "Robert Kaye Rubén Cabrera Silver Fox " +#~ "Snack Capt SpcCw Strom Lin vicdorke " +#~ "x" +#~ msgstr "" + +#~ msgid "" +#~ "With Funkwhale 1.0, we're dropping " +#~ "support for Python 3.5. Before " +#~ "upgrading, ensure ``python3 --version`` " +#~ "returns ``3.6`` or higher." +#~ msgstr "" + +#~ msgid "If it returns ``3.6`` or higher, you have nothing to do." +#~ msgstr "" + +#~ msgid "" +#~ "If it returns ``3.5``, you will " +#~ "need to upgrade your Python " +#~ "version/Host, then recreate your virtual " +#~ "environment::" +#~ msgstr "" + +#~ msgid "delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory" +#~ msgstr "" + +#~ msgid "" +#~ "run ``python manage.py fw media " +#~ "generate-thumbnails`` to regenerate thumbnails" +#~ " with the enhanced quality" +#~ msgstr "" + +#~ msgid "" +#~ "If you don't want to regenerate " +#~ "thumbnails, you can keep the old " +#~ "ones by adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70``" +#~ " to your .env file." +#~ msgstr "" + +#~ msgid "Small API breaking change in ``/api/v1/libraries``" +#~ msgstr "" + +#~ msgid "" +#~ "To allow easier crawling of public " +#~ "libraries on a pod,we had to make" +#~ " a slight breaking change to the " +#~ "behaviour of ``GET /api/v1/libraries``." +#~ msgstr "" + +#~ msgid "" +#~ "If you are consuming the API via" +#~ " a third-party client and need " +#~ "to retrieve your libraries, use the " +#~ "``scope`` parameter, like this: ``GET " +#~ "/api/v1/libraries?scope=me``" +#~ msgstr "" + +#~ msgid "API breaking change in ``/api/v1/albums``" +#~ msgstr "" + +#~ msgid "" +#~ "To increase performance, querying " +#~ "``/api/v1/albums`` doesn't return album tracks" +#~ " anymore. This caused some performance " +#~ "issues, especially as some albums and" +#~ " series have dozens or even hundreds" +#~ " of tracks." +#~ msgstr "" + +#~ msgid "" +#~ "If you want to retrieve tracks for" +#~ " an album, you can query " +#~ "``/api/v1/tracks/?album=<albumid>``." +#~ msgstr "" + +#~ msgid "" +#~ "Support a --watch mode with " +#~ "``import_files`` to automatically add, update" +#~ " and remove files when filesystem is" +#~ " updated (#721)" +#~ msgstr "" + +#~ msgid "" +#~ "Fixed mimetype detection issue that " +#~ "broke transcoding on some tracks " +#~ "(#1093). Run ``python manage.py fix_uploads" +#~ " --mimetype`` to set proper mimetypes " +#~ "on existing uploads." +#~ msgstr "" + +#~ msgid "" +#~ "We plan to remove the old engine" +#~ " in an upcoming release. In the " +#~ "meantime, if anything goes wrong, you" +#~ " can switch back by setting " +#~ "``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` " +#~ "file." +#~ msgstr "" + +#~ msgid "" +#~ "The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE``" +#~ " setting can be used to make " +#~ "email verification mandatory for your " +#~ "users. It defaults to ``false``, and " +#~ "doesn't apply to superuser accounts " +#~ "created through the CLI." +#~ msgstr "" + +#~ msgid "" +#~ "If you use the ``import_files`` command," +#~ " this means you should replace " +#~ "scripts that look like this::" +#~ msgstr "" + +#~ msgid "By this::" +#~ msgstr "" + +#~ msgid "" +#~ "All user-related commands are available" +#~ " under the ``python manage.py fw " +#~ "users`` namespace. Please refer to the" +#~ " `Admin documentation " +#~ "<https://docs.funkwhale.audio/admin/commands.html#user-" +#~ "management>`_ for more information and " +#~ "instructions." +#~ msgstr "" + +#~ msgid "" +#~ "Progressive web app [Manual action " +#~ "sugFull list of changes " +#~ "^^^^^^^^^^^^^^^^^^^^gested, non-docker only] " +#~ "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" +#~ msgstr "" + +#~ msgid "" +#~ "In order to fully benefit from " +#~ "this change, if your pod isn't " +#~ "deployed using Docker, ensure the " +#~ "following instruction is present in your" +#~ " nginx configuration::" +#~ msgstr "" + +#~ msgid "" +#~ "You need to add this to your " +#~ ".env file: ``POSTGRES_HOST_AUTH_METHOD=trust``" +#~ msgstr "" + +#~ msgid "" +#~ "With our upgrade to Alpine 3.10, " +#~ "the ``funkwhale/all-in-one`` image now" +#~ " includes PostgreSQL 11." +#~ msgstr "" + +#~ msgid "" +#~ "In order to update to Funkwhale " +#~ "0.21, you will first need to " +#~ "upgrade Funkwhale's PostgreSQL database, " +#~ "following the steps below::" +#~ msgstr "" + +#~ msgid "" +#~ "Once you have completed the Funkwhale" +#~ " upgrade with our regular instructions " +#~ "and everything works properly, you can" +#~ " remove the backups/old files::" +#~ msgstr "" + +#~ msgid "" +#~ "Make media and static files serving " +#~ "more reliable when reverse proxy " +#~ "X_FORWARDED_* headers are incorrect (#947)" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to try it now, " +#~ "add ``MUSIC_USE_DENORMALIZATION=True`` to your " +#~ "``.env`` file, restart Funkwhale, and " +#~ "run the following command::" +#~ msgstr "" + +#~ msgid "" +#~ "Starting with Funkwhale 0.20, Funkwhale " +#~ "will automatically extract genre information" +#~ " from uploaded files and associate it" +#~ " with the corresponding tracks in the" +#~ " form of tags (similar to Mastodon" +#~ " or Twitter hashtags). Please refer " +#~ "to `our tagging documentation " +#~ "<https://docs.funkwhale.audio/users/upload.html#tagging-files>`_" +#~ " for more information regarding the " +#~ "tagging process." +#~ msgstr "" + +#~ msgid "" +#~ "If you are a pod admin and " +#~ "want to extract tags from already " +#~ "uploaded content, you run `this snippet" +#~ " <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__" +#~ " and `this snippet " +#~ "<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ " +#~ "in a ``python manage.py shell``." +#~ msgstr "" + +#~ msgid "" +#~ "`User documentation " +#~ "<https://docs.funkwhale.audio/moderator/reports.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "`Moderator documentation " +#~ "<https://docs.funkwhale.audio/users/reports.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "`User documentation " +#~ "<https://docs.funkwhale.audio/users/account.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "We recommend taking a few moments " +#~ "to fill these accordingly to your " +#~ "needs, by visiting ``/manage/settings``." +#~ msgstr "" + +#~ msgid "" +#~ "If you want to enable this feature" +#~ " on your pod, or learn more, " +#~ "please refer to `our documentation " +#~ "<https://docs.funkwhale.audio/moderator/listing.html>`_!" +#~ msgstr "" + +#~ msgid "" +#~ "To benefit from this enhancement on " +#~ "existing instances, you need to add " +#~ "``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` " +#~ "file (use a higher number if you" +#~ " want to have more web worker " +#~ "processes)." +#~ msgstr "" + +#~ msgid "" +#~ "Then, edit your ``/etc/systemd/system/funkwhale-" +#~ "server.service`` and replace the " +#~ "``ExecStart=`` line with " +#~ "``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn " +#~ "config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} " +#~ "-k uvicorn.workers.UvicornWorker -b " +#~ "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}``" +#~ msgstr "" + +#~ msgid "" +#~ "Then reload the configuration change " +#~ "with ``sudo systemctl daemon-reload`` " +#~ "and ``sudo systemctl restart funkwhale-" +#~ "server``." +#~ msgstr "" + +#~ msgid "..note::" +#~ msgstr "" + +#~ msgid "" +#~ "**On non-docker setups**, in " +#~ "``/etc/nginx/sites-available/funkwhale.conf``::" +#~ msgstr "" + +#~ msgid "Then reload nginx with ``systemctl reload nginx``." +#~ msgstr "" + +#~ msgid "**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``::" +#~ msgstr "" + +#~ msgid "Then reload nginx with ``docker-compose restart nginx``." +#~ msgstr "" + +#~ msgid "" +#~ "You can disable the rate-limiting " +#~ "feature by adding `THROTTLING_ENABLED=false` " +#~ "to your ``.env`` file and restarting " +#~ "the services. If you are using the" +#~ " Funkwhale API in your project or " +#~ "app and want to know more about" +#~ " the limits, please consult " +#~ "https://docs.funkwhale.audio/swagger/." +#~ msgstr "" + +#~ msgid "" +#~ "Some Subsonic clients, such as DSub, " +#~ "are sending an Authorization headers " +#~ "which was forwarded to the S3 " +#~ "storage when streaming, causing some " +#~ "issues. If you are using S3 or " +#~ "a compatible storage such as Minio, " +#~ "please add the following in your " +#~ "nginx ``~ /_protected/media/(.+)`` location::" +#~ msgstr "" + +#~ msgid "" +#~ "To help with that, we now offer" +#~ " a ``prune_library`` management command you" +#~ " can run to purge your database " +#~ "from obsolete entries. `Please refer to" +#~ " our documentation for usage instructions" +#~ " <https://docs.funkwhale.audio/admin/commands.html#pruning-" +#~ "library>`__." +#~ msgstr "" + +#~ msgid "" +#~ "To help with that, we now offer" +#~ " a ``check_inplace_files`` management command " +#~ "you can run to purge your database" +#~ " from obsolete files. `Please refer " +#~ "to our documentation for usage " +#~ "instructions <https://docs.funkwhale.audio/admin/commands.html" +#~ "#remove-obsolete-files-from-database>`__." +#~ msgstr "" + +#~ msgid "" +#~ "Added twitter:* meta tags to detect " +#~ "tracks and albums players automatically " +#~ "on more sites (#578) Improved " +#~ "responsiveness of embedded player" +#~ msgstr "" + +#~ msgid "" +#~ "*You are only concerned if you use" +#~ " the mono-container docker deployment " +#~ "behind a reverse proxy*" +#~ msgstr "" + +#~ msgid "" +#~ "Because of `an issue in our " +#~ "mono-container configuration " +#~ "<https://github.com/thetarkus/docker-funkwhale/issues/19>`_, " +#~ "users deploying Funkwhale via docker " +#~ "using our `funkwhale/all-in-one` image" +#~ " could face some mixed content " +#~ "warnings (and possibly other troubles) " +#~ "when browsing the Web UI." +#~ msgstr "" + +#~ msgid "" +#~ "This is fixed in this release, but" +#~ " on existing deployments, you'll need " +#~ "to add ``NESTED_PROXY=1`` in your " +#~ "container environment (either in your " +#~ "``.env`` file, or via your container " +#~ "management tool), then recreate your " +#~ "funkwhale container." +#~ msgstr "" + +#~ msgid "" +#~ "We've removed the risky content-types" +#~ " from our nginx template files, to" +#~ " ensure new instances are safe, " +#~ "however, if you already have an " +#~ "instance, you need to double check " +#~ "that your host nginx virtualhost do " +#~ "not include the following values for " +#~ "the ``gzip_types`` settings::" +#~ msgstr "" + +#~ msgid "" +#~ "For convenience, you can also replace" +#~ " the whole setting with the following" +#~ " snippet::" +#~ msgstr "" + +#~ msgid "" +#~ "If you are on an Apache setup, " +#~ "you will have to replace the " +#~ "`<Location \"/api\">` block with the " +#~ "following::" +#~ msgstr "" + +#~ msgid "" +#~ "And add some more `ProxyPass` directives" +#~ " so that the `Alias` part of " +#~ "your configuration file looks this way::" +#~ msgstr "" + +#~ msgid "" +#~ "In case you are using custom css" +#~ " and theming, you also need to " +#~ "match this block::" +#~ msgstr "" + +#~ msgid "" +#~ "Upgrade instructions are available at " +#~ "https://docs.funkwhale.audio/admin/upgrading.html, ensure " +#~ "you also execute the instructions marked" +#~ " with ``[manual action required]`` and " +#~ "``[manual action suggested]``." +#~ msgstr "" + +#~ msgid "See ``Full changelog`` below for an exhaustive list of changes!" +#~ msgstr "" + +#~ msgid "" +#~ "License matching is done on the " +#~ "content of the ``License`` tag in " +#~ "the files, with a fallback on the" +#~ " ``Copyright`` tag." +#~ msgstr "" + +#~ msgid "" +#~ "**On docker setups**, edit your " +#~ "``/srv/funkwhale/nginx/funkwhale.template`` and replace" +#~ " the ``location /api/`` and `location " +#~ "/` blocks by the following snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "**On non-docker setups**, edit your " +#~ "``/etc/nginx/sites-available/funkwhale.conf`` file, " +#~ "and replace the ``location /api/`` and" +#~ " `location /` blocks by the following" +#~ " snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the " +#~ "corresponding variable from your .env " +#~ "file, which should be " +#~ "``/srv/funkwhale/front/dist`` by default, then " +#~ "reload your nginx process with ``sudo" +#~ " systemctl reload nginx``." +#~ msgstr "" + +#~ msgid "" +#~ "On non-docker deployments, earlier " +#~ "versions required you to source the " +#~ "config/.env file before launching any " +#~ "Funkwhale command, with ``export $(cat " +#~ "config/.env | grep -v ^# | " +#~ "xargs)`` This led to more complex " +#~ "and error prone deployment / setup." +#~ msgstr "" + +#~ msgid "On docker setups::" +#~ msgstr "" + +#~ msgid "On non-docker setups::" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to benefit from gzip" +#~ " compression on your instance, edit " +#~ "your reverse proxy virtualhost file " +#~ "(located at ``/etc/nginx/sites-" +#~ "available/funkwhale.conf``) and add the " +#~ "following snippet in the server block," +#~ " then reload your nginx server::" +#~ msgstr "" + +#~ msgid "First, tweak your .env file::" +#~ msgstr "" + +#~ msgid "" +#~ "Then, add the following block at " +#~ "the end of your docker-compose.yml " +#~ "file::" +#~ msgstr "" + +#~ msgid "" +#~ "Update the funkwhale.conf configuration of " +#~ "your server's reverse-proxy::" +#~ msgstr "" + +#~ msgid "sudo nginx -t sudo systemctl reload nginx" +#~ msgstr "" + +#~ msgid "On Apache2 setups, you have to replace the following line::" +#~ msgstr "" + +#~ msgid "with::" +#~ msgstr "" + +#~ msgid "You can now restart your server::" +#~ msgstr "" + +#~ msgid "" +#~ "``hello world``: search for \"hello\" " +#~ "and \"world\" in all the available " +#~ "fields" +#~ msgstr "" + +#~ msgid "``hello in:artist`` search for results where artist name is \"hello\"" +#~ msgstr "" + +#~ msgid "" +#~ "``spring in:artist,album`` search for results" +#~ " where artist name or album title " +#~ "contain \"spring\"" +#~ msgstr "" + +#~ msgid "``artist:hello`` search for results where artist name equals \"hello\"" +#~ msgstr "" + +#~ msgid "" +#~ "``artist:\"System of a Down\" " +#~ "domain:instance.funkwhale`` search for results " +#~ "where artist name equals \"System of " +#~ "a Down\" and inside \"instance.funkwhale\" " +#~ "library" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure MEDIA_ROOT, STATIC_ROOT and " +#~ "MUSIC_DIRECTORY_* are set explicitly [Manual" +#~ " action required]" +#~ msgstr "" + +#~ msgid "" +#~ "This will only affect new deployments" +#~ " though. If you want to benefit " +#~ "from this on an existing instance, " +#~ "do a backup of your ``.env`` and" +#~ " ``docker-compose.yml`` files and apply " +#~ "the following changes:" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure ``MEDIA_ROOT`` is uncommented in " +#~ "your .env file and match the " +#~ "absolute path where media files are " +#~ "stored on your host " +#~ "(``/srv/funkwhale/data/media`` by default)" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure ``STATIC_ROOT`` is uncommented in " +#~ "your .env file and match the " +#~ "absolute path where static files are " +#~ "stored on your host " +#~ "(``/srv/funkwhale/data/static`` by default)" +#~ msgstr "" + +#~ msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented " +#~ "and set to the absolute path on" +#~ " your host were your music files " +#~ "are stored (``/srv/funkwhale/data/music`` by " +#~ "default)" +#~ msgstr "" + +#~ msgid "" +#~ "Search for volumes (there should be " +#~ "two occurrences) that contains " +#~ "``/app/funkwhale_api/media`` on the right " +#~ "side, and replace the whole line " +#~ "with ``- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"``" +#~ msgstr "" + +#~ msgid "" +#~ "Search for a volume that contains " +#~ "``/app/staticfiles`` on the right side, " +#~ "and replace the whole line with " +#~ "``- \"${STATIC_ROOT}:${STATIC_ROOT}\"``" +#~ msgstr "" + +#~ msgid "" +#~ "If you use in-place import, search" +#~ " for volumes (there should be two " +#~ "occurrences) that contains ``/music:ro`` on" +#~ " the right side, and replace the " +#~ "whole line with ``- " +#~ "\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"``" +#~ msgstr "" + +#~ msgid "" +#~ "In the end, the ``volumes`` directives" +#~ " of your containers should look like" +#~ " that::" +#~ msgstr "" + +#~ msgid "" +#~ "You can safely remove this dependency" +#~ " in your environment with ``pip " +#~ "uninstall django-cacheops`` if you're " +#~ "not using docker." +#~ msgstr "" + +#~ msgid "" +#~ "You can also safely remove any " +#~ "``CACHEOPS_ENABLED`` setting from your " +#~ "environment file." +#~ msgstr "" + +#~ msgid "" +#~ "Up until now, our Apache2 configuration" +#~ " was not working with websockets. " +#~ "This is now solved by adding this" +#~ " at the beginning of your Apache2 " +#~ "configuration file::" +#~ msgstr "" + +#~ msgid "And this, before the \"/api\" block::" +#~ msgstr "" + +#~ msgid "Here is how to modify your `funkwhale.conf` apache2 configuration::" +#~ msgstr "" + +#~ msgid "You may sometimes get the following warning while applying migrations::" +#~ msgstr "" + +#~ msgid "" +#~ "This is a warning, not an error," +#~ " and it can be safely ignored. " +#~ "Never run the ``makemigrations`` command " +#~ "yourself." +#~ msgstr "" + +#~ msgid "" +#~ "Added warning about _protected/music location" +#~ " in nginx configuration (#247)" +#~ msgstr "" + +#~ msgid "" +#~ "You don't have to do anything on" +#~ " your side, but you may want to" +#~ " remove the now obsolete configuration " +#~ "from your reverse proxy file (nginx " +#~ "only)::" +#~ msgstr "" + +#~ msgid "Upgrade instructions are available at" +#~ msgstr "" + +#~ msgid "https://docs.funkwhale.audio/upgrading.html" +#~ msgstr "" + +#~ msgid "Then launch it::" +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/artists`` does not includes a " +#~ "list of tracks anymore. It was to" +#~ " heavy to return all of this " +#~ "data all the time. You can get " +#~ "all tracks for an artist using " +#~ "``/api/v1/tracks?artist=artist_id``" +#~ msgstr "" + +#~ msgid "" +#~ "Additionally, ``/api/v1/tracks`` now support " +#~ "an ``album`` filter to filter tracks " +#~ "matching an album" +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/artists/search``, ``/api/v1/albums/search`` and" +#~ " ``/api/v1/tracks/search`` endpoints are removed." +#~ " Use ``/api/v1/{artists|albums|tracks}/?q=yourquery`` " +#~ "instead. It's also more powerful, since" +#~ " you can combine search with other" +#~ " filters and ordering options." +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/requests/import-requests/search`` endpoint " +#~ "is removed as well. Use " +#~ "``/api/v1/requests/import-requests/?q=yourquery`` instead." +#~ " It's also more powerful, since you" +#~ " can combine search with other " +#~ "filters and ordering options." +#~ msgstr "" + +#~ msgid "" +#~ "You have nothing to do to benefit" +#~ " from this, however, since Flac files" +#~ " tend to be a lot bigger than" +#~ " other files, you may want to " +#~ "increase the ``client_max_body_size`` value in" +#~ " your Nginx configuration if you plan" +#~ " to upload flac files." +#~ msgstr "" + +#~ msgid "Nginx::" +#~ msgstr "" + +#~ msgid "Apache2::" +#~ msgstr "" + +#~ msgid "" +#~ "This interface is available at " +#~ "``/manage/settings`` and via link in the" +#~ " sidebar." +#~ msgstr "" + +#~ msgid "" +#~ "There is still no dedicated interface" +#~ " to manage user permissions, but you" +#~ " can use the admin interface at " +#~ "``/api/admin/users/user/`` for that purpose in" +#~ " the meantime." +#~ msgstr "" + +#~ msgid "" +#~ "Please see `our list of supported " +#~ "apps <https://funkwhale.audio/en_US/apps>`_ for more" +#~ " information about supported clients and" +#~ " user instructions." +#~ msgstr "" + +#~ msgid "On nginx, add the following block::" +#~ msgstr "" + +#~ msgid "On Apache, add the following block::" +#~ msgstr "" + +#~ msgid "" +#~ "To make your instance fully compatible" +#~ " with the nodeinfo protocol, you need" +#~ " to to edit your nginx configuration" +#~ " file::" +#~ msgstr "" + +#~ msgid "You can do the same if you use apache::" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to actually send those" +#~ " emails to your users, you should " +#~ "edit your .env file and tweak the" +#~ " ``EMAIL_CONFIG`` variable. See " +#~ ":data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` " +#~ "for more details." +#~ msgstr "" + +#~ msgid "" +#~ "For non-docker deployments, add " +#~ "``--proxy-headers`` at the end of the" +#~ " ``daphne`` command in :file:`/etc/systemd/system" +#~ "/funkwhale-server.service`." +#~ msgstr "" + +#~ msgid "" +#~ "`This new feature is documented here " +#~ "<https://docs.funkwhale.audio/importing-music.html#in-" +#~ "place-import>`_ and require additional " +#~ "configuration to ensure funkwhale and " +#~ "your webserver can serve those files " +#~ "properly." +#~ msgstr "" + +#~ msgid "" +#~ "Assuming your music is stored in " +#~ "``/srv/funkwhale/data/music``, add the following " +#~ "block to your nginx configuration::" +#~ msgstr "" + +#~ msgid "And the following to your .env file::" +#~ msgstr "" + +#~ msgid "" +#~ "Assuming you have the following volume" +#~ " directive in your ``docker-compose.yml``" +#~ " (it's the default): " +#~ "``/srv/funkwhale/data/music:/music:ro``, then add " +#~ "the following to your .env file::" +#~ msgstr "" + +#~ msgid "Celery beat can be enabled easily::" +#~ msgstr "" + +#~ msgid "" +#~ "For these endpoints to work, you " +#~ "will need to update your nginx " +#~ "configuration, and add the following " +#~ "snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "A new ``FEDERATION_ENABLED`` env var " +#~ "have also been added to control " +#~ "whether federation is enabled or not " +#~ "on the application side. This settings" +#~ " defaults to True, which should have" +#~ " no consequences at the moment, since" +#~ " actual federation is not implemented " +#~ "and the only available endpoints are " +#~ "for testing purposes." +#~ msgstr "" + +#~ msgid "" +#~ "Add ``FEDERATION_ENABLED=false`` to your .env" +#~ " file to disable federation on the" +#~ " application side." +#~ msgstr "" + +#~ msgid "" +#~ "On non docker setups, you'll have " +#~ "to update the [Service] block of " +#~ "your funkwhale-server systemd unit file" +#~ " to launch the application server " +#~ "using daphne instead of gunicorn." +#~ msgstr "" + +#~ msgid "*This is still an alpha feature at the moment, please report any bug.*" +#~ msgstr "" + +#~ msgid "" +#~ "Shortcuts: can now use the ``f`` " +#~ "shortcut to toggle the currently playing" +#~ " track as a favorite (#53)" +#~ msgstr "" + diff --git a/docs/locales/en_US/LC_MESSAGES/developer/workflows/release.po b/docs/locales/en_US/LC_MESSAGES/developer/workflows/release.po index 3787df5b8..88249b7f7 100644 --- a/docs/locales/en_US/LC_MESSAGES/developer/workflows/release.po +++ b/docs/locales/en_US/LC_MESSAGES/developer/workflows/release.po @@ -8,80 +8,83 @@ msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:05+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" -#: ../../developer_documentation/workflows/release.md:1 +#: ../../developer/workflows/release.md:1 msgid "Make a release" msgstr "" -#: ../../developer_documentation/workflows/release.md:3 +#: ../../developer/workflows/release.md:3 msgid "" "Once we're ready to release a new version of the software, we can use the" " following process:" msgstr "" -#: ../../developer_documentation/workflows/release.md:5 +#: ../../developer/workflows/release.md:5 msgid "Export the new release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:11 +#: ../../developer/workflows/release.md:11 msgid "Export the previous release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:17 +#: ../../developer/workflows/release.md:17 msgid "" "Pull the latest version of the `develop` branch. Use `stable` if you're " "releasing a bugfix." msgstr "" -#: ../../developer_documentation/workflows/release.md +#: ../../developer/workflows/release.md msgid "Bugfix release" msgstr "" -#: ../../developer_documentation/workflows/release.md +#: ../../developer/workflows/release.md msgid "Feature release" msgstr "" -#: ../../developer_documentation/workflows/release.md:43 +#: ../../developer/workflows/release.md:43 msgid "Compile the changelog" msgstr "" -#: ../../developer_documentation/workflows/release.md:49 +#: ../../developer/workflows/release.md:49 msgid "Check the output and fix typos and mistakes" msgstr "" -#: ../../developer_documentation/workflows/release.md:50 +#: ../../developer/workflows/release.md:50 msgid "Add a list of contributors" msgstr "" -#: ../../developer_documentation/workflows/release.md:58 -msgid "Update the `__version__` variable to the next release version" +#: ../../developer/workflows/release.md:58 +msgid "Update the next release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:64 +#: ../../developer/workflows/release.md:66 msgid "Commit all changes" msgstr "" -#: ../../developer_documentation/workflows/release.md:71 +#: ../../developer/workflows/release.md:73 msgid "Create a tag" msgstr "" -#: ../../developer_documentation/workflows/release.md:77 +#: ../../developer/workflows/release.md:79 msgid "Publish the new tag to GitLab" msgstr "" -#: ../../developer_documentation/workflows/release.md:83 +#: ../../developer/workflows/release.md:85 msgid "Merge your changes into the alternate branch" msgstr "" -#: ../../developer_documentation/workflows/release.md:107 +#: ../../developer/workflows/release.md:109 msgid "Don't forget to create a blog post to announce the new release!" msgstr "" +#~ msgid "Update the `__version__` variable to the next release version" +#~ msgstr "" + diff --git a/docs/locales/en_US/LC_MESSAGES/user/libraries/content/tag.po b/docs/locales/en_US/LC_MESSAGES/user/libraries/content/tag.po index 519bdf44f..80e3a7d7b 100644 --- a/docs/locales/en_US/LC_MESSAGES/user/libraries/content/tag.po +++ b/docs/locales/en_US/LC_MESSAGES/user/libraries/content/tag.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" #: ../../user/libraries/content/tag.md:1 msgid "Tag your content with Picard" @@ -23,9 +23,10 @@ msgstr "" #: ../../user/libraries/content/tag.md:3 msgid "" -"Funkwhale relies on [ID3 tags](https://id3.org/) to sort audio content. " -"ID3 tags tell Funkwhale information about your files. Funkwhale uses this" -" information to display your content in your {term}`pod`." +"Funkwhale relies on [ID3 tags](https://wikipedia.org/wiki/ID3) to sort " +"audio content. ID3 tags tell Funkwhale information about your files. " +"Funkwhale uses this information to display your content in your " +"{term}`pod`." msgstr "" #: ../../user/libraries/content/tag.md:5 @@ -356,3 +357,12 @@ msgstr "" #~ " these to a library](upload_content.md)" #~ msgstr "" +#~ msgid "" +#~ "Funkwhale relies on [ID3 " +#~ "tags](https://id3.org/) to sort audio content." +#~ " ID3 tags tell Funkwhale information " +#~ "about your files. Funkwhale uses this" +#~ " information to display your content " +#~ "in your {term}`pod`." +#~ msgstr "" + diff --git a/docs/locales/es/LC_MESSAGES/user/libraries/follow.po b/docs/locales/es/LC_MESSAGES/user/libraries/follow.po new file mode 100644 index 000000000..44bab2d1d --- /dev/null +++ b/docs/locales/es/LC_MESSAGES/user/libraries/follow.po @@ -0,0 +1,139 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.10\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" +"PO-Revision-Date: 2023-08-24 15:32+0000\n" +"Last-Translator: MhP <martin.hpg@protonmail.ch>\n" +"Language-Team: Spanish <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-follow/es/>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#: ../../user/libraries/follow.md:1 +msgid "Follow a library" +msgstr "Sigue una librería" + +#: ../../user/libraries/follow.md:3 +msgid "Follow a library to get access to its content. There are two ways to follow a library:" +msgstr "" +"Sigue una librería para acceder a su contenido. Hay dos formas de seguir una " +"librería:" + +#: ../../user/libraries/follow.md:9 +msgid "Use a sharing link" +msgstr "Usa un enlace para compartir" + +#: ../../user/libraries/follow.md:11 +msgid "If you've received a sharing link, you can use this to follow a library. To do this:" +msgstr "" +"Si has recibido un enlace para compartir, puedes usarlo para seguir una " +"librería. Para esto:" + +#: ../../user/libraries/follow.md:0 +msgid "Desktop" +msgstr "Escritorio" + +#: ../../user/libraries/follow.md:19 +#: ../../user/libraries/follow.md:31 +#: ../../user/libraries/follow.md:50 +msgid "Log in to your pod." +msgstr "Inicia la sesión en tu pod." + +#: ../../user/libraries/follow.md:20 +msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." +msgstr "" +"Selecciona el ícono de subir ({fa}`upload`) en la parte superior de la barra " +"lateral." + +#: ../../user/libraries/follow.md:21 +#: ../../user/libraries/follow.md:33 +msgid "Select {guilabel}`Get started` under {guilabel}`Follow remote libraries`. A screen appears showing you the libraries you are following." +msgstr "" +"Selecciona {guilabel}`Inicia` bajo {guilabel}`Sigue librerías remotas`. " +"Aparecerá una pantalla mostrando las librerías que estás siguiendo." + +#: ../../user/libraries/follow.md:22 +#: ../../user/libraries/follow.md:34 +msgid "Paste the sharing link into the {guilabel}`Search a remote library` search bar." +msgstr "" +"Pega el enlace para compartir en la barra de búsqueda {guilabel}`Busca una " +"librería remota`." + +#: ../../user/libraries/follow.md:23 +#: ../../user/libraries/follow.md:35 +msgid "Select the {guilabel}`Search` icon or hit {kbd}`⏎ Return` to search for the library. If the library exists, a library card appears." +msgstr "" +"Selecciona el ícono {guilabel}`Busca` o dale a {kbd}`⏎ Regresar` para buscar " +"la librería. Si la librería existe, aparecerá una tarjeta." + +#: ../../user/libraries/follow.md:24 +#: ../../user/libraries/follow.md:36 +msgid "Select {guilabel}`Follow` on the library card. If the library's privacy level is {guilabel}`Nobody except me`, the owner needs to approve the request." +msgstr "" +"Selecciona {guilabel}`Seguir` en la tarjeta de la librería. Si la privacidad " +"de la librería es {guilabel}`Nadie excepto yo`, necesitarás que el dueño " +"apruebe la solicitud." + +#: ../../user/libraries/follow.md:0 +msgid "Mobile" +msgstr "Móvil" + +#: ../../user/libraries/follow.md:32 +msgid "Select the upload icon ({fa}`upload`) at the top of the screen" +msgstr "" +"Selecciona el ícono de subir ({fa}`upload`) en la parte superior de la " +"pantalla" + +#: ../../user/libraries/follow.md:40 +msgid "That's it! The server then scans the content and you can see it on your {term}`pod`." +msgstr "" +"¡Y listo! Entonces, el servidor escaneará el contenido y podrás verlo en tu " +"{term}`pod`." + +#: ../../user/libraries/follow.md:42 +msgid "Follow from content on your pod" +msgstr "Seguir desde el contenido en tu pod" + +#: ../../user/libraries/follow.md:45 +msgid "You can only follow a library from content pages if its privacy level is not {guilabel}`Nobody except me`." +msgstr "" +"Solamente puedes seguir una librería desde las páginas de contenido si su " +"privacidad no es {guilabel}`Nadie excepto yo`." + +#: ../../user/libraries/follow.md:48 +msgid "If a user on your {term}`pod` has already followed a library, you can find it by selecting content from that library. To do this:" +msgstr "" +"Si un usuario en tu {term}`pod` ya sigue una librería, puedes encontrarla " +"seleccionando contenido de esa librería. Para esto:" + +#: ../../user/libraries/follow.md:51 +msgid "Select a track, album, or artist from the library you want to follow." +msgstr "" +"Selecciona una pista, un álbum o un(a) artista de la librería que deseas " +"seguir." + +#: ../../user/libraries/follow.md:52 +msgid "Scroll to the bottom of the page. The library card appears in the {guilabel}`User libraries` section." +msgstr "" +"Ve hasta el final de la página. La tarjeta de la librería aparecerá en la " +"sección {guilabel}`Librerías de usuario`." + +#: ../../user/libraries/follow.md:53 +msgid "Select {guilabel}`Follow` on the library card." +msgstr "Selecciona {guilabel}`Seguir` en la tarjeta de la librería." + +#: ../../user/libraries/follow.md:55 +msgid "You're done! The content will remain on the server even if the other user stops following the library." +msgstr "" +"¡Listo! El contenido permanecerá en el servidor incluso si el otro usuario " +"deja de seguir esa librería." diff --git a/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po b/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po index 867a36734..c2ead6351 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po @@ -3,39 +3,42 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-configuration-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Environment file" -msgstr "" +msgstr "Fichier d’environnement" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Instance settings" -msgstr "" +msgstr "Paramètres de l’instance" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Frontend customization" -msgstr "" +msgstr "Personnalisation de l’interface" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Configuration options" -msgstr "" +msgstr "Options de configuration" #: ../../administrator_documentation/configuration_docs/index.md:1 msgid "Configure your Funkwhale pod" -msgstr "" +msgstr "Configurez votre pod Funkwhale" #: ../../administrator_documentation/configuration_docs/index.md:3 msgid "" @@ -43,4 +46,7 @@ msgid "" " range from server-level settings to user-specific settings. Check out " "the guides in this section to get started." msgstr "" - +"Vous pouvez personnaliser de nombreux paramètres relatifs à votre pod " +"Funkwhale. Ceux-ci vont des paramètres au niveau du serveur aux paramètres " +"spécifiques à l'utilisateur. Consultez les guides de cette section pour " +"commencer." diff --git a/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po b/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po index d4f605bb9..84376b1ee 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-configuration-ldap/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/configuration_docs/ldap.md:1 msgid "Configure LDAP" -msgstr "" +msgstr "Configurer LDAP" #: ../../administrator_documentation/configuration_docs/ldap.md:3 msgid "" @@ -28,14 +31,21 @@ msgid "" "login information. Funkwhale supports LDAP through the [Django LDAP " "authentication module](https://django-auth-ldap.readthedocs.io/)." msgstr "" +"{abbr}`LDAP (Lightweight Directory Access Protocol)` est un protocol pour " +"fournir des services d’annuaire. Il agit comme autorité centrale pour les " +"informations de connexion des utilisateurs. Funkwhale prend en charge le " +"protocole LDAP grâce au [module Django d’authentification LDAP](https" +"://django-auth-ldap.readthedocs.io/)." #: ../../administrator_documentation/configuration_docs/ldap.md:6 msgid "LDAP users can't change their password in the app." msgstr "" +"Les utilisateurs LDAP ne peuvent pas charger leur mot de passe dans " +"l’application." #: ../../administrator_documentation/configuration_docs/ldap.md:9 msgid "Dependencies" -msgstr "" +msgstr "Dépendances" #: ../../administrator_documentation/configuration_docs/ldap.md:11 msgid "" @@ -43,64 +53,75 @@ msgid "" "requirements files to make it easier to set up. If you aren't using LDAP," " you can safely remove these." msgstr "" +"Le support LDAP demande des dépendances supplémentaires. Nous les incluons " +"dans nos fichiers d’exigence pour en simplifier l’installation. Si vous n’" +"utilisiez pas LDAP, vous pouvez les supprimer en toute sécurité." #: ../../administrator_documentation/configuration_docs/ldap.md msgid "OS dependencies" -msgstr "" +msgstr "Dépendances système" #: ../../administrator_documentation/configuration_docs/ldap.md:15 msgid "`libldap2-dev`" -msgstr "" +msgstr "`libldap2-dev`" #: ../../administrator_documentation/configuration_docs/ldap.md:16 msgid "`libsasl2-dev`" -msgstr "" +msgstr "`libsasl2-dev`" #: ../../administrator_documentation/configuration_docs/ldap.md msgid "Python dependencies" -msgstr "" +msgstr "Dépendances Python" #: ../../administrator_documentation/configuration_docs/ldap.md:22 msgid "`python-ldap`" -msgstr "" +msgstr "`python-ldap`" #: ../../administrator_documentation/configuration_docs/ldap.md:23 msgid "`python-django-auth-ldap`" -msgstr "" +msgstr "`python-django-auth-ldap`" #: ../../administrator_documentation/configuration_docs/ldap.md:27 msgid "Environment variables" -msgstr "" +msgstr "Variables d’environnement" #: ../../administrator_documentation/configuration_docs/ldap.md:29 msgid "" "You can configure LDAP authentication using environment variables in your" " `.env` file." msgstr "" +"Vous pouvez configurer l’authentification LDAP en utilisant les variables d’" +"environnement dans votre fichier `.env` ." #: ../../administrator_documentation/configuration_docs/ldap.md:31 msgid "Basic features" -msgstr "" +msgstr "Fonctionnalités de base" #: ../../administrator_documentation/configuration_docs/ldap.md:34 msgid "Set this to `True` to enable LDAP support" -msgstr "" +msgstr "Mettez ce paramètre à `True` pour activer le support LDAP" #: ../../administrator_documentation/configuration_docs/ldap.md:44 msgid "" "The LDAP {abbr}`URI (Uniform Resource Identifier)` of your authentication" " server." msgstr "" +"L’{abbr}`URI (Uniform Resource Identifier)` LDAP de votre serveur " +"d’authentification." #: ../../administrator_documentation/configuration_docs/ldap.md:53 msgid "" "LDAP user {abbr}`DN (Distinguished Name)` to bind on so you can perform " "searches." msgstr "" +"Les utilisateurs LDAP {abbr}`DN (Distinguished Name)` à lier pour pouvoir " +"effectuer des recherches." #: ../../administrator_documentation/configuration_docs/ldap.md:62 msgid "LDAP user password for bind {abbr}`DN (Distinguished Name)`." msgstr "" +"Les mots de passe des utilisateurs LDAP pour lier {abbr}`DN (Distinguished " +"Name)`." #: ../../administrator_documentation/configuration_docs/ldap.md:71 msgid "" @@ -109,28 +130,36 @@ msgid "" "syntax](https://social.technet.microsoft.com/wiki/contents/articles/5392" ".active-directory-ldap-syntax-filters.aspx)." msgstr "" +"Le filtre des utilisateurs LDAP, utilisant `{0}` comme non d’utilisateur. " +"Utilise le standard de la [syntaxe de recherche LDAP](https://social.technet." +"microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-" +"filters.aspx)." #: ../../administrator_documentation/configuration_docs/ldap.md:80 msgid "Set to `True` to enable LDAP StartTLS support." -msgstr "" +msgstr "Mettez le paramètre sur `True` pour activer le support LDAP StartTLS." #: ../../administrator_documentation/configuration_docs/ldap.md:89 msgid "" "The LDAP search root {abbr}`DN (Distinguished Name)`. Supports several " "entries in a comma-delimited list." msgstr "" +"La racine de recherche LDAP {abbr}`DN (Distinguished Name)`. Prend en charge " +"plusieurs entrées dans une liste délimitée par des virgules." #: ../../administrator_documentation/configuration_docs/ldap.md:98 msgid "A mapping of Django user attributes to LDAP values." msgstr "" +"Une correspondance entre les attributs de l'utilisateur Django et les " +"valeurs LDAP." #: ../../administrator_documentation/configuration_docs/ldap.md:107 msgid "Controls whether to use direct binding." -msgstr "" +msgstr "Contrôle s’il faut utiliser la liaison directe." #: ../../administrator_documentation/configuration_docs/ldap.md:115 msgid "Group features" -msgstr "" +msgstr "Fonctionnalités de groupe" #: ../../administrator_documentation/configuration_docs/ldap.md:117 msgid "" @@ -138,28 +167,36 @@ msgid "" " is an advanced feature. Most users don't need to configure these " "settings." msgstr "" +"Le protocole LDAP offre des fonctionnalités supplémentaires pour travailler " +"avec des groupes. La configuration des groupes est une fonctionnalité " +"avancée. La plupart des utilisateurs n'ont pas besoin de configurer ces " +"paramètres." #: ../../administrator_documentation/configuration_docs/ldap.md:120 msgid "" "[Django's LDAP documentation](https://django-auth-" "ldap.readthedocs.io/en/latest/groups.html) for groups." msgstr "" +"[La documentation LDAP d Django](https://django-auth-ldap.readthedocs.io/en/" +"latest/groups.html) pour les groupes." #: ../../administrator_documentation/configuration_docs/ldap.md:124 msgid "" "The LDAP group search root {abbr}`DN (Distinguished Name)`. This needs to" " be set to `True` to enable group features." msgstr "" +"La racine de recherche du groupe LDAP {abbr}`DN (Distinguished Name)`. Ce " +"paramètre doit être réglé sur `True` pour activer les fonctions de groupe." #: ../../administrator_documentation/configuration_docs/ldap.md:133 msgid "The LDAP group filter." -msgstr "" +msgstr "Le filtre de groupe de LDAP." #: ../../administrator_documentation/configuration_docs/ldap.md:142 msgid "The group that users need to be a member of to authenticate." msgstr "" +"Le groupe dont les utilisateurs doivent être membres pour s’authentifier." #: ../../administrator_documentation/configuration_docs/ldap.md:151 msgid "A group whose members can't authenticate." -msgstr "" - +msgstr "Un groupe dont les membres ne peuvent pas s’authentifier." diff --git a/docs/locales/fr/LC_MESSAGES/administrator/index.po b/docs/locales/fr/LC_MESSAGES/administrator/index.po index 9c6a81f69..84128b8e1 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/index.po @@ -3,31 +3,36 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/index.md:1 msgid "Get started" -msgstr "" +msgstr "Commencer" #: ../../administrator/index.md:3 msgid "Follow the guides in this section to set up and administrate your pod." msgstr "" +"Suivez les guides dans cette section pour configurer et administrer votre " +"pod." #: ../../administrator/index.md:9 msgid "Install Funkwhale on your server" -msgstr "" +msgstr "Installer Funkwhale sur votre serveur" #: ../../administrator/index.md:11 msgid "" @@ -36,20 +41,26 @@ msgid "" "guides](installation/index.md). Choose the installation method that works" " for you!" msgstr "" +"Funkwhale est auto-hébergée, ce qui signifie que vous l’exécutez sur votre " +"propre serveur. Pour configurer votre propre pod Funkwhale, suivez [nos " +"guides d’installation](installation/index.md). Choisissez la méthode d’" +"installation qui fonctionne pour vous !" #: ../../administrator/index.md:13 msgid "Configure your Funkwhale pod" -msgstr "" +msgstr "Configurez votre pod Funkwhale" #: ../../administrator/index.md:15 msgid "" "Once you've installed Funkwhale, you can use [the guides in this " "section](configuration/index.md) to configure it." msgstr "" +"Une fois que vous avez installé Funkwhale, vous pouvez utiliser [les guides " +"dans cette section](configuration/index.md) pour le configurer." #: ../../administrator/index.md:17 msgid "Upgrade your Funkwhale pod" -msgstr "" +msgstr "Mettre à jour votre pod Funkwhale" #: ../../administrator/index.md:19 msgid "" @@ -58,10 +69,14 @@ msgid "" "moving from our deprecated mono-container Docker setup, check out our " "[migration guide](migration.md)." msgstr "" +"Funkwhale sort de nouvelles mises à jour régulièrement. Pour rester à jour " +"avec ces modifications, suivez nos [guides de mises à jour](upgrade/index.md)" +". Si vous venez de notre configuration dépréciée Docker mono-container, " +"suivez nos [guides de migration](migration.md)." #: ../../administrator/index.md:21 msgid "Manage your Funkwhale pod" -msgstr "" +msgstr "Gérer votre pod Funkwhale" #: ../../administrator/index.md:23 msgid "" @@ -72,6 +87,12 @@ msgid "" "dashboard](django/index.md) and our [management script](manage-" "script/index.md) to get started." msgstr "" +"Funkwhale fournir des outils pour gérer le contenu et les utilisateurs de " +"votre pod Funkwhale. En plus des [outils de modération de l’interface](../" +"moderator/index.md), les administrateurs de pod peuvent utiliser certains " +"outils supplémentaires pour une administration plus poussée. Suivez notre [" +"guide du tableau de bord de Django](django/index.md) et notre [script de " +"gestion](manage-script/index.md) pour commencer." #~ msgid "" #~ "Funkwhale is self-hosted, meaning you" @@ -110,4 +131,3 @@ msgstr "" #~ " dashboard](django/index.md) and our [management" #~ " script](manage_script/index.md) to get started." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/installation/debian.po b/docs/locales/fr/LC_MESSAGES/administrator/installation/debian.po index 0aa3fba99..d6fd27f4e 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/installation/debian.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/installation/debian.po @@ -3,47 +3,56 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-installation-debian/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/installation_docs/debian.md:1 msgid "Install Funkwhale on Debian" -msgstr "" +msgstr "Installer Funkwhale sur Debian" #: ../../administrator_documentation/installation_docs/debian.md:3 msgid "" "We support [Debian](https://debian.org) and Debian-based Linux " "distributions. Follow these steps to set up Funkwhale on a Debian server." msgstr "" +"Nous supportons [Debian](https://debian.org) et les distributions Linux " +"basées sur Debian. Suivez ces étapes pour configurer Funkwhale sur un " +"serveur Debian." #: ../../administrator_documentation/installation_docs/debian.md:10 msgid "Before you begin" -msgstr "" +msgstr "Avant de commencer" #: ../../administrator_documentation/installation_docs/debian.md:12 msgid "" "Set a `FUNKWHALE_VERSION` variable to the version you want to install. " "You will use this version for all commands in this guide." msgstr "" +"Configurez une variable `FUNKWHALE_VERSION`avec la version que vous désirez " +"installer. Vous allez utiliser cette version pour toutes les commandes dans " +"ce guide." #: ../../administrator_documentation/installation_docs/debian.md:18 msgid "Install `curl`" -msgstr "" +msgstr "Installez `curl`" #: ../../administrator_documentation/installation_docs/debian.md:25 msgid "1. Install Funkwhale dependencies" -msgstr "" +msgstr "1. Installez les dépendances de Funkwhale" #: ../../administrator_documentation/installation_docs/debian.md:27 msgid "" @@ -52,20 +61,28 @@ msgid "" "to install everything at once. You can pass the information from this " "file to `apt` using the following command:" msgstr "" +"Pour installer Funkwhale sur votre serveur, vous devez d’abord installer ses " +"dépendances. Nous fournissons toutes les dépendances dans un simple fichier " +"pour vous aider à tout installer d’un coup. Vous pouvez transmettre l’" +"information de ce fichier à `apt` en utilisant la commande suivante :" #: ../../administrator_documentation/installation_docs/debian.md:33 msgid "When prompted, hit {kbd}`y` to confirm the install." msgstr "" +"Lorsque vous y êtes invité, appuyez sur {kbd}`y` pour confirmer " +"l'installation." #: ../../administrator_documentation/installation_docs/debian.md:35 msgid "" "That's it! `apt` installs all dependencies and tells you once it has " "finished." msgstr "" +"C’est tout ! `apt` installe toutes les dépendances et vous informe lorsque c’" +"est terminé." #: ../../administrator_documentation/installation_docs/debian.md:37 msgid "2. Create a Funkwhale user" -msgstr "" +msgstr "2. Créer un utilisateur Funkwhale" #: ../../administrator_documentation/installation_docs/debian.md:39 msgid "" @@ -73,62 +90,75 @@ msgid "" "administration. Doing this makes it easy to make sure you're running " "commands from the right place. Follow these steps to set up your user." msgstr "" +"C’est une bonne pratique que de créer un utilisateur sur votre serveur pour " +"l’administration de Funkwhale. En faisant cela, il est plus facile de s’" +"assurer que vous exécutez une commande depuis la bonne place. Suivez les " +"étapes suivantes pour configurer votre utilisateur." #: ../../administrator_documentation/installation_docs/debian.md:41 msgid "" "Create the `funkwhale` user and set its shell to `bash` and its home " "directory to `/srv/funkwhale`." msgstr "" +"Créez l’utilisateur `funkwhale`et configurez son shell vers `bash`et son " +"répertoire maison vers `/srv/funkwhale`." #: ../../administrator_documentation/installation_docs/debian.md:48 msgid "" "To perform any tasks as the `funkwhale` user, prefix your commands with " "`sudo -u funkwhale`." msgstr "" +"Pour opérer n’importe quelle tâche avec l’utilisateur `funkwhale`, précédez " +"vos commandes avec `sudo -u funkwhale`." #: ../../administrator_documentation/installation_docs/debian.md:54 msgid "" "Or log in as `funkwhale` with `sudo su funkwhale` before running your " "commands." msgstr "" +"Ou connectez-vous comme `funkwhale` avec `sudo su funkwhale` avant d’" +"exécuter vos commandes." #: ../../administrator_documentation/installation_docs/debian.md:62 msgid "That's it! You've created your `funkwhale` user." -msgstr "" +msgstr "C’est tout ! Vous avez créé votre utilisateur `funkwhale`." #: ../../administrator_documentation/installation_docs/debian.md:64 msgid "3. Download Funkwhale" -msgstr "" +msgstr "3. Téléchargez Funkwhale" #: ../../administrator_documentation/installation_docs/debian.md:66 msgid "" "Once you've created your `funkwhale` user you can download the Funkwhale " "software itself." msgstr "" +"Une fois que vous avez créé votre utilisateur `funkwhale`, vous pouvez " +"télécharger le logiciel Funkwhale en lui-même." #: ../../administrator_documentation/installation_docs/debian.md:68 msgid "Create the directory layout" -msgstr "" +msgstr "Créez la structure du répertoire" #: ../../administrator_documentation/installation_docs/debian.md:70 msgid "Go to the `/srv/funkwhale` directory." -msgstr "" +msgstr "Allez dans le répertoire `/srv/funkwhale`." #: ../../administrator_documentation/installation_docs/debian.md:76 msgid "Create the directories for Funkwhale." -msgstr "" +msgstr "Créez les répertoires pour Funkwhale." #: ../../administrator_documentation/installation_docs/debian.md:82 msgid "Allow the Funkwhale user to write to the data directories." msgstr "" +"Permettez à l’utilisateur Funkwhale d’écrire dans les répertoires de données." #: ../../administrator_documentation/installation_docs/debian.md:88 msgid "That's it! Your directory structure should look like this:" -msgstr "" +msgstr "C’est tout ! La structure de votre répertoire doit ressembler à ceci :" #: ../../administrator_documentation/installation_docs/debian.md:101 msgid "Download the Funkwhale release" -msgstr "" +msgstr "Téléchargez la sortie de Funkwhale" #: ../../administrator_documentation/installation_docs/debian.md:103 msgid "" @@ -136,24 +166,29 @@ msgid "" "Funkwhale comes in two parts: the API and the Frontend. You need both to " "run the application." msgstr "" +"Une fois que vous avez créé la structure du répertoire, vous pouvez " +"télécharger Funkwhale. Funkwhale vient en deux parties : l’API et l’" +"interface (Frontend). Vous avez besoin des deux pour exécuter l’application." #: ../../administrator_documentation/installation_docs/debian.md:105 msgid "Download the API." -msgstr "" +msgstr "Téléchargez l’API." #: ../../administrator_documentation/installation_docs/debian.md:114 msgid "Download the frontend" -msgstr "" +msgstr "Téléchargez le frontend" #: ../../administrator_documentation/installation_docs/debian.md:123 msgid "" "You're done! These commands put the software in the correct location for " "Funkwhale to serve them." msgstr "" +"C’est tout ! Ces commandes placent le logiciel au bon endroit pour que " +"Funkwhale puisse l’utiliser." #: ../../administrator_documentation/installation_docs/debian.md:125 msgid "4. Install the Funkwhale API" -msgstr "" +msgstr "4. Installez l’API de Funkwhale" #: ../../administrator_documentation/installation_docs/debian.md:127 msgid "" @@ -429,4 +464,3 @@ msgid "" "That's it! certbot renews your certificate every 60 days, so you don't " "need to worry about renewing it." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po index 5ffef3f7c..3283a86b0 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-installation-docker/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/installation_docs/docker.md:1 @@ -36,13 +39,16 @@ msgstr "" #: ../../administrator_documentation/installation_docs/docker.md:13 msgid "Before you begin" -msgstr "" +msgstr "Avant de commencer" #: ../../administrator_documentation/installation_docs/docker.md:15 msgid "" "Set a `FUNKWHALE_VERSION` variable to the version you want to install. " "You will use this version for all commands in this guide." msgstr "" +"Configurez une variable `FUNKWHALE_VERSION`avec la version que vous désirez " +"installer. Vous allez utiliser cette version pour toutes les commandes dans " +"ce guide." #: ../../administrator_documentation/installation_docs/docker.md:21 msgid "" @@ -65,28 +71,38 @@ msgid "" "administration. Doing this makes it easy to make sure you're running " "commands from the right place. Follow these steps to set up your user." msgstr "" +"C’est une bonne pratique que de créer un utilisateur sur votre serveur pour " +"l’administration de Funkwhale. En faisant cela, il est plus facile de s’" +"assurer que vous exécutez une commande depuis la bonne place. Suivez les " +"étapes suivantes pour configurer votre utilisateur." #: ../../administrator_documentation/installation_docs/docker.md:33 msgid "" "Create the `funkwhale` user and set its shell to `bash` and its home " "directory to `/srv/funkwhale`." msgstr "" +"Créez l’utilisateur `funkwhale`et configurez son shell vers `bash`et son " +"répertoire maison vers `/srv/funkwhale`." #: ../../administrator_documentation/installation_docs/docker.md:40 msgid "" "To perform any tasks as the `funkwhale` user, prefix your commands with " "`sudo -u funkwhale`." msgstr "" +"Pour opérer n’importe quelle tâche avec l’utilisateur `funkwhale`, précédez " +"vos commandes avec `sudo -u funkwhale`." #: ../../administrator_documentation/installation_docs/docker.md:46 msgid "" "Or log in as `funkwhale` with `sudo su funkwhale` before running your " "commands." msgstr "" +"Ou connectez-vous comme `funkwhale` avec `sudo su funkwhale` avant d’" +"exécuter vos commandes." #: ../../administrator_documentation/installation_docs/docker.md:54 msgid "That's it! You've created your `funkwhale` user." -msgstr "" +msgstr "C’est tout ! Vous avez créé votre utilisateur `funkwhale`." #: ../../administrator_documentation/installation_docs/docker.md:56 msgid "2. Download the project files" @@ -314,4 +330,3 @@ msgid "" "That's it! certbot renews your certificate every 60 days, so you don't " "need to worry about renewing it." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po b/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po index c86492d15..2c2c374f3 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-installation-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/installation_docs/index.md:10 @@ -27,7 +30,7 @@ msgstr "" #: ../../administrator_documentation/installation_docs/index.md:1 msgid "Install Funkwhale on your server" -msgstr "" +msgstr "Installer Funkwhale sur votre serveur" #: ../../administrator_documentation/installation_docs/index.md:3 msgid "Choose your installation method and follow the guides to set up your pod." @@ -49,4 +52,3 @@ msgid "" "**Access to ports `80` and `443`** – Funkwhale uses these ports for " "federation." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po index f2a8d577e..1aa40eb1d 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-uninstall-debian/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/debian.md:1 @@ -105,7 +108,7 @@ msgstr "" #: ../../administrator/uninstall/debian.md:100 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/uninstall/debian.md:106 msgid "Delete the Funkwhale database." @@ -176,4 +179,3 @@ msgstr "" #~ " up any data](../upgrade_docs/backup.md) you " #~ "want to keep." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po index 29a244b87..63bf5a876 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-uninstall-docker/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/docker.md:1 @@ -43,7 +46,7 @@ msgstr "" #: ../../administrator/uninstall/docker.md:18 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/uninstall/docker.md:24 msgid "Stop the containers" @@ -121,4 +124,3 @@ msgstr "" #~ "sure you have [backed up your " #~ "data](../upgrade_docs/backup.md) before proceeding." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/index.po b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/index.po index fdbe6c784..f43a7c775 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-uninstall-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/uninstall_docs/index.md:9 msgid "Choose your setup" -msgstr "" +msgstr "Choisissez votre configuration" #: ../../administrator_documentation/uninstall_docs/index.md:1 msgid "Uninstall Funkwhale" -msgstr "" +msgstr "Désinstaller Funkwhale" #: ../../administrator_documentation/uninstall_docs/index.md:3 msgid "" @@ -31,6 +34,10 @@ msgid "" "guides. Uninstalling Funkwhale removes the app, all media, and all user " "data. Make sure to back up your data before you proceed." msgstr "" +"Si vous devez désinstaller Funkwhale, suivez les instructions dans ces " +"guides. Désinstaller Funkwhale supprime l’application, tous les médias et " +"toutes les données utilisateurs. Veuillez vous assurer d’avoir sauvegardé " +"vos données avant de procéder." #: ../../administrator_documentation/uninstall_docs/index.md:6 msgid "" @@ -38,4 +45,6 @@ msgid "" "are using S3-compatible storage, you need to delete your media files " "separately." msgstr "" - +"Ces guides vous montrent comment supprimer les données stockées sur le " +"serveur. Si vous utilisez un stockage compatible S3, vous devez supprimer " +"tous vous fichiers médias séparément." diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po index 1e41df85b..0f72b9028 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po @@ -3,99 +3,116 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-debian/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/upgrade/debian.md:1 msgid "Upgrade your Debian Funkwhale installation" -msgstr "" +msgstr "Mettre votre installation Funkwhale sur Debian à jour" #: ../../administrator/upgrade/debian.md:3 msgid "" "If you installed Funkwhale following the [Debian " "guide](../installation/debian.md), follow these steps to upgrade." msgstr "" +"Si vous avez installé Funkwhale en suivant le [guide Debian](../installation/" +"debian.md), suivez ces étapes pour mettre à jour." #: ../../administrator/upgrade/debian.md:5 msgid "Cleanup old funkwhale files" -msgstr "" +msgstr "Nettoyer les anciens fichiers Funkwhale" #: ../../administrator/upgrade/debian.md:7 msgid "Stop the Funkwhale services." -msgstr "" +msgstr "Arrêtez les services Funkwhale." #: ../../administrator/upgrade/debian.md:13 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/upgrade/debian.md:19 msgid "Remove the old files." -msgstr "" +msgstr "Supprimez les anciens fichiers." #: ../../administrator/upgrade/debian.md:25 msgid "Download Funkwhale" -msgstr "" +msgstr "Télécharger Funkwhale" #: ../../administrator/upgrade/debian.md:27 msgid "" "Export the Funkwhale version you want to update to. You'll use this in " "the rest of the commands in this guide." msgstr "" +"Exportez la version de Funkwhale vers laquelle vous désirez mettre à jour. " +"Vous l'utiliserez dans les autres commandes de ce guide." #: ../../administrator/upgrade/debian.md:33 msgid "" "Follow the [Download Funkwhale](../installation/debian.md#3-download-" "funkwhale) instructions in the installation guide." msgstr "" +"Suivez les instructions de [Téléchargement de Funkwhale](../installation/" +"debian.md#3-download-funkwhale) dans le guide d’installation." #: ../../administrator/upgrade/debian.md:35 msgid "" "Follow the [Install the Funkwhale API](../installation/debian.md#4" "-install-the-funkwhale-api) instructions in the installation guide." msgstr "" +"Suivez les instructions d’[installation de l’API Funkwhale](../installation/" +"debian.md#4-install-the-funkwhale-api) dans le guide d’installation." #: ../../administrator/upgrade/debian.md:37 msgid "Update your Funkwhale instance" -msgstr "" +msgstr "Mettre votre instance Funkwhale à jour" #: ../../administrator/upgrade/debian.md:39 msgid "" "Once you have downloaded the new files, you can update your Funkwhale " "instance. To do this:" msgstr "" +"Une fois que vous avez téléchargé les nouveaux fichiers, vous pouvez mettre " +"votre instance Funkwhale à jour. Pour ce faire :" #: ../../administrator/upgrade/debian.md:41 msgid "Install or upgrade all OS dependencies using the dependencies script." msgstr "" +"Installez ou mettez à jour toutes les dépendances système en utilisant notre " +"script de dépendances." #: ../../administrator/upgrade/debian.md:47 msgid "Collect the new static files to serve." -msgstr "" +msgstr "Collectez les nouveaux fichiers statiques à servir." #: ../../administrator/upgrade/debian.md:53 msgid "Apply new database migrations." -msgstr "" +msgstr "Appliquer les nouvelles migrations de bases de données." #: ../../administrator/upgrade/debian.md:59 msgid "Restart the Funkwhale services." -msgstr "" +msgstr "Redémarrez les services Funkwhale." #: ../../administrator/upgrade/debian.md:65 msgid "" "That's it! You've updated your Funkwhale pod. You should now see the new " "version running in your web browser." msgstr "" +"C’est tout ! Vous avez mis à jour votre pod Funkwhale. Vous devriez " +"désormais voir la nouvelle version être exécutée dans votre navigateur web." #~ msgid "" #~ "If you installed Funkwhale following the" @@ -115,4 +132,3 @@ msgstr "" #~ "funkwhale-api) instructions in the " #~ "installation guide." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po index f1afab3c8..b4ee5ed7b 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-docker/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/upgrade/docker.md:1 @@ -41,13 +44,15 @@ msgstr "" #: ../../administrator/upgrade/docker.md:14 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/upgrade/docker.md:20 msgid "" "Export the Funkwhale version you want to update to. You'll use this in " "the rest of the commands in this guide." msgstr "" +"Exportez la version de Funkwhale vers laquelle vous désirez mettre à jour. " +"Vous l'utiliserez dans les autres commandes de ce guide." #: ../../administrator/upgrade/docker.md:26 msgid "" @@ -153,4 +158,3 @@ msgstr "" #~ " [Docker guide](../installation_docs/docker.md), follow" #~ " these steps to upgrade." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator_documentation/configuration_docs/instance_settings.po b/docs/locales/fr/LC_MESSAGES/administrator_documentation/configuration_docs/instance_settings.po new file mode 100644 index 000000000..4334bd694 --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/administrator_documentation/configuration_docs/instance_settings.po @@ -0,0 +1,482 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-01 10:35+0200\n" +"PO-Revision-Date: 2023-02-17 19:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/" +"administrator_documentation-configuration_docs-instance_settings/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.1\n" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:1 +msgid "Instance settings" +msgstr "Paramètres d’instance" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "" +"You can find instance settings on your pod's web interface. These " +"settings control high level pod configuration. You don't need to restart " +"the pod after changing these settings." +msgstr "" +"Vous pouvez trouver les paramètres d’instance dans l’interface web de votre " +"pod. Ces paramètres contrôlent la configuration de haut niveau du pod. Vous " +"n'avez pas besoin de redémarrer le pod après avoir modifié ces paramètres." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:5 +msgid "To find your instance settings:" +msgstr "Pour trouver vos paramètres d’instance :" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Desktop" +msgstr "Bureau" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:9 +#: ../../administrator_documentation/configuration_docs/instance_settings.md:16 +msgid "Log in to your {term}`pod`." +msgstr "Connectez-vous à votre {term}`pod`." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:10 +msgid "" +"Select the wrench icon ({fa}`wrench`) at the top of the sidebar to open " +"the {guilabel}`Administration` menu." +msgstr "" +"Sélectionnez l'icône de la clé à molette ({fa}`wrench`) en haut de la barre " +"latérale pour ouvrir le menu {guilabel}`Administration`." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:11 +#: ../../administrator_documentation/configuration_docs/instance_settings.md:18 +msgid "Select {guilabel}`Settings`. The {guilabel}`Instance settings` page opens." +msgstr "" +"Sélectionnez {guilabel}`Paramètres`. La page {guilabel}`paramètres " +"d’instance` s’ouvre." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Mobile" +msgstr "Portable" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:17 +msgid "" +"Select the wrench icon ({fa}`wrench`) at the top of the page to open the " +"{guilabel}`Administration` menu." +msgstr "" +"Sélectionnez l'icône de la clé à molette ({fa}`wrench`) en haut page pour " +"ouvrir le menu {guilabel}`Administration`." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:22 +msgid "Available settings" +msgstr "Paramètres disponibles" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:24 +msgid "Instance information" +msgstr "Information d’instance" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Pod name" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:28 +msgid "" +"The public name of your Funkwhale pod. This is displayed on the \"Home\" " +"and \"About\" pages." +msgstr "" +"Le nom public de votre pod Funkwhale. Il est affiché sur les pages \"Accueil" +"\" et \"À propos\"." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Short description" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:31 +msgid "" +"A short description of your pod. Users see this on the pod's \"Home\" " +"page." +msgstr "" +"Une courte description de votre pod. Les utilisateurs voient ceci dans la " +"page \"Accueil\" du pod." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:6 +msgid "Long description" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:34 +msgid "" +"A longer description of your pod. Users see this on the pod's \"About\" " +"page. Supports markdown formatting." +msgstr "" +"Une plus longue description de votre pod. Les utilisateurs voient ceci dans " +"la page \"À propos\" du pod. Prend en charge le formatage markdown." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:9 +msgid "Contact email" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:37 +msgid "" +"A contact email address that users and visitors can use to contact the " +"pod administrator." +msgstr "" +"Une adresse e-mail de contact que les utilisateurs et visiteurs peuvent " +"utiliser pour contacter l’administrateur du pod." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:12 +msgid "Rules" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:40 +msgid "" +"A free text field for you to add your pod's rules and code of conduct. " +"This is seen on the pod's \"About\" page. Supports markdown formatting" +msgstr "" +"Un champ de texte libre dans lequel vous pouvez ajouter les règles et le " +"code de conduite de votre pod. Ce champ est visible sur la page \"À propos\" " +"du pod. Prend en charge le formatage markdown" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:15 +msgid "Terms of service" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:43 +msgid "" +"A free text field for you to add your pod's terms of service and privacy " +"policy. This is seen on the pod's \"About\" page. Supports markdown " +"formatting." +msgstr "" +"Champ de texte libre dans lequel vous pouvez ajouter les conditions " +"d'utilisation et la politique de confidentialité de votre pod. Ces " +"informations apparaissent sur la page \"À propos\" du pod. Prend en charge " +"le formatage markdown." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:18 +msgid "Banner image" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:46 +msgid "" +"A large image seen on the pod's \"Home\" and \"About\" pages. The image " +"should be at least 600x100px." +msgstr "" +"Une grande image visible sur les pages \"Accueil\" et \"À propos\" du pod. " +"L'image doit être au moins de 600x100px." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:21 +msgid "Support message" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:49 +msgid "" +"A short message you can display to your pod's users to ask for support or" +" just send a periodic message. Supports markdown." +msgstr "" +"Un court message que vous pouvez afficher sur vos utilisateurs de pod pour " +"demander du soutien ou juste envoyer un message périodique. Supporte " +"markdown." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:56 +msgid "Sign-ups" +msgstr "Inscriptions" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Open registration to new users" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:60 +msgid "Enable this setting to allow new users to create an account on your pod." +msgstr "" +"Activez ce paramètre pour permettre aux nouveaux utilisateurs de créer un " +"compte sur votre pod." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Enable manual sign-up validation" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:63 +msgid "" +"Enable this setting to require all new registrations to be validated by a" +" moderator." +msgstr "" +"Activez ce paramètre pour exiger que toutes les nouvelles inscriptions " +"soient validées par un modérateur." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:6 +msgid "Sign-up form customization" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:66 +msgid "" +"Use this tool to create a custom sign-up form. New users see this form " +"when creating a new account. Supports markdown" +msgstr "" +"Utilisez cet outil pour créer un formulaire d’inscription personnalisé. Les " +"nouveaux utilisateurs voient ce formulaire lorsqu’ils créent un nouveau " +"compte. Supporte markdown" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:73 +msgid "Security" +msgstr "Sécurité" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "API Requires authentication" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:77 +msgid "" +"Controls whether {term}`unauthenticated users <Anonymous>` can access " +"content on your pod. If __enabled__, users need to have an account on " +"your pod to access content. If __disabled__, users without an account can" +" listen to content stored in public libraries." +msgstr "" +"Contrôle si les {term}`utilisateurs non authentifiés <Anonymous>` peuvent " +"accéder au contenu de votre pod. Si __activé__, les utilisateurs doivent " +"avoir un compte sur votre pod pour accéder au contenu. Si __désactivé__, les " +"utilisateurs sans compte peuvent écouter le contenu stocké dans les " +"bibliothèques publiques." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:80 +msgid "{doc}`../../moderator_documentation/content/library_visibility`." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:7 +msgid "Default permissions" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:84 +msgid "" +"A list of {term}`permissions` that are added to users by default. If your" +" pod is publicly accessible, you should leave this empty." +msgstr "" +"Une liste de {term}`permissions` qui sont ajoutées à l’utilisateur par " +"défaut. Si votre pod est publiquement accessible, vous devriez laisser ceci " +"vide." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:10 +msgid "Upload quota" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:87 +msgid "" +"The default upload quota for users in MB. You can override this on a per-" +"user basis." +msgstr "" +"Le quota de téléversement par défaut pour les utilisateurs en Mo. Vous " +"pouvez le modifier pour chaque utilisateur." + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:90 +msgid "{doc}`../../moderator_documentation/reports/handle_users`" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:98 +msgid "Music" +msgstr "Musiques" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Transcoding enabled" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:102 +msgid "" +"Enable this setting to let your server transcode files into a different " +"format if the client requests it. This is useful if a device doesn't " +"support formats like Ogg or FLAC." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Transcoding cache duration" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:105 +msgid "" +"The number of minutes you want to store transcoded files on your server. " +"Funkwhale removes transcoded tracks that haven't been downloaded within " +"this duration to save space." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:110 +msgid "Channels" +msgstr "Chaînes" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Enable channels" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:114 +msgid "Whether user channels can be created and followed on your pod." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Max channels allowed per user" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:117 +msgid "The maximum number of channels each user can create." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:124 +msgid "Playlists" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Max tracks per playlist" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:128 +msgid "The maximum number of tracks a user can add to a playlist." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:135 +msgid "Moderation" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Enable allow-listing" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:139 +msgid "" +"Enable this setting to ensure your pod only communicates with pods you " +"have added to your allow list. When this setting is disabled, your pod " +"will communicate with all other servers not included in your deny list." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Publish your allowed-domains list" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:142 +msgid "" +"Whether to make your list of allowed domains public. Enable this if you " +"want users to check who you are federating with." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:6 +msgid "Accountless report categories" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:145 +msgid "" +"A list of {term}`categories <Report categories>` that {term}`anonymous` " +"users can submit." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:152 +msgid "Federation" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Federation enabled" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:156 +msgid "Whether to enable federation features on your pod." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Enable public index" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:159 +msgid "Whether to allow other pods and bots to index public content on your pod." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:6 +msgid "Federation collection page size" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:162 +msgid "The number of items to display in ActivityPub collections." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:9 +msgid "Music cache duration" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:165 +msgid "" +"The number of minutes you want to store local copies of federated tracks " +"on your server. Funkwhale removes federated tracks that haven't been " +"downloaded within this duration to save space." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:12 +msgid "Federation actor fetch delay" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:168 +msgid "" +"The number of minutes the server waits before refetching actors on " +"request authentication." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:175 +msgid "Subsonic" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Enabled Subsonic API" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:179 +msgid "" +"Whether to enable the Subsonic API. This controls whether users are able " +"to connect to your pod using Subsonic apps." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:186 +msgid "User Interface" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Custom CSS code" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:190 +msgid "" +"Add CSS rules to control the look and feel of your pod. These rules are " +"added to a `<style>` tag on each page." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Funkwhale Support message" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:193 +msgid "" +"Whether to show a notification to your pod's users to support the " +"Funkwhale project." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:200 +msgid "Statistics" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md +msgid "Enable usage and library stats in nodeinfo endpoint" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:204 +msgid "" +"Whether to share anonymized usage and library statistics in your pod's " +"nodeinfo endpoint." +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:3 +msgid "Private mode in nodeinfo" +msgstr "" + +#: ../../administrator_documentation/configuration_docs/instance_settings.md:208 +msgid "" +"Enable this setting to indicate you don't want your instance to be " +"tracked by third-party services." +msgstr "" diff --git a/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/debian.po b/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/debian.po new file mode 100644 index 000000000..29ddc00d4 --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/debian.po @@ -0,0 +1,183 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-23 12:18+0200\n" +"PO-Revision-Date: 2023-01-23 21:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator_documentation-uninstall_docs-debian/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../administrator_documentation/uninstall_docs/debian.md:1 +msgid "Uninstall Debian installation" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:3 +msgid "" +"To uninstall Funkwhale from your Debian server, follow the instructions in " +"this guide." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:6 +msgid "" +"Removing Funkwhale data is __irreversible__. Make sure you [back up your " +"data](../upgrade_docs/backup.md)." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:14 +msgid "Stop the Funkwhale server" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:16 +msgid "" +"Before you uninstall anything from your server, you need to stop the " +"Funkwhale systemd services." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:18 +msgid "Stop all systemd services listed under the `funkwhale` target" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:24 +msgid "Disable all systemd services to prevent launch at startup." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:32 +msgid "Remove the service files." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:41 +msgid "Reload all services to pick up the changes." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:48 +msgid "Remove the reverse proxy" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:50 +msgid "" +"To stop serving Funkwhale from your web server, you need to remove your " +"reverse proxy configuration." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md +msgid "Nginx" +msgstr "Nginx" + +#: ../../administrator_documentation/uninstall_docs/debian.md:58 +#: ../../administrator_documentation/uninstall_docs/debian.md:77 +#: ../../administrator_documentation/uninstall_docs/debian.md:54 +#: ../../administrator_documentation/uninstall_docs/debian.md:72 +msgid "Remove the configuration files from your web host." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:66 +#: ../../administrator_documentation/uninstall_docs/debian.md:84 +#: ../../administrator_documentation/uninstall_docs/debian.md:62 +#: ../../administrator_documentation/uninstall_docs/debian.md:79 +msgid "Reload the web server." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md +msgid "Apache2" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:92 +#: ../../administrator_documentation/uninstall_docs/debian.md:87 +msgid "Remove the Funkwhale database" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:95 +#: ../../administrator_documentation/uninstall_docs/debian.md:90 +msgid "" +"This action is __irreversible__. Make sure you have [backed up your data](../" +"upgrade_docs/backup.md) before proceeding." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:98 +#: ../../administrator_documentation/uninstall_docs/debian.md:93 +msgid "" +"Once you have stopped the Funkwhale services, you can remove the Funkwhale " +"database." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:100 +#: ../../administrator_documentation/uninstall_docs/debian.md:95 +msgid "Navigate to your Funkwhale directory." +msgstr "Naviguez jusque dans votre répertoire Funkwhale." + +#: ../../administrator_documentation/uninstall_docs/debian.md:106 +#: ../../administrator_documentation/uninstall_docs/debian.md:101 +msgid "Delete the Funkwhale database." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:112 +#: ../../administrator_documentation/uninstall_docs/debian.md:107 +msgid "Delete the Funkwhale user." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:118 +#: ../../administrator_documentation/uninstall_docs/debian.md:113 +msgid "Delete the Funkwhale account" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:121 +#: ../../administrator_documentation/uninstall_docs/debian.md:116 +msgid "" +"This action deletes the `/srv/funkwhale/` directory. Make sure you have " +"[backed up any data](../upgrade_docs/backup.md) you want to keep." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:124 +#: ../../administrator_documentation/uninstall_docs/debian.md:119 +msgid "" +"Once you have removed the database, you can delete the `funkwhale` user and " +"all associated data." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:130 +#: ../../administrator_documentation/uninstall_docs/debian.md:125 +msgid "" +"This deletes the `funkwhale` user and everything in their home directory (`/" +"srv/funkwhale/`). If your content is hosted in an S3-compatible store, you " +"need to delete this data separately." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:132 +#: ../../administrator_documentation/uninstall_docs/debian.md:127 +msgid "Uninstall dependencies" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:134 +#: ../../administrator_documentation/uninstall_docs/debian.md:129 +msgid "Funkwhale uses the following dependencies on your server:" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md +msgid "Apt" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md +msgid "Python" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md:170 +#: ../../administrator_documentation/uninstall_docs/debian.md:160 +msgid "Uninstall any dependencies you don't need." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/debian.md +msgid "apt" +msgstr "" diff --git a/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/docker.po b/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/docker.po new file mode 100644 index 000000000..99657baee --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/docker.po @@ -0,0 +1,114 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-01 10:35+0200\n" +"PO-Revision-Date: 2023-01-23 21:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator_documentation-uninstall_docs-docker/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.1\n" + +#: ../../administrator_documentation/uninstall_docs/docker.md:1 +msgid "Uninstall Docker installation" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:3 +msgid "" +"To uninstall a Docker-based Funkwhale installation from your server, " +"follow the instructions in this guide." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:6 +msgid "" +"Removing Funkwhale data is __irreversible__. Make sure you [back up your " +"data](../upgrade_docs/backup.md)." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:14 +msgid "Stop the Docker containers" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:16 +msgid "Before you remove any data, you need to stop the Funkwhale containers." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:18 +msgid "Navigate to your Funkwhale directory." +msgstr "Naviguez jusque dans votre répertoire Funkwhale." + +#: ../../administrator_documentation/uninstall_docs/docker.md:24 +msgid "Stop the containers" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:30 +msgid "Remove the reverse proxy" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:32 +msgid "" +"To stop serving Funkwhale from your web server, you need to remove your " +"reverse proxy configuration." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md +msgid "Nginx" +msgstr "Nginx" + +#: ../../administrator_documentation/uninstall_docs/docker.md:36 +#: ../../administrator_documentation/uninstall_docs/docker.md:54 +msgid "Remove the configuration files from your web host." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:44 +#: ../../administrator_documentation/uninstall_docs/docker.md:61 +msgid "Reload the web server." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md +msgid "Apache2" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:69 +msgid "Remove the containers and their volumes" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:72 +msgid "" +"This action is __irreversible__. Make sure you have [backed up your " +"data](../upgrade_docs/backup.md) before proceeding." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:75 +msgid "" +"Once you have stopped the containers, you can delete all containers and " +"associated volumes." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:81 +msgid "Remove the Funkwhale directory" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:83 +msgid "" +"Once you have removed the containers and volumes, you can delete the " +"Funkwhale directory." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/docker.md:89 +msgid "" +"This deletes everything in the (`/srv/funkwhale/`) directory. If your " +"content is hosted in an S3-compatible store, you need to delete this data" +" separately." +msgstr "" diff --git a/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/quick_install.po b/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/quick_install.po new file mode 100644 index 000000000..2e0b733df --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/administrator_documentation/uninstall_docs/quick_install.po @@ -0,0 +1,186 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-23 12:18+0200\n" +"PO-Revision-Date: 2023-01-23 21:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator_documentation-uninstall_docs-quick_install/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:1 +msgid "Uninstall using the quick install script" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:3 +msgid "" +"The Funkwhale quick install script doesn't currently offer an uninstall " +"command. This is because you may be using its dependencies for other " +"software. To uninstall a quick install Funkwhale installation, follow the " +"instructions in this guide." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:6 +msgid "" +"Removing Funkwhale data is __irreversible__. Make sure you [back up your " +"data](../upgrade_docs/backup.md)." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:14 +msgid "Stop the Funkwhale server" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:16 +msgid "" +"Before you uninstall anything from your server, you need to stop the " +"Funkwhale systemd services." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:18 +msgid "Stop all systemd services listed under the `funkwhale` target" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:24 +msgid "Disable all systemd services to prevent launch at startup." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:32 +msgid "Remove the service files." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:41 +msgid "Reload all services to pick up the changes." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:48 +msgid "Remove the reverse proxy" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:50 +msgid "" +"To stop serving Funkwhale from your web server, you need to remove your " +"reverse proxy configuration." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md +msgid "Nginx" +msgstr "Nginx" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:58 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:77 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:54 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:72 +msgid "Remove the configuration files from your web host." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:66 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:84 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:62 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:79 +msgid "Reload the web server." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md +msgid "Apache2" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:92 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:87 +msgid "Remove the Funkwhale database" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:95 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:90 +msgid "" +"This action is __irreversible__. Make sure you have [backed up your data](../" +"upgrade_docs/backup.md) before proceeding." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:98 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:93 +msgid "" +"Once you have stopped the Funkwhale services, you can remove the Funkwhale " +"database." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:100 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:95 +msgid "Navigate to your Funkwhale directory." +msgstr "Naviguez jusque dans votre répertoire Funkwhale." + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:106 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:101 +msgid "Delete the Funkwhale database." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:112 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:107 +msgid "Delete the Funkwhale user." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:118 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:113 +msgid "Delete the Funkwhale account" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:121 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:116 +msgid "" +"This action deletes the `/srv/funkwhale/` directory. Make sure you have " +"[backed up any data](../upgrade_docs/backup.md) you want to keep." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:124 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:119 +msgid "" +"Once you have removed the database, you can delete the `funkwhale` user and " +"all associated data." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:130 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:125 +msgid "" +"This deletes the `funkwhale` user and everything in their home directory (`/" +"srv/funkwhale/`). If your content is hosted in an S3-compatible store, you " +"need to delete this data separately." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:132 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:127 +msgid "Uninstall dependencies" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:134 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:129 +msgid "" +"The quick install script installs the following dependencies on your server:" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md +msgid "Apt" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md +msgid "Python" +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md:170 +#: ../../administrator_documentation/uninstall_docs/quick_install.md:160 +msgid "Uninstall any dependencies you don't need." +msgstr "" + +#: ../../administrator_documentation/uninstall_docs/quick_install.md +msgid "apt" +msgstr "" diff --git a/docs/locales/fr/LC_MESSAGES/administrator_documentation/upgrade_docs/debian.po b/docs/locales/fr/LC_MESSAGES/administrator_documentation/upgrade_docs/debian.po new file mode 100644 index 000000000..e8300cf5f --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/administrator_documentation/upgrade_docs/debian.po @@ -0,0 +1,127 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-01 10:35+0200\n" +"PO-Revision-Date: 2023-01-23 21:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator_documentation-upgrade_docs-debian/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.1\n" + +#: ../../administrator_documentation/upgrade_docs/debian.md:1 +msgid "Upgrade your Debian Funkwhale installation" +msgstr "Mettre à jour votre installation Funkwhale sur Debian" + +#: ../../administrator_documentation/upgrade_docs/debian.md:3 +msgid "" +"If you installed Funkwhale following the [Debian " +"guide](../installation_docs/debian), follow these steps to upgrade." +msgstr "" +"Si vous avez installé Funkwhale suivant le [guide Debian](../" +"installation_docs/debian), suivez ces étapes pour mettre à jour." + +#: ../../administrator_documentation/upgrade_docs/debian.md:5 +msgid "Download the updated files" +msgstr "Téléchargez les fichiers mis à jours" + +#: ../../administrator_documentation/upgrade_docs/debian.md:7 +msgid "SSH into your server." +msgstr "SSH dans votre serveur." + +#: ../../administrator_documentation/upgrade_docs/debian.md:8 +msgid "Log in as your `funkwhale` user." +msgstr "Connectez-vous comme votre utilisateur `funkwhale`." + +#: ../../administrator_documentation/upgrade_docs/debian.md:14 +msgid "Navigate to your Funkwhale directory." +msgstr "Naviguez jusque dans votre répertoire Funkwhale." + +#: ../../administrator_documentation/upgrade_docs/debian.md:20 +msgid "Stop the Funkwhale services." +msgstr "Arrêtez les services Funkwhale." + +#: ../../administrator_documentation/upgrade_docs/debian.md:26 +msgid "" +"Export the Funkwhale version you want to update to. You'll use this in " +"the rest of the commands in this guide." +msgstr "" +"Exportez la version de Funkwhale vers laquelle vous voulez mettre à jour. " +"Vous utiliserez ceci pour les commandes suivantes dans ce guide." + +#: ../../administrator_documentation/upgrade_docs/debian.md:32 +msgid "Download the API files for your chosen Funkwhale version." +msgstr "Téléchargez les fichiers API pour votre version de Funkwhale choisie." + +#: ../../administrator_documentation/upgrade_docs/debian.md:38 +msgid "Extract the downloaded archive to a new directory." +msgstr "Extrayez l’archive téléchargée dans un nouveau répertoire." + +#: ../../administrator_documentation/upgrade_docs/debian.md:44 +msgid "" +"Remove the old `api` directory and move the extracted directory to the " +"`api` directory." +msgstr "" +"Supprimez l’ancien répertoire `api` et déplacé le répertoire extrait vers le " +"répertoire `api`." + +#: ../../administrator_documentation/upgrade_docs/debian.md:50 +msgid "Remove the downloaded archive file." +msgstr "Supprimez le fichier archive téléchargé." + +#: ../../administrator_documentation/upgrade_docs/debian.md:56 +msgid "Update your Funkwhale instance" +msgstr "Mettre votre instance Funkwhale à jour" + +#: ../../administrator_documentation/upgrade_docs/debian.md:58 +msgid "" +"Once you have downloaded the new files, you can update your Funkwhale " +"instance. To do this:" +msgstr "" +"Une fois que vous avez téléchargé les nouveaux fichiers, vous pouvez mettre " +"à jour votre instance Funkwhale. Pour ce faire :" + +#: ../../administrator_documentation/upgrade_docs/debian.md:60 +msgid "Install or upgrade all OS dependencies using the dependencies script." +msgstr "" +"Installez ou mettez à jour toutes vos dépendances systèmes avec le script de " +"dépendances." + +#: ../../administrator_documentation/upgrade_docs/debian.md:66 +msgid "Enter the `api` directory to run the following commands." +msgstr "Entrez dans le répertoire `api`pour exécuter les commandes suivantes." + +#: ../../administrator_documentation/upgrade_docs/debian.md:72 +msgid "Install all Python dependencies using `poetry`." +msgstr "Installez toutes les dépendances Python en utilisant `poetry`." + +#: ../../administrator_documentation/upgrade_docs/debian.md:78 +msgid "Collect the new static files to serve." +msgstr "Collectez les nouveaux fichiers statiques à servir." + +#: ../../administrator_documentation/upgrade_docs/debian.md:84 +msgid "Apply new database migrations." +msgstr "Appliquez les nouvelles migrations de base de données." + +#: ../../administrator_documentation/upgrade_docs/debian.md:90 +msgid "Restart the Funkwhale services." +msgstr "Redémarrez les services Funkwhale." + +#: ../../administrator_documentation/upgrade_docs/debian.md:96 +msgid "" +"That's it! You've updated your Funkwhale pod. You should now see the new " +"version running in your web browser." +msgstr "" +"Eh voilà ! Vous avez mis votre pod Funkwhale à jour. Vous devriez voir " +"maintenant la nouvelle version s’exécuter dans votre navigateur web." diff --git a/docs/locales/fr/LC_MESSAGES/administrator_documentation/upgrade_docs/quick_install.po b/docs/locales/fr/LC_MESSAGES/administrator_documentation/upgrade_docs/quick_install.po new file mode 100644 index 000000000..448b9c1c8 --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/administrator_documentation/upgrade_docs/quick_install.po @@ -0,0 +1,39 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-01 10:35+0200\n" +"PO-Revision-Date: 2023-01-23 21:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator_documentation-upgrade_docs-quick_install/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.1\n" + +#: ../../administrator_documentation/upgrade_docs/quick_install.md:1 +msgid "Upgrade using the quick install script" +msgstr "Mettre à jour en utilisant le script d’installation rapide" + +#: ../../administrator_documentation/upgrade_docs/quick_install.md:3 +msgid "" +"If you installed Funkwhale using the [quick install " +"script](../installation_docs/quick_install), upgrading your instance is " +"as simple as running the following command on your server:" +msgstr "" +"Si vous avez installé Funkwhale en utilisant le [script d’installation " +"rapide](../installation_docs/quick_install), mettre à jour votre instance " +"est aussi simple que d’exécuter la commande suivante dans votre serveur :" + +#: ../../administrator_documentation/upgrade_docs/quick_install.md:9 +msgid "The script runs through the necessary setup instructions." +msgstr "Le script exécute les instructions de configuration nécessaires." diff --git a/docs/locales/fr/LC_MESSAGES/api.po b/docs/locales/fr/LC_MESSAGES/api.po new file mode 100644 index 000000000..25f4939fb --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/api.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-01 10:35+0200\n" +"PO-Revision-Date: 2023-01-23 21:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/api/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.1\n" + +#: ../../api.rst:2 +msgid "Funkwhale API" +msgstr "API Funkwhale" + +#: ../../api.rst:4 +msgid "" +"Funkwhale API is still a work in progress and should not be considered as" +" stable. We offer an `interactive documentation using swagger " +"</swagger/>`_ were you can browse available endpoints and try the API." +msgstr "" +"L’API de Funkwhale est toujours un travail en cours et ne devrait pas être " +"considéré comme stable. Nous offrons une `documentation interactive à l’aide " +"de swagger </swagger/>`_ où vous pouvez parcourir les points de terminaison " +"disponibles et essayer l’API." diff --git a/docs/locales/fr/LC_MESSAGES/changelog.po b/docs/locales/fr/LC_MESSAGES/changelog.po index 571c020b5..c62f51959 100644 --- a/docs/locales/fr/LC_MESSAGES/changelog.po +++ b/docs/locales/fr/LC_MESSAGES/changelog.po @@ -3,1402 +3,1546 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/changelog/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" +"Generated-By: Babel 2.12.1\n" -#: ../../../CHANGELOG:2 +#: ../../../CHANGELOG.md:2 msgid "Changelog" -msgstr "" +msgstr "Journal des modifications" -#: ../../../CHANGELOG:4 +#: ../../../CHANGELOG.md:4 msgid "You can subscribe to release announcements by:" -msgstr "" +msgstr "Vous pouvez vous abonner aux annonces de publications :" -#: ../../../CHANGELOG:6 +#: ../../../CHANGELOG.md:6 msgid "" -"Following `@funkwhale@fosstodon.org <https://fosstodon.org/@funkwhale>`_ " -"on Mastodon" +"Following [@funkwhale@fosstodon.org](https://fosstodon.org/@funkwhale) on" +" Mastodon" msgstr "" -#: ../../../CHANGELOG:7 +#: ../../../CHANGELOG.md:7 msgid "" "Subscribing to the following Atom feed: " "https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag" msgstr "" +"En vous abonnant au flux Atom suivant : https://dev.funkwhale.audio/" +"funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag" -#: ../../../CHANGELOG:9 +#: ../../../CHANGELOG.md:9 msgid "" "This changelog is viewable on the web at " "https://docs.funkwhale.audio/changelog.html." msgstr "" +"Ce journal des modifications est consultable sur le web à l’adresse " +"https://docs.funkwhale.audio/changelog.html." -#: ../../../CHANGELOG:14 -msgid "1.3.0-rc3 (2023-01-23)" +#: ../../../CHANGELOG.md:13 +msgid "1.3.0-rc4 (2023-03-24)" msgstr "" -#: ../../../CHANGELOG:16 +#: ../../../CHANGELOG.md:15 ../../../CHANGELOG.md:22 msgid "Update since 1.3.0-rc2:" msgstr "" -#: ../../../CHANGELOG:18 +#: ../../../CHANGELOG.md:16 +msgid "" +"Resolved an issue where queue text with mouse over has dark text on dark " +"background (#2058) (2058)" +msgstr "" + +#: ../../../CHANGELOG.md:17 +msgid "Improve signal handling for service and containers" +msgstr "" + +#: ../../../CHANGELOG.md:18 +msgid "" +"Fixes an issue which made it possible to download all media files without" +" access control (#2101)" +msgstr "" + +#: ../../../CHANGELOG.md:20 +msgid "1.3.0-rc3 (2023-01-23)" +msgstr "" + +#: ../../../CHANGELOG.md:24 msgid "Fix pipeline execution for tags" msgstr "" -#: ../../../CHANGELOG:21 +#: ../../../CHANGELOG.md:26 msgid "1.3.0-rc2 (2023-01-23)" msgstr "" -#: ../../../CHANGELOG:23 +#: ../../../CHANGELOG.md:28 msgid "Update since 1.3.0-rc1:" msgstr "" -#: ../../../CHANGELOG:25 ../../../CHANGELOG:101 ../../../CHANGELOG:465 -#: ../../../CHANGELOG:517 ../../../CHANGELOG:563 ../../../CHANGELOG:731 -#: ../../../CHANGELOG:922 ../../../CHANGELOG:941 ../../../CHANGELOG:960 -#: ../../../CHANGELOG:980 ../../../CHANGELOG:1080 ../../../CHANGELOG:1142 -#: ../../../CHANGELOG:1232 ../../../CHANGELOG:1311 ../../../CHANGELOG:1348 -#: ../../../CHANGELOG:1596 ../../../CHANGELOG:1738 ../../../CHANGELOG:2023 -#: ../../../CHANGELOG:2109 ../../../CHANGELOG:2276 ../../../CHANGELOG:2392 -#: ../../../CHANGELOG:2429 ../../../CHANGELOG:2530 ../../../CHANGELOG:2769 -#: ../../../CHANGELOG:2863 ../../../CHANGELOG:3079 ../../../CHANGELOG:3161 -#: ../../../CHANGELOG:3394 ../../../CHANGELOG:3465 ../../../CHANGELOG:3586 -#: ../../../CHANGELOG:3685 ../../../CHANGELOG:3887 ../../../CHANGELOG:4007 -#: ../../../CHANGELOG:4155 ../../../CHANGELOG:4251 ../../../CHANGELOG:4344 -#: ../../../CHANGELOG:4418 +#: ../../../CHANGELOG.md:30 ../../../CHANGELOG.md:107 ../../../CHANGELOG.md:453 +#: ../../../CHANGELOG.md:502 ../../../CHANGELOG.md:543 +#: ../../../CHANGELOG.md:702 ../../../CHANGELOG.md:885 +#: ../../../CHANGELOG.md:901 ../../../CHANGELOG.md:916 +#: ../../../CHANGELOG.md:933 ../../../CHANGELOG.md:1026 +#: ../../../CHANGELOG.md:1085 ../../../CHANGELOG.md:1165 +#: ../../../CHANGELOG.md:1237 ../../../CHANGELOG.md:1269 +#: ../../../CHANGELOG.md:1507 ../../../CHANGELOG.md:1646 +#: ../../../CHANGELOG.md:1917 ../../../CHANGELOG.md:1999 +#: ../../../CHANGELOG.md:2148 ../../../CHANGELOG.md:2258 +#: ../../../CHANGELOG.md:2290 ../../../CHANGELOG.md:2393 +#: ../../../CHANGELOG.md:2620 ../../../CHANGELOG.md:2707 +#: ../../../CHANGELOG.md:2922 ../../../CHANGELOG.md:3001 +#: ../../../CHANGELOG.md:3223 ../../../CHANGELOG.md:3286 +#: ../../../CHANGELOG.md:3400 ../../../CHANGELOG.md:3495 +#: ../../../CHANGELOG.md:3691 ../../../CHANGELOG.md:3800 +#: ../../../CHANGELOG.md:3948 ../../../CHANGELOG.md:4033 +#: ../../../CHANGELOG.md:4125 ../../../CHANGELOG.md:4194 msgid "Enhancements:" msgstr "" -#: ../../../CHANGELOG:27 +#: ../../../CHANGELOG.md:32 msgid "" "Retry fetching new radio track 5 times if error occurred before resetting" " radio session (#2022)" msgstr "" -#: ../../../CHANGELOG:29 ../../../CHANGELOG:177 ../../../CHANGELOG:287 -#: ../../../CHANGELOG:334 ../../../CHANGELOG:388 ../../../CHANGELOG:413 -#: ../../../CHANGELOG:470 ../../../CHANGELOG:522 ../../../CHANGELOG:569 -#: ../../../CHANGELOG:622 ../../../CHANGELOG:679 ../../../CHANGELOG:751 -#: ../../../CHANGELOG:926 ../../../CHANGELOG:946 ../../../CHANGELOG:965 -#: ../../../CHANGELOG:994 ../../../CHANGELOG:1066 ../../../CHANGELOG:1095 -#: ../../../CHANGELOG:1148 ../../../CHANGELOG:1257 ../../../CHANGELOG:1319 -#: ../../../CHANGELOG:1358 ../../../CHANGELOG:1624 ../../../CHANGELOG:1748 -#: ../../../CHANGELOG:2053 ../../../CHANGELOG:2123 ../../../CHANGELOG:2311 -#: ../../../CHANGELOG:2400 ../../../CHANGELOG:2436 ../../../CHANGELOG:2540 -#: ../../../CHANGELOG:2807 ../../../CHANGELOG:2873 ../../../CHANGELOG:3045 -#: ../../../CHANGELOG:3061 ../../../CHANGELOG:3089 ../../../CHANGELOG:3179 -#: ../../../CHANGELOG:3400 ../../../CHANGELOG:3476 ../../../CHANGELOG:3595 -#: ../../../CHANGELOG:3702 ../../../CHANGELOG:3894 ../../../CHANGELOG:4013 -#: ../../../CHANGELOG:4168 ../../../CHANGELOG:4262 ../../../CHANGELOG:4328 -#: ../../../CHANGELOG:4432 ../../../CHANGELOG:4504 ../../../CHANGELOG:4529 -#: ../../../CHANGELOG:4640 ../../../CHANGELOG:4656 ../../../CHANGELOG:4811 -#: ../../../CHANGELOG:4829 +#: ../../../CHANGELOG.md:34 ../../../CHANGELOG.md:181 ../../../CHANGELOG.md:287 +#: ../../../CHANGELOG.md:330 ../../../CHANGELOG.md:381 +#: ../../../CHANGELOG.md:404 ../../../CHANGELOG.md:457 +#: ../../../CHANGELOG.md:506 ../../../CHANGELOG.md:549 +#: ../../../CHANGELOG.md:599 ../../../CHANGELOG.md:653 +#: ../../../CHANGELOG.md:721 ../../../CHANGELOG.md:889 +#: ../../../CHANGELOG.md:905 ../../../CHANGELOG.md:921 +#: ../../../CHANGELOG.md:946 ../../../CHANGELOG.md:1015 +#: ../../../CHANGELOG.md:1040 ../../../CHANGELOG.md:1090 +#: ../../../CHANGELOG.md:1188 ../../../CHANGELOG.md:1244 +#: ../../../CHANGELOG.md:1278 ../../../CHANGELOG.md:1535 +#: ../../../CHANGELOG.md:1655 ../../../CHANGELOG.md:1946 +#: ../../../CHANGELOG.md:2012 ../../../CHANGELOG.md:2183 +#: ../../../CHANGELOG.md:2265 ../../../CHANGELOG.md:2296 +#: ../../../CHANGELOG.md:2402 ../../../CHANGELOG.md:2657 +#: ../../../CHANGELOG.md:2717 ../../../CHANGELOG.md:2893 +#: ../../../CHANGELOG.md:2906 ../../../CHANGELOG.md:2931 +#: ../../../CHANGELOG.md:3018 ../../../CHANGELOG.md:3228 +#: ../../../CHANGELOG.md:3297 ../../../CHANGELOG.md:3409 +#: ../../../CHANGELOG.md:3511 ../../../CHANGELOG.md:3697 +#: ../../../CHANGELOG.md:3805 ../../../CHANGELOG.md:3960 +#: ../../../CHANGELOG.md:4043 ../../../CHANGELOG.md:4112 +#: ../../../CHANGELOG.md:4207 ../../../CHANGELOG.md:4273 +#: ../../../CHANGELOG.md:4294 ../../../CHANGELOG.md:4398 +#: ../../../CHANGELOG.md:4411 ../../../CHANGELOG.md:4542 +#: ../../../CHANGELOG.md:4558 msgid "Bugfixes:" msgstr "" -#: ../../../CHANGELOG:31 +#: ../../../CHANGELOG.md:36 msgid "Docker setup: do not export the API port 5000 publicly" msgstr "" -#: ../../../CHANGELOG:32 +#: ../../../CHANGELOG.md:37 msgid "Fix artist name submission in Maloja plugin" msgstr "" -#: ../../../CHANGELOG:34 +#: ../../../CHANGELOG.md:39 msgid "Deprecations:" msgstr "" -#: ../../../CHANGELOG:36 +#: ../../../CHANGELOG.md:41 msgid "" "That's the last minor version series that supports python3.7. Funkwhale " "1.4 will remove support for it. #1693" msgstr "" -#: ../../../CHANGELOG:37 +#: ../../../CHANGELOG.md:42 msgid "" "Deprecate the api manage.py script in favor of the funkwhale-manage " "entrypoint" msgstr "" -#: ../../../CHANGELOG:40 +#: ../../../CHANGELOG.md:44 msgid "1.3.0-rc1 (2023-01-20)" msgstr "" -#: ../../../CHANGELOG:42 ../../../CHANGELOG:284 ../../../CHANGELOG:326 -#: ../../../CHANGELOG:385 ../../../CHANGELOG:410 ../../../CHANGELOG:462 -#: ../../../CHANGELOG:514 ../../../CHANGELOG:560 ../../../CHANGELOG:619 -#: ../../../CHANGELOG:676 ../../../CHANGELOG:707 ../../../CHANGELOG:911 -#: ../../../CHANGELOG:919 ../../../CHANGELOG:938 ../../../CHANGELOG:957 -#: ../../../CHANGELOG:977 ../../../CHANGELOG:1063 ../../../CHANGELOG:1077 -#: ../../../CHANGELOG:1139 ../../../CHANGELOG:1164 ../../../CHANGELOG:1308 -#: ../../../CHANGELOG:1340 ../../../CHANGELOG:1716 ../../../CHANGELOG:1781 -#: ../../../CHANGELOG:2106 ../../../CHANGELOG:2155 ../../../CHANGELOG:2375 -#: ../../../CHANGELOG:2426 ../../../CHANGELOG:2447 +#: ../../../CHANGELOG.md:46 ../../../CHANGELOG.md:285 ../../../CHANGELOG.md:324 +#: ../../../CHANGELOG.md:379 ../../../CHANGELOG.md:402 +#: ../../../CHANGELOG.md:451 ../../../CHANGELOG.md:500 +#: ../../../CHANGELOG.md:541 ../../../CHANGELOG.md:597 +#: ../../../CHANGELOG.md:651 ../../../CHANGELOG.md:680 +#: ../../../CHANGELOG.md:877 ../../../CHANGELOG.md:883 +#: ../../../CHANGELOG.md:899 ../../../CHANGELOG.md:914 +#: ../../../CHANGELOG.md:931 ../../../CHANGELOG.md:1013 +#: ../../../CHANGELOG.md:1024 ../../../CHANGELOG.md:1083 +#: ../../../CHANGELOG.md:1105 ../../../CHANGELOG.md:1235 +#: ../../../CHANGELOG.md:1263 ../../../CHANGELOG.md:1626 +#: ../../../CHANGELOG.md:1684 ../../../CHANGELOG.md:1997 +#: ../../../CHANGELOG.md:2041 ../../../CHANGELOG.md:2245 +#: ../../../CHANGELOG.md:2288 ../../../CHANGELOG.md:2305 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html" msgstr "" -#: ../../../CHANGELOG:45 +#: ../../../CHANGELOG.md:48 msgid "Update instructions:" msgstr "" -#: ../../../CHANGELOG:47 +#: ../../../CHANGELOG.md:50 msgid "" "If you are running the docker deployment, make sure to update our compose" " file. In this small example we show you how to save the old config and " "update it correctly:" msgstr "" -#: ../../../CHANGELOG:51 +#: ../../../CHANGELOG.md:62 msgid "" -"``` export FUNKWHALE_VERSION=\"1.3.0\" cd /srv/funkwhale docker-compose " -"down mv docker-compose.yml docker-compose.bak curl -L -o /srv/funkwhale" -"/docker-compose.yml " -"\"https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy" -"/docker-compose.yml\" ```" +".. note:: If you need to customize your nginx template, e.g. to work " +"around `problems with Docker's resolver " +"<https://docs.funkwhale.audio/admin/external-storages.html#no-resolver-" +"found>`_, you can mount your custom nginx configuration into the " +"container. Uncomment the commented volumes in the `nginx` section of your" +" `docker-compose.yml`. Additionally you need to update the paths in " +"`nginx/funkwhale.template`. Replace all occurrences of `/funkwhale` by " +"`/usr/share/nginx/html`. This loads the templates from your `nginx` " +"folder and overrides the template files in the Docker container." msgstr "" -#: ../../../CHANGELOG:60 -msgid "" -"If you need to customize your nginx template, e.g. to work around " -"`problems with Docker's resolver <https://docs.funkwhale.audio/admin" -"/external-storages.html#no-resolver-found>`_, you can mount your custom " -"nginx configuration into the container. Uncomment the commented volumes " -"in the `nginx` section of your `docker-compose.yml`. Additionally you " -"need to update the paths in `nginx/funkwhale.template`. Replace all " -"occurrences of `/funkwhale` by `/usr/share/nginx/html`. This loads the " -"templates from your `nginx` folder and overrides the template files in " -"the Docker container." -msgstr "" - -#: ../../../CHANGELOG:67 -msgid "``` docker-compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:71 +#: ../../../CHANGELOG.md:76 msgid "" "The Docker instructions now use the updated Docker compose plugin. If you" " previously used the ``docker-compose`` standalone installation, do the " "following while upgrading:" msgstr "" -#: ../../../CHANGELOG:73 +#: ../../../CHANGELOG.md:78 msgid "" -"Download the `Docker compose plugin " -"<https://docs.docker.com/compose/install/linux/#install-using-the-" -"repository>`_" +"The Docker instructions now use the updated Docker compose plugin. If you" +" previously used the `docker-compose` standalone installation, do the " +"following while upgrading:" msgstr "" -#: ../../../CHANGELOG:74 +#: ../../../CHANGELOG.md:80 +msgid "" +"Download the [Docker compose " +"plugin](https://docs.docker.com/compose/install/linux/#install-using-the-" +"repository)" +msgstr "" + +#: ../../../CHANGELOG.md:81 msgid "Stop your containers using the **docker-compose** syntax." msgstr "" -#: ../../../CHANGELOG:76 -msgid "```sh sudo docker-compose down ```" -msgstr "" - -#: ../../../CHANGELOG:80 +#: ../../../CHANGELOG.md:87 msgid "Bring the containers back up using the **docker compose** syntax." msgstr "" -#: ../../../CHANGELOG:82 -msgid "```sh sudo docker compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:86 +#: ../../../CHANGELOG.md:93 msgid "" "After this you can continue to use the **docker compose** syntax for all " "Docker management tasks." msgstr "" -#: ../../../CHANGELOG:87 +#: ../../../CHANGELOG.md:95 msgid "" "Upgrade Postgres to version 15. [Make sure to " "migrate!](https://docs.funkwhale.audio/administrator_documentation/upgrade_docs/docker.html" "#upgrade-the-postgres-container)" msgstr "" -#: ../../../CHANGELOG:88 +#: ../../../CHANGELOG.md:96 msgid "" "With this update Funkwhale starts using poetry to maintain its " "dependencies. We therefore recommend removing the old virtualenv by " "running `rm -rf /srv/funkwhale/virtualenv`." msgstr "" -#: ../../../CHANGELOG:92 ../../../CHANGELOG:329 ../../../CHANGELOG:724 -#: ../../../CHANGELOG:1224 ../../../CHANGELOG:1344 ../../../CHANGELOG:1585 -#: ../../../CHANGELOG:2010 ../../../CHANGELOG:2263 ../../../CHANGELOG:2761 -#: ../../../CHANGELOG:2857 ../../../CHANGELOG:3075 ../../../CHANGELOG:3150 -#: ../../../CHANGELOG:3383 ../../../CHANGELOG:3675 ../../../CHANGELOG:3879 -#: ../../../CHANGELOG:4000 ../../../CHANGELOG:4147 ../../../CHANGELOG:4246 -#: ../../../CHANGELOG:4338 ../../../CHANGELOG:4411 ../../../CHANGELOG:4494 -#: ../../../CHANGELOG:4524 ../../../CHANGELOG:4545 ../../../CHANGELOG:4636 -#: ../../../CHANGELOG:4649 ../../../CHANGELOG:4805 ../../../CHANGELOG:4824 +#: ../../../CHANGELOG.md:99 ../../../CHANGELOG.md:326 ../../../CHANGELOG.md:696 +#: ../../../CHANGELOG.md:1158 ../../../CHANGELOG.md:1265 +#: ../../../CHANGELOG.md:1496 ../../../CHANGELOG.md:1905 +#: ../../../CHANGELOG.md:2136 ../../../CHANGELOG.md:2613 +#: ../../../CHANGELOG.md:2702 ../../../CHANGELOG.md:2918 +#: ../../../CHANGELOG.md:2991 ../../../CHANGELOG.md:3213 +#: ../../../CHANGELOG.md:3486 ../../../CHANGELOG.md:3684 +#: ../../../CHANGELOG.md:3794 ../../../CHANGELOG.md:3940 +#: ../../../CHANGELOG.md:4029 ../../../CHANGELOG.md:4120 +#: ../../../CHANGELOG.md:4188 ../../../CHANGELOG.md:4264 +#: ../../../CHANGELOG.md:4290 ../../../CHANGELOG.md:4307 +#: ../../../CHANGELOG.md:4394 ../../../CHANGELOG.md:4405 +#: ../../../CHANGELOG.md:4536 ../../../CHANGELOG.md:4553 msgid "Features:" msgstr "" -#: ../../../CHANGELOG:94 +#: ../../../CHANGELOG.md:101 msgid "Add a management command to create a new library for a user" msgstr "" -#: ../../../CHANGELOG:95 +#: ../../../CHANGELOG.md:102 msgid "Add Gitpod configuration and guide" msgstr "" -#: ../../../CHANGELOG:96 +#: ../../../CHANGELOG.md:103 msgid "Add Sentry SDK to collect #1479" msgstr "" -#: ../../../CHANGELOG:97 +#: ../../../CHANGELOG.md:104 msgid "Prepare API for the upcoming version 2" msgstr "" -#: ../../../CHANGELOG:98 +#: ../../../CHANGELOG.md:105 msgid "Rewrite player to be based on Web Audio API" msgstr "" -#: ../../../CHANGELOG:103 +#: ../../../CHANGELOG.md:109 msgid "Add a celery task to scan remote library (#1712)" msgstr "" -#: ../../../CHANGELOG:104 +#: ../../../CHANGELOG.md:110 msgid "Add coverage report for Frontend Tests" msgstr "" -#: ../../../CHANGELOG:105 +#: ../../../CHANGELOG.md:111 msgid "Add hint which serializer is used for OembedView (#1901)" msgstr "" -#: ../../../CHANGELOG:106 +#: ../../../CHANGELOG.md:112 msgid "Add music visualizer (#1135)" msgstr "" -#: ../../../CHANGELOG:107 +#: ../../../CHANGELOG.md:113 msgid "Add playlists radio to search page (#1968)" msgstr "" -#: ../../../CHANGELOG:108 +#: ../../../CHANGELOG.md:114 msgid "Add proper serialization for TextPreviewView (#1903)" msgstr "" -#: ../../../CHANGELOG:109 +#: ../../../CHANGELOG.md:115 msgid "Add Serializer for SpaManifest endpoint" msgstr "" -#: ../../../CHANGELOG:110 +#: ../../../CHANGELOG.md:116 msgid "Add support for python 3.11" msgstr "" -#: ../../../CHANGELOG:111 +#: ../../../CHANGELOG.md:117 msgid "Added proper serializers for the rate-limit endpoint." msgstr "" -#: ../../../CHANGELOG:112 +#: ../../../CHANGELOG.md:118 msgid "Added type hints to the API." msgstr "" -#: ../../../CHANGELOG:113 +#: ../../../CHANGELOG.md:119 msgid "" "All administrator documentation has been rewritten to improve clarity and" " update outdated information." msgstr "" -#: ../../../CHANGELOG:114 +#: ../../../CHANGELOG.md:120 msgid "Allow arbitrary length names for artists, albums and tracks" msgstr "" -#: ../../../CHANGELOG:115 +#: ../../../CHANGELOG.md:121 msgid "Allow installing the funkwhale_api package" msgstr "" -#: ../../../CHANGELOG:116 +#: ../../../CHANGELOG.md:122 msgid "Allow using default browser dark mode and update UI dynamically on change" msgstr "" -#: ../../../CHANGELOG:117 +#: ../../../CHANGELOG.md:123 msgid "Apply migrations on API container start (!1879)" msgstr "" -#: ../../../CHANGELOG:118 +#: ../../../CHANGELOG.md:124 msgid "Automatically fetch next page of tracks (#1526)" msgstr "" -#: ../../../CHANGELOG:119 +#: ../../../CHANGELOG.md:125 msgid "Build frontend natively for cross-arch docker images" msgstr "" -#: ../../../CHANGELOG:120 ../../../CHANGELOG:566 +#: ../../../CHANGELOG.md:126 ../../../CHANGELOG.md:546 msgid "" "Change unmaintained PyMemoize library to django-cache-memoize to enable " "Python 3.10 support" msgstr "" -#: ../../../CHANGELOG:122 +#: ../../../CHANGELOG.md:128 msgid "Cleaned up frontend docker container" msgstr "" -#: ../../../CHANGELOG:123 +#: ../../../CHANGELOG.md:129 msgid "Cleanup Gitlab CI and Dockerfiles (!1796)" msgstr "" -#: ../../../CHANGELOG:124 +#: ../../../CHANGELOG.md:130 msgid "Create the funkwhale-manage entrypoint in the api package" msgstr "" -#: ../../../CHANGELOG:125 +#: ../../../CHANGELOG.md:131 msgid "Created migration guide for the deprecated all-in-one docker container." msgstr "" -#: ../../../CHANGELOG:126 +#: ../../../CHANGELOG.md:132 msgid "Don't buffer python stdout/err in docker" msgstr "" -#: ../../../CHANGELOG:127 +#: ../../../CHANGELOG.md:133 msgid "Don't compile python byte code in docker" msgstr "" -#: ../../../CHANGELOG:128 +#: ../../../CHANGELOG.md:134 msgid "Don't use poetry in production deployments" msgstr "" -#: ../../../CHANGELOG:129 +#: ../../../CHANGELOG.md:135 msgid "Drop direct dependency on pyopenssl (#1975)" msgstr "" -#: ../../../CHANGELOG:130 +#: ../../../CHANGELOG.md:136 msgid "" "Exclude /api/v1/oauth/authorize from the specs since its not supported " "yet (#1899)" msgstr "" -#: ../../../CHANGELOG:131 +#: ../../../CHANGELOG.md:137 msgid "Fix openapi specs for user endpoints (#1892, #1894)" msgstr "" -#: ../../../CHANGELOG:132 +#: ../../../CHANGELOG.md:138 msgid "Fix Serializer for inline channel artists (#1833)" msgstr "" -#: ../../../CHANGELOG:133 +#: ../../../CHANGELOG.md:139 msgid "Fix specs for ListenViewSet (#1898)" msgstr "" -#: ../../../CHANGELOG:134 +#: ../../../CHANGELOG.md:140 msgid "" "Handle PWA correctly and provide better cache strategy for album covers " "(#1721)" msgstr "" -#: ../../../CHANGELOG:135 +#: ../../../CHANGELOG.md:141 msgid "Improve docker caching" msgstr "" -#: ../../../CHANGELOG:136 +#: ../../../CHANGELOG.md:142 msgid "Improve specification of LibraryFollowViewSet (#1896)" msgstr "" -#: ../../../CHANGELOG:137 +#: ../../../CHANGELOG.md:143 msgid "Install API python package in docker image" msgstr "" -#: ../../../CHANGELOG:138 +#: ../../../CHANGELOG.md:144 msgid "Make CI always run all tests on protected branches." msgstr "" -#: ../../../CHANGELOG:139 +#: ../../../CHANGELOG.md:145 msgid "Make mutations endpoint appear in openapi specs" msgstr "" -#: ../../../CHANGELOG:140 +#: ../../../CHANGELOG.md:146 msgid "Make Python 3.10 tests in CI mandatory" msgstr "" -#: ../../../CHANGELOG:141 +#: ../../../CHANGELOG.md:147 msgid "Make sure ChannelViewSet always has a serializer (#1895)" msgstr "" -#: ../../../CHANGELOG:142 +#: ../../../CHANGELOG.md:148 msgid "Migrate to new queue system from old localStorage keys" msgstr "" -#: ../../../CHANGELOG:143 +#: ../../../CHANGELOG.md:149 msgid "Migrate to Vue 3" msgstr "" -#: ../../../CHANGELOG:144 +#: ../../../CHANGELOG.md:150 msgid "Migrate to vue-i18n (#1831) Fix locale changing (#1862)" msgstr "" -#: ../../../CHANGELOG:146 +#: ../../../CHANGELOG.md:152 msgid "Migrated to sphinx-design." msgstr "" -#: ../../../CHANGELOG:147 +#: ../../../CHANGELOG.md:153 msgid "" "New task checking if remote instance is reachable to avoid playback " "latence (#1711)" msgstr "" -#: ../../../CHANGELOG:148 +#: ../../../CHANGELOG.md:154 msgid "" "OAuth Application client secrets are now hashed before storing them to " "the DB. Those are only displayed once from now on!" msgstr "" -#: ../../../CHANGELOG:149 ../../../CHANGELOG:467 +#: ../../../CHANGELOG.md:155 ../../../CHANGELOG.md:455 msgid "Parameterize the default S3 ACL when uploading objects. (#1319)" msgstr "" -#: ../../../CHANGELOG:150 +#: ../../../CHANGELOG.md:156 msgid "" "Pin Alpine package versions in API Dockerfile (fixes part of CI build " "issues)." msgstr "" -#: ../../../CHANGELOG:151 +#: ../../../CHANGELOG.md:157 msgid "Prefer using the funkwhale-manage entrypoint" msgstr "" -#: ../../../CHANGELOG:152 +#: ../../../CHANGELOG.md:158 msgid "Prevent running two pipelines for MRs" msgstr "" -#: ../../../CHANGELOG:153 +#: ../../../CHANGELOG.md:159 msgid "" "Random and less listened radio filter out un-owned content on library " "section (#2007)" msgstr "" -#: ../../../CHANGELOG:154 +#: ../../../CHANGELOG.md:160 msgid "Refactor node info endpoint to use proper serializers" msgstr "" -#: ../../../CHANGELOG:155 +#: ../../../CHANGELOG.md:161 msgid "Refactor SettingsView to use a proper serializer" msgstr "" -#: ../../../CHANGELOG:156 +#: ../../../CHANGELOG.md:162 msgid "Remove unnecessary or wrong `is` keyword usage from backend" msgstr "" -#: ../../../CHANGELOG:157 +#: ../../../CHANGELOG.md:163 msgid "Rename OpenAPI schema's operation ids for nicer API client method names." msgstr "" -#: ../../../CHANGELOG:158 +#: ../../../CHANGELOG.md:164 msgid "" "Replace django-channels package with web socket implementation from " "@vueuse/core (#1715)" msgstr "" -#: ../../../CHANGELOG:159 +#: ../../../CHANGELOG.md:165 msgid "Rewrite embedded player to petite-vue" msgstr "" -#: ../../../CHANGELOG:160 +#: ../../../CHANGELOG.md:166 msgid "Split DATABASE_URL into multiple configuration variables" msgstr "" -#: ../../../CHANGELOG:161 +#: ../../../CHANGELOG.md:167 msgid "The ListenBrainz plugin submits the track duration" msgstr "" -#: ../../../CHANGELOG:162 +#: ../../../CHANGELOG.md:168 msgid "Update Django OAuth Toolkit to version 2, ref #1944" msgstr "" -#: ../../../CHANGELOG:163 +#: ../../../CHANGELOG.md:169 msgid "Update migration after django update (#1815)" msgstr "" -#: ../../../CHANGELOG:164 +#: ../../../CHANGELOG.md:170 msgid "Update upload status when import fails (#1999)" msgstr "" -#: ../../../CHANGELOG:165 +#: ../../../CHANGELOG.md:171 msgid "Updated the installation guides to make installation steps clearer." msgstr "" -#: ../../../CHANGELOG:166 +#: ../../../CHANGELOG.md:172 msgid "Upgrade docker base image to alpine 3.17" msgstr "" -#: ../../../CHANGELOG:167 +#: ../../../CHANGELOG.md:173 msgid "Use proper serializer for Search endpoint (#1902)" msgstr "" -#: ../../../CHANGELOG:170 +#: ../../../CHANGELOG.md:175 msgid "Refactoring:" msgstr "" -#: ../../../CHANGELOG:172 +#: ../../../CHANGELOG.md:177 msgid "" "Instead of requesting the right spa content from the API using a " "middleware we now serve the Frontend directly with nginx and only proxy-" "forward for API endpoints" msgstr "" -#: ../../../CHANGELOG:174 +#: ../../../CHANGELOG.md:179 msgid "Replace django-rest-auth with dj-rest-auth (#1877)" msgstr "" -#: ../../../CHANGELOG:179 +#: ../../../CHANGELOG.md:183 msgid "Allow enabling systemd funkwhale.target" msgstr "" -#: ../../../CHANGELOG:180 +#: ../../../CHANGELOG.md:184 msgid "Allow playback of media from external frontend (#1937)." msgstr "" -#: ../../../CHANGELOG:181 +#: ../../../CHANGELOG.md:185 msgid "Channel overview was displaying foreign tracks (#1773) (1773)" msgstr "" -#: ../../../CHANGELOG:182 +#: ../../../CHANGELOG.md:186 msgid "Fix adding same track multiple times (#1933)" msgstr "" -#: ../../../CHANGELOG:183 +#: ../../../CHANGELOG.md:187 msgid "Fix changing visualizer CORS error (#1934)." msgstr "" -#: ../../../CHANGELOG:184 +#: ../../../CHANGELOG.md:188 msgid "" "Fix content form autofocus despite `autofocus` prop being set to `false` " "(#1924)" msgstr "" -#: ../../../CHANGELOG:185 +#: ../../../CHANGELOG.md:189 msgid "Fix CSP header issues" msgstr "" -#: ../../../CHANGELOG:186 +#: ../../../CHANGELOG.md:190 msgid "Fix CSP issue caused by django-channels package (#1752)" msgstr "" -#: ../../../CHANGELOG:187 +#: ../../../CHANGELOG.md:191 msgid "" "Fix docker API image building with removing autobahn workaround version " "pin" msgstr "" -#: ../../../CHANGELOG:188 +#: ../../../CHANGELOG.md:192 msgid "Fix docker builds on armv7" msgstr "" -#: ../../../CHANGELOG:189 +#: ../../../CHANGELOG.md:193 msgid "Fix docker nginx entrypoint" msgstr "" -#: ../../../CHANGELOG:190 +#: ../../../CHANGELOG.md:194 msgid "Fix editing playlist tracks (#1362)" msgstr "" -#: ../../../CHANGELOG:191 +#: ../../../CHANGELOG.md:195 msgid "Fix embedded player not working on social posts (1946)" msgstr "" -#: ../../../CHANGELOG:192 +#: ../../../CHANGELOG.md:196 msgid "Fix favorite button in queue" msgstr "" -#: ../../../CHANGELOG:193 +#: ../../../CHANGELOG.md:197 msgid "Fix fetching pages of albums in album detail view (#1927)" msgstr "" -#: ../../../CHANGELOG:194 +#: ../../../CHANGELOG.md:198 msgid "Fix global keyboard shortcuts firing when input is focused (#1876)" msgstr "" -#: ../../../CHANGELOG:195 +#: ../../../CHANGELOG.md:199 msgid "Fix OAuth login (#1890)" msgstr "" -#: ../../../CHANGELOG:196 +#: ../../../CHANGELOG.md:200 msgid "Fix play button in albums with multi-page volumes (#1928)" msgstr "" -#: ../../../CHANGELOG:197 +#: ../../../CHANGELOG.md:201 msgid "Fix player closing when queue ends (#1931)" msgstr "" -#: ../../../CHANGELOG:198 +#: ../../../CHANGELOG.md:202 msgid "Fix purging of dangling files #1929" msgstr "" -#: ../../../CHANGELOG:199 +#: ../../../CHANGELOG.md:203 msgid "Fix remote search (#1857)" msgstr "" -#: ../../../CHANGELOG:200 +#: ../../../CHANGELOG.md:204 msgid "Fix search by text in affected views (#1858)" msgstr "" -#: ../../../CHANGELOG:201 +#: ../../../CHANGELOG.md:205 msgid "Fix timeout on spa manifest requests" msgstr "" -#: ../../../CHANGELOG:202 +#: ../../../CHANGELOG.md:206 msgid "" "Fix track table showing all tracks and double pagination in some cases " "(#1923)" msgstr "" -#: ../../../CHANGELOG:203 +#: ../../../CHANGELOG.md:207 msgid "Fix user requests and reports filtering (#1924)" msgstr "" -#: ../../../CHANGELOG:204 +#: ../../../CHANGELOG.md:208 msgid "Fix validity issues in openapi/swagger spec files (#1171)" msgstr "" -#: ../../../CHANGELOG:205 +#: ../../../CHANGELOG.md:209 msgid "" "Fixed an issue which caused links in Markdown forms to not render " "correctly. (#2023)" msgstr "" -#: ../../../CHANGELOG:206 +#: ../../../CHANGELOG.md:210 msgid "Fixed login redirect (1736)" msgstr "" -#: ../../../CHANGELOG:207 +#: ../../../CHANGELOG.md:211 msgid "Fixed remote subscription form in Podcast and search views (#1708)" msgstr "" -#: ../../../CHANGELOG:208 +#: ../../../CHANGELOG.md:212 msgid "Fixed upload form VUE errors (#1738) (1738)" msgstr "" -#: ../../../CHANGELOG:209 ../../../CHANGELOG:473 +#: ../../../CHANGELOG.md:213 ../../../CHANGELOG.md:460 msgid "Fixes channel page (#1729) (1729)" msgstr "" -#: ../../../CHANGELOG:210 +#: ../../../CHANGELOG.md:214 msgid "Fixes development environment set-up with docker (1726)" msgstr "" -#: ../../../CHANGELOG:211 +#: ../../../CHANGELOG.md:215 msgid "Fixes embed player (#1783) (1783)" msgstr "" -#: ../../../CHANGELOG:212 +#: ../../../CHANGELOG.md:216 msgid "Fixes service worker (#1634)" msgstr "" -#: ../../../CHANGELOG:213 +#: ../../../CHANGELOG.md:217 msgid "Fixes track listenings not being sent when tab is not focused" msgstr "" -#: ../../../CHANGELOG:214 +#: ../../../CHANGELOG.md:218 msgid "Hide create custom radio to un-authenticated users (#1720)" msgstr "" -#: ../../../CHANGELOG:215 +#: ../../../CHANGELOG.md:219 msgid "Remove trailing slash from reverse proxy configuration" msgstr "" -#: ../../../CHANGELOG:216 +#: ../../../CHANGELOG.md:220 msgid "Remove unused Footer component (#1660)" msgstr "" -#: ../../../CHANGELOG:217 +#: ../../../CHANGELOG.md:221 msgid "Remove usage of deprecated Model and Serializer fields (#1663)" msgstr "" -#: ../../../CHANGELOG:218 +#: ../../../CHANGELOG.md:222 msgid "" "Skip refreshing local actors in celery federation.refresh_actor_data task" " - fixes disappearing avatars (!1873)" msgstr "" -#: ../../../CHANGELOG:221 ../../../CHANGELOG:527 ../../../CHANGELOG:774 -#: ../../../CHANGELOG:1273 ../../../CHANGELOG:1760 ../../../CHANGELOG:2337 -#: ../../../CHANGELOG:2417 ../../../CHANGELOG:2554 ../../../CHANGELOG:2838 -#: ../../../CHANGELOG:2888 ../../../CHANGELOG:3196 ../../../CHANGELOG:3409 -#: ../../../CHANGELOG:3484 ../../../CHANGELOG:3608 ../../../CHANGELOG:3721 -#: ../../../CHANGELOG:4018 ../../../CHANGELOG:4177 ../../../CHANGELOG:4275 -#: ../../../CHANGELOG:4441 ../../../CHANGELOG:4515 +#: ../../../CHANGELOG.md:224 ../../../CHANGELOG.md:510 +#: ../../../CHANGELOG.md:743 ../../../CHANGELOG.md:1203 +#: ../../../CHANGELOG.md:1666 ../../../CHANGELOG.md:2208 +#: ../../../CHANGELOG.md:2281 ../../../CHANGELOG.md:2415 +#: ../../../CHANGELOG.md:2687 ../../../CHANGELOG.md:2731 +#: ../../../CHANGELOG.md:3034 ../../../CHANGELOG.md:3236 +#: ../../../CHANGELOG.md:3304 ../../../CHANGELOG.md:3421 +#: ../../../CHANGELOG.md:3530 ../../../CHANGELOG.md:3809 +#: ../../../CHANGELOG.md:3968 ../../../CHANGELOG.md:4055 +#: ../../../CHANGELOG.md:4215 ../../../CHANGELOG.md:4283 msgid "Documentation:" msgstr "" -#: ../../../CHANGELOG:223 +#: ../../../CHANGELOG.md:226 msgid "Add ability to translate documentation into multiple languages" msgstr "" -#: ../../../CHANGELOG:224 +#: ../../../CHANGELOG.md:227 msgid "Add restore instructions to backup docs (#1627)." msgstr "" -#: ../../../CHANGELOG:225 +#: ../../../CHANGELOG.md:228 msgid "Added virtualenv upgrade instructions for Debian (#1562)." msgstr "" -#: ../../../CHANGELOG:226 +#: ../../../CHANGELOG.md:229 msgid "Cleaned up documentation" msgstr "" -#: ../../../CHANGELOG:227 +#: ../../../CHANGELOG.md:230 msgid "Document the new login flow of the CLI-tool (#1800)" msgstr "" -#: ../../../CHANGELOG:228 +#: ../../../CHANGELOG.md:231 msgid "Documented LOGLEVEL command (#1541)." msgstr "" -#: ../../../CHANGELOG:229 +#: ../../../CHANGELOG.md:232 msgid "Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624)." msgstr "" -#: ../../../CHANGELOG:230 +#: ../../../CHANGELOG.md:233 msgid "Harden security for debian install docs" msgstr "" -#: ../../../CHANGELOG:231 +#: ../../../CHANGELOG.md:234 msgid "Rewrote documentation contributor guide." msgstr "" -#: ../../../CHANGELOG:232 +#: ../../../CHANGELOG.md:235 msgid "Rewrote the architecture file (#1908)" msgstr "" -#: ../../../CHANGELOG:233 +#: ../../../CHANGELOG.md:236 msgid "Rewrote the federation developer documentation (#1911)" msgstr "" -#: ../../../CHANGELOG:234 +#: ../../../CHANGELOG.md:237 msgid "Rewrote the plugins documentation (#1910)" msgstr "" -#: ../../../CHANGELOG:235 +#: ../../../CHANGELOG.md:238 msgid "Rewrote translators file" msgstr "" -#: ../../../CHANGELOG:236 +#: ../../../CHANGELOG.md:239 msgid "Updated API developer documentation (#1912, #1909)" msgstr "" -#: ../../../CHANGELOG:237 +#: ../../../CHANGELOG.md:240 msgid "" "Updated CONTRIBUTING guide with up-to-date documentation. Created layout " "in documentation hub." msgstr "" -#: ../../../CHANGELOG:240 ../../../CHANGELOG:423 ../../../CHANGELOG:784 -#: ../../../CHANGELOG:2893 ../../../CHANGELOG:3489 ../../../CHANGELOG:3727 -#: ../../../CHANGELOG:4536 ../../../CHANGELOG:4666 +#: ../../../CHANGELOG.md:242 ../../../CHANGELOG.md:413 +#: ../../../CHANGELOG.md:752 ../../../CHANGELOG.md:2735 +#: ../../../CHANGELOG.md:3308 ../../../CHANGELOG.md:3535 +#: ../../../CHANGELOG.md:4300 ../../../CHANGELOG.md:4420 msgid "Other:" msgstr "" -#: ../../../CHANGELOG:242 +#: ../../../CHANGELOG.md:244 msgid "Add a CI job to check if changelog snippet is available" msgstr "" -#: ../../../CHANGELOG:243 +#: ../../../CHANGELOG.md:245 msgid "Add CI broken links checker" msgstr "" -#: ../../../CHANGELOG:244 +#: ../../../CHANGELOG.md:246 msgid "Add pre-commit hooks" msgstr "" -#: ../../../CHANGELOG:246 +#: ../../../CHANGELOG.md:248 msgid "flake8" msgstr "" -#: ../../../CHANGELOG:247 +#: ../../../CHANGELOG.md:249 msgid "black" msgstr "" -#: ../../../CHANGELOG:248 +#: ../../../CHANGELOG.md:250 msgid "isort" msgstr "" -#: ../../../CHANGELOG:249 +#: ../../../CHANGELOG.md:251 msgid "pyupgrade" msgstr "" -#: ../../../CHANGELOG:250 +#: ../../../CHANGELOG.md:252 msgid "prettier" msgstr "" -#: ../../../CHANGELOG:251 +#: ../../../CHANGELOG.md:253 msgid "codespell" msgstr "" -#: ../../../CHANGELOG:252 +#: ../../../CHANGELOG.md:255 msgid "Add pre-commit to development tools" msgstr "" -#: ../../../CHANGELOG:253 +#: ../../../CHANGELOG.md:256 msgid "Align the openapi spec to the actual API wherever possible" msgstr "" -#: ../../../CHANGELOG:254 +#: ../../../CHANGELOG.md:257 msgid "Cache lychee checked urls for 1 day in CI" msgstr "" -#: ../../../CHANGELOG:255 +#: ../../../CHANGELOG.md:258 msgid "Fix api tests warnings by renaming fixtures" msgstr "" -#: ../../../CHANGELOG:256 +#: ../../../CHANGELOG.md:259 msgid "Fix permissions for build artifacts" msgstr "" -#: ../../../CHANGELOG:257 +#: ../../../CHANGELOG.md:260 msgid "Fix shell scripts lint errors" msgstr "" -#: ../../../CHANGELOG:258 +#: ../../../CHANGELOG.md:261 msgid "Format api pyproject.toml" msgstr "" -#: ../../../CHANGELOG:259 +#: ../../../CHANGELOG.md:262 msgid "Format or fix files using pre-commit" msgstr "" -#: ../../../CHANGELOG:261 +#: ../../../CHANGELOG.md:264 msgid "Upgrade code to >=python3.7" msgstr "" -#: ../../../CHANGELOG:262 +#: ../../../CHANGELOG.md:265 msgid "Fix flake8 warnings" msgstr "" -#: ../../../CHANGELOG:263 +#: ../../../CHANGELOG.md:266 msgid "Fix spelling errors" msgstr "" -#: ../../../CHANGELOG:264 +#: ../../../CHANGELOG.md:267 msgid "Format files using black" msgstr "" -#: ../../../CHANGELOG:265 +#: ../../../CHANGELOG.md:268 msgid "Format files using isort" msgstr "" -#: ../../../CHANGELOG:266 +#: ../../../CHANGELOG.md:269 msgid "Format files using prettier" msgstr "" -#: ../../../CHANGELOG:267 +#: ../../../CHANGELOG.md:271 msgid "Move api tools config to pyproject.toml" msgstr "" -#: ../../../CHANGELOG:268 +#: ../../../CHANGELOG.md:272 msgid "Move database url composition from custom script to django settings" msgstr "" -#: ../../../CHANGELOG:269 +#: ../../../CHANGELOG.md:273 msgid "Remove docker_all_in_one_release ci job" msgstr "" -#: ../../../CHANGELOG:270 +#: ../../../CHANGELOG.md:274 msgid "Rename api composer/django/ dir to docker/" msgstr "" -#: ../../../CHANGELOG:271 +#: ../../../CHANGELOG.md:275 msgid "Unpin asgiref in API dependencies" msgstr "" -#: ../../../CHANGELOG:272 +#: ../../../CHANGELOG.md:276 msgid "Use vite for building the frontend, #1644" msgstr "" -#: ../../../CHANGELOG:275 +#: ../../../CHANGELOG.md:278 msgid "Removal:" msgstr "" -#: ../../../CHANGELOG:277 +#: ../../../CHANGELOG.md:280 msgid "" "This release removes support for Python 3.6. Please make sure you update " "your python version before Updating Funkwhale!" msgstr "" -#: ../../../CHANGELOG:282 +#: ../../../CHANGELOG.md:283 msgid "1.2.9 (2022-11-25)" msgstr "" -#: ../../../CHANGELOG:289 +#: ../../../CHANGELOG.md:289 msgid "Ensure index.html files get loaded with UTF-8 encoding" msgstr "" -#: ../../../CHANGELOG:290 +#: ../../../CHANGELOG.md:290 msgid "Fixed invitation reuse after the invited user has been deleted (#1952)" msgstr "" -#: ../../../CHANGELOG:291 +#: ../../../CHANGELOG.md:291 msgid "Fixed unplayable skipped upload (#1349)" msgstr "" -#: ../../../CHANGELOG:293 ../../../CHANGELOG:343 ../../../CHANGELOG:392 -#: ../../../CHANGELOG:427 ../../../CHANGELOG:475 ../../../CHANGELOG:550 -#: ../../../CHANGELOG:788 +#: ../../../CHANGELOG.md:293 ../../../CHANGELOG.md:339 +#: ../../../CHANGELOG.md:385 ../../../CHANGELOG.md:417 +#: ../../../CHANGELOG.md:462 ../../../CHANGELOG.md:533 +#: ../../../CHANGELOG.md:671 ../../../CHANGELOG.md:756 msgid "Committers:" msgstr "" -#: ../../../CHANGELOG:295 ../../../CHANGELOG:303 ../../../CHANGELOG:316 -#: ../../../CHANGELOG:346 ../../../CHANGELOG:356 ../../../CHANGELOG:375 -#: ../../../CHANGELOG:394 ../../../CHANGELOG:404 ../../../CHANGELOG:429 -#: ../../../CHANGELOG:438 ../../../CHANGELOG:455 ../../../CHANGELOG:477 -#: ../../../CHANGELOG:488 ../../../CHANGELOG:503 ../../../CHANGELOG:536 -#: ../../../CHANGELOG:545 ../../../CHANGELOG:552 ../../../CHANGELOG:585 -#: ../../../CHANGELOG:599 ../../../CHANGELOG:609 ../../../CHANGELOG:649 -#: ../../../CHANGELOG:660 ../../../CHANGELOG:667 ../../../CHANGELOG:695 -#: ../../../CHANGELOG:1126 +#: ../../../CHANGELOG.md:295 ../../../CHANGELOG.md:303 +#: ../../../CHANGELOG.md:316 ../../../CHANGELOG.md:342 +#: ../../../CHANGELOG.md:352 ../../../CHANGELOG.md:371 +#: ../../../CHANGELOG.md:387 ../../../CHANGELOG.md:397 +#: ../../../CHANGELOG.md:419 ../../../CHANGELOG.md:428 +#: ../../../CHANGELOG.md:445 ../../../CHANGELOG.md:464 +#: ../../../CHANGELOG.md:475 ../../../CHANGELOG.md:490 +#: ../../../CHANGELOG.md:519 ../../../CHANGELOG.md:528 +#: ../../../CHANGELOG.md:535 ../../../CHANGELOG.md:565 +#: ../../../CHANGELOG.md:579 ../../../CHANGELOG.md:589 +#: ../../../CHANGELOG.md:626 ../../../CHANGELOG.md:637 +#: ../../../CHANGELOG.md:644 ../../../CHANGELOG.md:661 +#: ../../../CHANGELOG.md:669 ../../../CHANGELOG.md:674 +#: ../../../CHANGELOG.md:781 ../../../CHANGELOG.md:826 +#: ../../../CHANGELOG.md:859 ../../../CHANGELOG.md:986 +#: ../../../CHANGELOG.md:1071 msgid "Georg Krause" msgstr "" -#: ../../../CHANGELOG:296 ../../../CHANGELOG:306 ../../../CHANGELOG:318 -#: ../../../CHANGELOG:347 ../../../CHANGELOG:360 ../../../CHANGELOG:378 -#: ../../../CHANGELOG:395 ../../../CHANGELOG:400 ../../../CHANGELOG:405 -#: ../../../CHANGELOG:430 ../../../CHANGELOG:439 ../../../CHANGELOG:456 -#: ../../../CHANGELOG:490 ../../../CHANGELOG:505 ../../../CHANGELOG:538 -#: ../../../CHANGELOG:547 ../../../CHANGELOG:553 ../../../CHANGELOG:588 -#: ../../../CHANGELOG:602 ../../../CHANGELOG:651 ../../../CHANGELOG:662 -#: ../../../CHANGELOG:670 +#: ../../../CHANGELOG.md:296 ../../../CHANGELOG.md:306 +#: ../../../CHANGELOG.md:318 ../../../CHANGELOG.md:343 +#: ../../../CHANGELOG.md:356 ../../../CHANGELOG.md:374 +#: ../../../CHANGELOG.md:388 ../../../CHANGELOG.md:393 +#: ../../../CHANGELOG.md:398 ../../../CHANGELOG.md:420 +#: ../../../CHANGELOG.md:429 ../../../CHANGELOG.md:446 +#: ../../../CHANGELOG.md:477 ../../../CHANGELOG.md:492 +#: ../../../CHANGELOG.md:521 ../../../CHANGELOG.md:530 +#: ../../../CHANGELOG.md:536 ../../../CHANGELOG.md:568 +#: ../../../CHANGELOG.md:582 ../../../CHANGELOG.md:628 +#: ../../../CHANGELOG.md:639 ../../../CHANGELOG.md:647 +#: ../../../CHANGELOG.md:793 ../../../CHANGELOG.md:832 +#: ../../../CHANGELOG.md:863 msgid "Marcos Peña" msgstr "" -#: ../../../CHANGELOG:297 ../../../CHANGELOG:319 ../../../CHANGELOG:1131 +#: ../../../CHANGELOG.md:297 ../../../CHANGELOG.md:319 +#: ../../../CHANGELOG.md:799 ../../../CHANGELOG.md:836 +#: ../../../CHANGELOG.md:867 ../../../CHANGELOG.md:998 +#: ../../../CHANGELOG.md:1076 msgid "Philipp Wolfer" msgstr "" -#: ../../../CHANGELOG:298 +#: ../../../CHANGELOG.md:298 msgid "Travis Briggs" msgstr "" -#: ../../../CHANGELOG:300 ../../../CHANGELOG:351 ../../../CHANGELOG:397 -#: ../../../CHANGELOG:434 ../../../CHANGELOG:482 ../../../CHANGELOG:531 -#: ../../../CHANGELOG:579 ../../../CHANGELOG:646 ../../../CHANGELOG:684 -#: ../../../CHANGELOG:848 +#: ../../../CHANGELOG.md:300 ../../../CHANGELOG.md:347 +#: ../../../CHANGELOG.md:390 ../../../CHANGELOG.md:424 +#: ../../../CHANGELOG.md:469 ../../../CHANGELOG.md:514 +#: ../../../CHANGELOG.md:559 ../../../CHANGELOG.md:623 +#: ../../../CHANGELOG.md:658 ../../../CHANGELOG.md:816 msgid "Contributors to our Issues:" msgstr "" -#: ../../../CHANGELOG:302 ../../../CHANGELOG:345 ../../../CHANGELOG:355 -#: ../../../CHANGELOG:374 ../../../CHANGELOG:399 ../../../CHANGELOG:442 -#: ../../../CHANGELOG:487 ../../../CHANGELOG:502 ../../../CHANGELOG:535 -#: ../../../CHANGELOG:584 ../../../CHANGELOG:598 ../../../CHANGELOG:648 -#: ../../../CHANGELOG:659 ../../../CHANGELOG:666 ../../../CHANGELOG:1123 -#: ../../../CHANGELOG:1158 ../../../CHANGELOG:1285 ../../../CHANGELOG:1334 -#: ../../../CHANGELOG:1391 ../../../CHANGELOG:1675 ../../../CHANGELOG:1767 -#: ../../../CHANGELOG:2077 ../../../CHANGELOG:2140 ../../../CHANGELOG:2347 +#: ../../../CHANGELOG.md:302 ../../../CHANGELOG.md:341 +#: ../../../CHANGELOG.md:351 ../../../CHANGELOG.md:370 +#: ../../../CHANGELOG.md:392 ../../../CHANGELOG.md:432 +#: ../../../CHANGELOG.md:474 ../../../CHANGELOG.md:489 +#: ../../../CHANGELOG.md:518 ../../../CHANGELOG.md:564 +#: ../../../CHANGELOG.md:578 ../../../CHANGELOG.md:625 +#: ../../../CHANGELOG.md:636 ../../../CHANGELOG.md:643 +#: ../../../CHANGELOG.md:660 ../../../CHANGELOG.md:768 +#: ../../../CHANGELOG.md:822 ../../../CHANGELOG.md:853 +#: ../../../CHANGELOG.md:976 ../../../CHANGELOG.md:1068 +#: ../../../CHANGELOG.md:1100 ../../../CHANGELOG.md:1214 +#: ../../../CHANGELOG.md:1259 ../../../CHANGELOG.md:1309 +#: ../../../CHANGELOG.md:1586 ../../../CHANGELOG.md:1672 +#: ../../../CHANGELOG.md:1970 ../../../CHANGELOG.md:2028 +#: ../../../CHANGELOG.md:2218 msgid "Ciarán Ainsworth" msgstr "" -#: ../../../CHANGELOG:304 ../../../CHANGELOG:317 ../../../CHANGELOG:357 -#: ../../../CHANGELOG:376 ../../../CHANGELOG:445 ../../../CHANGELOG:489 -#: ../../../CHANGELOG:504 ../../../CHANGELOG:537 ../../../CHANGELOG:546 -#: ../../../CHANGELOG:586 ../../../CHANGELOG:600 ../../../CHANGELOG:610 -#: ../../../CHANGELOG:650 ../../../CHANGELOG:661 ../../../CHANGELOG:668 +#: ../../../CHANGELOG.md:304 ../../../CHANGELOG.md:317 +#: ../../../CHANGELOG.md:353 ../../../CHANGELOG.md:372 +#: ../../../CHANGELOG.md:435 ../../../CHANGELOG.md:476 +#: ../../../CHANGELOG.md:491 ../../../CHANGELOG.md:520 +#: ../../../CHANGELOG.md:529 ../../../CHANGELOG.md:566 +#: ../../../CHANGELOG.md:580 ../../../CHANGELOG.md:590 +#: ../../../CHANGELOG.md:627 ../../../CHANGELOG.md:638 +#: ../../../CHANGELOG.md:645 ../../../CHANGELOG.md:675 +#: ../../../CHANGELOG.md:788 ../../../CHANGELOG.md:829 +#: ../../../CHANGELOG.md:861 msgid "JuniorJPDJ" msgstr "" -#: ../../../CHANGELOG:305 ../../../CHANGELOG:358 ../../../CHANGELOG:377 -#: ../../../CHANGELOG:587 ../../../CHANGELOG:601 +#: ../../../CHANGELOG.md:305 ../../../CHANGELOG.md:354 +#: ../../../CHANGELOG.md:373 ../../../CHANGELOG.md:567 +#: ../../../CHANGELOG.md:581 ../../../CHANGELOG.md:862 msgid "Kasper Seweryn" msgstr "" -#: ../../../CHANGELOG:307 ../../../CHANGELOG:491 ../../../CHANGELOG:539 -#: ../../../CHANGELOG:589 ../../../CHANGELOG:652 +#: ../../../CHANGELOG.md:307 ../../../CHANGELOG.md:478 +#: ../../../CHANGELOG.md:522 ../../../CHANGELOG.md:569 +#: ../../../CHANGELOG.md:629 ../../../CHANGELOG.md:663 +#: ../../../CHANGELOG.md:834 ../../../CHANGELOG.md:864 msgid "Mathieu Jourdan" msgstr "" -#: ../../../CHANGELOG:308 ../../../CHANGELOG:362 ../../../CHANGELOG:441 -#: ../../../CHANGELOG:493 ../../../CHANGELOG:540 ../../../CHANGELOG:591 -#: ../../../CHANGELOG:653 +#: ../../../CHANGELOG.md:308 ../../../CHANGELOG.md:358 +#: ../../../CHANGELOG.md:431 ../../../CHANGELOG.md:480 +#: ../../../CHANGELOG.md:523 ../../../CHANGELOG.md:571 +#: ../../../CHANGELOG.md:630 ../../../CHANGELOG.md:664 +#: ../../../CHANGELOG.md:796 ../../../CHANGELOG.md:835 +#: ../../../CHANGELOG.md:866 msgid "Micha Gläß-Stöcker" msgstr "" -#: ../../../CHANGELOG:309 ../../../CHANGELOG:320 +#: ../../../CHANGELOG.md:309 ../../../CHANGELOG.md:320 msgid "fuomag9" msgstr "" -#: ../../../CHANGELOG:310 +#: ../../../CHANGELOG.md:310 msgid "gammelalf" msgstr "" -#: ../../../CHANGELOG:311 +#: ../../../CHANGELOG.md:311 msgid "myOmikron" msgstr "" -#: ../../../CHANGELOG:312 ../../../CHANGELOG:369 ../../../CHANGELOG:497 -#: ../../../CHANGELOG:509 ../../../CHANGELOG:541 ../../../CHANGELOG:548 -#: ../../../CHANGELOG:594 ../../../CHANGELOG:604 ../../../CHANGELOG:655 +#: ../../../CHANGELOG.md:312 ../../../CHANGELOG.md:365 +#: ../../../CHANGELOG.md:484 ../../../CHANGELOG.md:496 +#: ../../../CHANGELOG.md:524 ../../../CHANGELOG.md:531 +#: ../../../CHANGELOG.md:574 ../../../CHANGELOG.md:584 +#: ../../../CHANGELOG.md:632 ../../../CHANGELOG.md:665 +#: ../../../CHANGELOG.md:797 ../../../CHANGELOG.md:846 +#: ../../../CHANGELOG.md:872 msgid "petitminion" msgstr "" -#: ../../../CHANGELOG:314 ../../../CHANGELOG:372 ../../../CHANGELOG:402 -#: ../../../CHANGELOG:452 ../../../CHANGELOG:500 ../../../CHANGELOG:543 -#: ../../../CHANGELOG:596 ../../../CHANGELOG:657 ../../../CHANGELOG:693 -#: ../../../CHANGELOG:881 +#: ../../../CHANGELOG.md:314 ../../../CHANGELOG.md:368 +#: ../../../CHANGELOG.md:395 ../../../CHANGELOG.md:442 +#: ../../../CHANGELOG.md:487 ../../../CHANGELOG.md:526 +#: ../../../CHANGELOG.md:576 ../../../CHANGELOG.md:634 +#: ../../../CHANGELOG.md:667 ../../../CHANGELOG.md:849 msgid "Contributors to our Merge Requests:" msgstr "" -#: ../../../CHANGELOG:324 +#: ../../../CHANGELOG.md:322 msgid "1.2.8 (2022-09-12)" msgstr "" -#: ../../../CHANGELOG:331 +#: ../../../CHANGELOG.md:328 msgid "Add Sentry SDK to collect errors at the backend" msgstr "" -#: ../../../CHANGELOG:336 +#: ../../../CHANGELOG.md:332 msgid "" "Fix exponentially growing database when using in-place-imports on a " "regular base #1676" msgstr "" -#: ../../../CHANGELOG:337 +#: ../../../CHANGELOG.md:333 msgid "Fix navigating to registration request not showing anything (#1836)" msgstr "" -#: ../../../CHANGELOG:338 +#: ../../../CHANGELOG.md:334 msgid "Fix player cover image overlapping queue list" msgstr "" -#: ../../../CHANGELOG:339 +#: ../../../CHANGELOG.md:335 msgid "Fixed metadata handling for Various Artists albums (#1201)" msgstr "" -#: ../../../CHANGELOG:340 +#: ../../../CHANGELOG.md:336 msgid "Fixed search behaviour in radio builder's filters (#733)" msgstr "" -#: ../../../CHANGELOG:341 +#: ../../../CHANGELOG.md:337 msgid "Fixed unpredictable subsonic search3 results (#1782)" msgstr "" -#: ../../../CHANGELOG:348 +#: ../../../CHANGELOG.md:344 msgid "Mathias Koehler" msgstr "" -#: ../../../CHANGELOG:349 ../../../CHANGELOG:432 ../../../CHANGELOG:437 -#: ../../../CHANGELOG:454 +#: ../../../CHANGELOG.md:345 ../../../CHANGELOG.md:422 +#: ../../../CHANGELOG.md:427 ../../../CHANGELOG.md:444 msgid "wvffle" msgstr "" -#: ../../../CHANGELOG:353 ../../../CHANGELOG:440 +#: ../../../CHANGELOG.md:349 ../../../CHANGELOG.md:430 +#: ../../../CHANGELOG.md:818 msgid "AMoonRabbit" msgstr "" -#: ../../../CHANGELOG:354 ../../../CHANGELOG:444 ../../../CHANGELOG:484 -#: ../../../CHANGELOG:581 ../../../CHANGELOG:1121 ../../../CHANGELOG:1156 -#: ../../../CHANGELOG:1280 ../../../CHANGELOG:1332 ../../../CHANGELOG:1390 -#: ../../../CHANGELOG:1670 ../../../CHANGELOG:1770 ../../../CHANGELOG:2078 -#: ../../../CHANGELOG:2143 ../../../CHANGELOG:2350 +#: ../../../CHANGELOG.md:350 ../../../CHANGELOG.md:434 +#: ../../../CHANGELOG.md:471 ../../../CHANGELOG.md:561 +#: ../../../CHANGELOG.md:819 ../../../CHANGELOG.md:851 +#: ../../../CHANGELOG.md:967 ../../../CHANGELOG.md:1066 +#: ../../../CHANGELOG.md:1098 ../../../CHANGELOG.md:1209 +#: ../../../CHANGELOG.md:1257 ../../../CHANGELOG.md:1308 +#: ../../../CHANGELOG.md:1581 ../../../CHANGELOG.md:1675 +#: ../../../CHANGELOG.md:1971 ../../../CHANGELOG.md:2031 +#: ../../../CHANGELOG.md:2221 msgid "Agate" msgstr "" -#: ../../../CHANGELOG:359 +#: ../../../CHANGELOG.md:355 msgid "Kelvin Hammond" msgstr "" -#: ../../../CHANGELOG:361 ../../../CHANGELOG:1292 +#: ../../../CHANGELOG.md:357 ../../../CHANGELOG.md:995 +#: ../../../CHANGELOG.md:1221 msgid "Meliurwen" msgstr "" -#: ../../../CHANGELOG:363 +#: ../../../CHANGELOG.md:359 msgid "Miv2nir" msgstr "" -#: ../../../CHANGELOG:364 +#: ../../../CHANGELOG.md:360 msgid "Sam Birch" msgstr "" -#: ../../../CHANGELOG:365 +#: ../../../CHANGELOG.md:361 msgid "Tolriq" msgstr "" -#: ../../../CHANGELOG:366 ../../../CHANGELOG:495 ../../../CHANGELOG:1395 -#: ../../../CHANGELOG:1706 +#: ../../../CHANGELOG.md:362 ../../../CHANGELOG.md:482 +#: ../../../CHANGELOG.md:812 ../../../CHANGELOG.md:839 +#: ../../../CHANGELOG.md:869 ../../../CHANGELOG.md:1313 +#: ../../../CHANGELOG.md:1617 msgid "Tony Wasserka" msgstr "" -#: ../../../CHANGELOG:367 +#: ../../../CHANGELOG.md:363 msgid "f1reflyyyylmao" msgstr "" -#: ../../../CHANGELOG:368 ../../../CHANGELOG:443 ../../../CHANGELOG:1127 +#: ../../../CHANGELOG.md:364 ../../../CHANGELOG.md:433 +#: ../../../CHANGELOG.md:784 ../../../CHANGELOG.md:842 +#: ../../../CHANGELOG.md:870 ../../../CHANGELOG.md:989 +#: ../../../CHANGELOG.md:1072 msgid "heyarne" msgstr "" -#: ../../../CHANGELOG:370 +#: ../../../CHANGELOG.md:366 msgid "troll" msgstr "" -#: ../../../CHANGELOG:379 +#: ../../../CHANGELOG.md:375 msgid "interru" msgstr "" -#: ../../../CHANGELOG:383 +#: ../../../CHANGELOG.md:377 msgid "1.2.7 (2022-07-14)" -msgstr "" +msgstr "1.2.7 (2022-07-14)" -#: ../../../CHANGELOG:390 +#: ../../../CHANGELOG.md:383 msgid "Fixed libre.fm plugin not submitting scrobbles (#1817)" msgstr "" -#: ../../../CHANGELOG:408 +#: ../../../CHANGELOG.md:400 msgid "1.2.6 (2022-07-04)" msgstr "" -#: ../../../CHANGELOG:415 +#: ../../../CHANGELOG.md:406 msgid "Channel overview was displaying foreign tracks (#1773)" msgstr "" -#: ../../../CHANGELOG:416 +#: ../../../CHANGELOG.md:407 msgid "" "Fixed login form focusing reset password link instead of next input " "(#1373)" msgstr "" -#: ../../../CHANGELOG:417 +#: ../../../CHANGELOG.md:408 msgid "Fixed missing album contextual menu (#1791)" msgstr "" -#: ../../../CHANGELOG:418 +#: ../../../CHANGELOG.md:409 msgid "Fixed single listening submission when repeating a song (#1312)" msgstr "" -#: ../../../CHANGELOG:419 +#: ../../../CHANGELOG.md:410 msgid "Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263)" msgstr "" -#: ../../../CHANGELOG:420 +#: ../../../CHANGELOG.md:411 msgid "Resolve timeouts if nodeinfo and service actor is not known (#1714)" msgstr "" -#: ../../../CHANGELOG:425 +#: ../../../CHANGELOG.md:415 msgid "Replaced references to #funkwhale-troubleshooting with #funkwhale-support" msgstr "" -#: ../../../CHANGELOG:431 ../../../CHANGELOG:450 ../../../CHANGELOG:457 -#: ../../../CHANGELOG:612 +#: ../../../CHANGELOG.md:421 ../../../CHANGELOG.md:440 +#: ../../../CHANGELOG.md:447 ../../../CHANGELOG.md:592 +#: ../../../CHANGELOG.md:798 msgid "Petitminion" msgstr "" -#: ../../../CHANGELOG:436 +#: ../../../CHANGELOG.md:426 msgid "jeweet" msgstr "" -#: ../../../CHANGELOG:446 +#: ../../../CHANGELOG.md:436 msgid "MichaelBechHansen" msgstr "" -#: ../../../CHANGELOG:447 +#: ../../../CHANGELOG.md:437 msgid "ooZberg" msgstr "" -#: ../../../CHANGELOG:448 +#: ../../../CHANGELOG.md:438 msgid "Esras ." msgstr "" -#: ../../../CHANGELOG:449 ../../../CHANGELOG:507 +#: ../../../CHANGELOG.md:439 ../../../CHANGELOG.md:494 msgid "PhieF" msgstr "" -#: ../../../CHANGELOG:460 +#: ../../../CHANGELOG.md:449 msgid "1.2.5 (2022-05-07)" msgstr "" -#: ../../../CHANGELOG:472 +#: ../../../CHANGELOG.md:459 msgid "Fix stopped player to not show 00:00 when loading a track (#1432)" msgstr "" -#: ../../../CHANGELOG:478 +#: ../../../CHANGELOG.md:465 ../../../CHANGELOG.md:792 msgid "Marcos" msgstr "" -#: ../../../CHANGELOG:479 ../../../CHANGELOG:492 ../../../CHANGELOG:506 -#: ../../../CHANGELOG:554 ../../../CHANGELOG:590 ../../../CHANGELOG:603 -#: ../../../CHANGELOG:611 +#: ../../../CHANGELOG.md:466 ../../../CHANGELOG.md:479 +#: ../../../CHANGELOG.md:493 ../../../CHANGELOG.md:537 +#: ../../../CHANGELOG.md:570 ../../../CHANGELOG.md:583 +#: ../../../CHANGELOG.md:591 msgid "MattDHarding" msgstr "" -#: ../../../CHANGELOG:480 ../../../CHANGELOG:494 ../../../CHANGELOG:508 +#: ../../../CHANGELOG.md:467 ../../../CHANGELOG.md:481 +#: ../../../CHANGELOG.md:495 msgid "Stuart Begley-Miller" msgstr "" -#: ../../../CHANGELOG:485 ../../../CHANGELOG:533 +#: ../../../CHANGELOG.md:472 ../../../CHANGELOG.md:516 msgid "Beto Dealmeida" msgstr "" -#: ../../../CHANGELOG:486 ../../../CHANGELOG:534 +#: ../../../CHANGELOG.md:473 ../../../CHANGELOG.md:517 msgid "Cam Sweeney" msgstr "" -#: ../../../CHANGELOG:496 ../../../CHANGELOG:593 ../../../CHANGELOG:1129 -#: ../../../CHANGELOG:2357 +#: ../../../CHANGELOG.md:483 ../../../CHANGELOG.md:573 +#: ../../../CHANGELOG.md:787 ../../../CHANGELOG.md:844 +#: ../../../CHANGELOG.md:871 ../../../CHANGELOG.md:993 +#: ../../../CHANGELOG.md:1074 ../../../CHANGELOG.md:2228 msgid "jovuit" msgstr "" -#: ../../../CHANGELOG:498 +#: ../../../CHANGELOG.md:485 msgid "pullopen" msgstr "" -#: ../../../CHANGELOG:512 +#: ../../../CHANGELOG.md:498 msgid "1.2.4 (2022-04-23)" msgstr "" -#: ../../../CHANGELOG:519 +#: ../../../CHANGELOG.md:504 msgid "Hand cursor now displayed over artist and album cards" msgstr "" -#: ../../../CHANGELOG:524 +#: ../../../CHANGELOG.md:508 msgid "Fixes docs' SMTP URI configuration (#1749) (1749)" msgstr "" -#: ../../../CHANGELOG:529 +#: ../../../CHANGELOG.md:512 msgid "The documentation is now available in two versions: Develop and Stable" msgstr "" -#: ../../../CHANGELOG:558 +#: ../../../CHANGELOG.md:539 msgid "1.2.3 (2022-03-18)" msgstr "" -#: ../../../CHANGELOG:565 +#: ../../../CHANGELOG.md:545 msgid "Added support for all cover sources in the embedded player (#1697)." msgstr "" -#: ../../../CHANGELOG:571 +#: ../../../CHANGELOG.md:551 msgid "Catch ValueError on radio end (#1596)" msgstr "" -#: ../../../CHANGELOG:572 +#: ../../../CHANGELOG.md:552 msgid "Fix bug that prevents users from creating a new oauth application (#1706)" msgstr "" -#: ../../../CHANGELOG:573 +#: ../../../CHANGELOG.md:553 msgid "Fix failed track adding to playlist being silent (#1020)" msgstr "" -#: ../../../CHANGELOG:574 +#: ../../../CHANGELOG.md:554 msgid "Fix recently added radio not working has expected (#1674)" msgstr "" -#: ../../../CHANGELOG:575 +#: ../../../CHANGELOG.md:555 msgid "" "Fixed an issue where you couldn't load the details page for tracks with " "no associated album (#1703)" msgstr "" -#: ../../../CHANGELOG:576 +#: ../../../CHANGELOG.md:556 msgid "Fixed library visibility dropdown (#1384)" msgstr "" -#: ../../../CHANGELOG:577 +#: ../../../CHANGELOG.md:557 msgid "" "In playlist editor can now click outside the trashcan but inside the " "button to delete entry (#1348)" msgstr "" -#: ../../../CHANGELOG:582 +#: ../../../CHANGELOG.md:562 msgid "Baudouin Feildel" msgstr "" -#: ../../../CHANGELOG:583 +#: ../../../CHANGELOG.md:563 ../../../CHANGELOG.md:766 msgid "Christoph Pomaska" msgstr "" -#: ../../../CHANGELOG:592 +#: ../../../CHANGELOG.md:572 msgid "dnikolov" msgstr "" -#: ../../../CHANGELOG:606 ../../../CHANGELOG:664 +#: ../../../CHANGELOG.md:586 ../../../CHANGELOG.md:641 msgid "Committers" msgstr "" -#: ../../../CHANGELOG:608 +#: ../../../CHANGELOG.md:588 ../../../CHANGELOG.md:767 msgid "Ciaran Ainsworth" msgstr "" -#: ../../../CHANGELOG:613 +#: ../../../CHANGELOG.md:593 msgid "Reinhard Prechtl" msgstr "" -#: ../../../CHANGELOG:617 +#: ../../../CHANGELOG.md:595 msgid "1.2.2 (2022-02-04)" msgstr "" -#: ../../../CHANGELOG:624 +#: ../../../CHANGELOG.md:601 msgid "" "Fix an issue where the tracks tab in a library doesn't show any tracks " "(#1683)" msgstr "" -#: ../../../CHANGELOG:625 +#: ../../../CHANGELOG.md:602 msgid "Fix an issue with the embedded player not showing any content (#1675)" msgstr "" -#: ../../../CHANGELOG:626 +#: ../../../CHANGELOG.md:603 msgid "Fix broken instance description if it contains a line break #1673" msgstr "" -#: ../../../CHANGELOG:628 +#: ../../../CHANGELOG.md:605 msgid "Dependency Updates:" msgstr "" -#: ../../../CHANGELOG:630 -msgid "" -"Update dependency vue-template-compiler to 2.6.14 Update dependency vue " -"to ^2.6.14 Update dependency vuex-persistedstate to ^2.7.1 Update " -"dependency vuedraggable to ^2.24.3 Update dependency vue-lazyload to " -"^1.3.3 Update dependency vue-plyr to ^5.1.3 Update dependency vue-upload-" -"component to ^2.8.22 Update dependency vue-gettext to ^2.1.12 Update " -"dependency showdown to ^1.9.1 Update dependency js-logger to ^1.6.1 " -"Update dependency register-service-worker to ^1.7.2 Update dependency " -"howler to ^2.2.3 Update dependency fomantic-ui-css to ^2.8.8 Update " -"dependency diff to ^4.0.2 Update dependency axios-auth-refresh to ^2.2.8" +#: ../../../CHANGELOG.md:607 +msgid "Update dependency vue-template-compiler to 2.6.14" msgstr "" -#: ../../../CHANGELOG:654 +#: ../../../CHANGELOG.md:608 +msgid "Update dependency vue to ^2.6.14" +msgstr "" + +#: ../../../CHANGELOG.md:609 +msgid "Update dependency vuex-persistedstate to ^2.7.1" +msgstr "" + +#: ../../../CHANGELOG.md:610 +msgid "Update dependency vuedraggable to ^2.24.3" +msgstr "" + +#: ../../../CHANGELOG.md:611 +msgid "Update dependency vue-lazyload to ^1.3.3" +msgstr "" + +#: ../../../CHANGELOG.md:612 +msgid "Update dependency vue-plyr to ^5.1.3" +msgstr "" + +#: ../../../CHANGELOG.md:613 +msgid "Update dependency vue-upload-component to ^2.8.22" +msgstr "" + +#: ../../../CHANGELOG.md:614 +msgid "Update dependency vue-gettext to ^2.1.12" +msgstr "" + +#: ../../../CHANGELOG.md:615 +msgid "Update dependency showdown to ^1.9.1" +msgstr "" + +#: ../../../CHANGELOG.md:616 +msgid "Update dependency js-logger to ^1.6.1" +msgstr "" + +#: ../../../CHANGELOG.md:617 +msgid "Update dependency register-service-worker to ^1.7.2" +msgstr "" + +#: ../../../CHANGELOG.md:618 +msgid "Update dependency howler to ^2.2.3" +msgstr "" + +#: ../../../CHANGELOG.md:619 +msgid "Update dependency fomantic-ui-css to ^2.8.8" +msgstr "" + +#: ../../../CHANGELOG.md:620 +msgid "Update dependency diff to ^4.0.2" +msgstr "" + +#: ../../../CHANGELOG.md:621 +msgid "Update dependency axios-auth-refresh to ^2.2.8" +msgstr "" + +#: ../../../CHANGELOG.md:631 msgid "Ricardo" msgstr "" -#: ../../../CHANGELOG:669 ../../../CHANGELOG:1688 ../../../CHANGELOG:2086 +#: ../../../CHANGELOG.md:646 ../../../CHANGELOG.md:1599 +#: ../../../CHANGELOG.md:1979 msgid "Keunes" msgstr "" -#: ../../../CHANGELOG:674 +#: ../../../CHANGELOG.md:649 msgid "1.2.1 (2022-01-06)" msgstr "" -#: ../../../CHANGELOG:681 +#: ../../../CHANGELOG.md:655 msgid "Fix Pipeline for stable release builds (#1652)" msgstr "" -#: ../../../CHANGELOG:682 +#: ../../../CHANGELOG.md:656 msgid "Fix remote content page (#1655)" msgstr "" -#: ../../../CHANGELOG:686 -msgid "" -"Ciarán Ainsworth Georg Krause Jakob Schürz Mathieu Jourdan Micha " -"Gläß-Stöcker petitminion" +#: ../../../CHANGELOG.md:662 +msgid "Jakob Schürz" msgstr "" -#: ../../../CHANGELOG:697 -msgid "Committers: Dignified Silence Georg Krause JuniorJPDJ nztvar" +#: ../../../CHANGELOG.md:673 ../../../CHANGELOG.md:774 +msgid "Dignified Silence" msgstr "" -#: ../../../CHANGELOG:705 +#: ../../../CHANGELOG.md:676 +msgid "nztvar" +msgstr "" + +#: ../../../CHANGELOG.md:678 msgid "1.2.0 (2021-12-27)" msgstr "" -#: ../../../CHANGELOG:710 +#: ../../../CHANGELOG.md:682 msgid "" "Due to a bug in our CI Pipeline frontend artifacts are not available at " "https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/1.2.0/download?job=build_front" @@ -1406,31 +1550,31 @@ msgid "" "https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download" msgstr "" -#: ../../../CHANGELOG:714 +#: ../../../CHANGELOG.md:686 msgid "" "If you are running the All-in-One-Container since a longer time, you " "probably need to manually migrate your database information. If that's " "the case, you will get a message like this:" msgstr "" -#: ../../../CHANGELOG:716 +#: ../../../CHANGELOG.md:688 msgid "" -"`DETAIL: The data directory was initialized by PostgreSQL version 11, " +"`DETAIL: The data directory was initialized by PostgreSQL version 11, " "which is not compatible with this version 13.5.`" msgstr "" -#: ../../../CHANGELOG:718 +#: ../../../CHANGELOG.md:690 msgid "" "Make sure the Funkwhale version is set to `1.1.4` in `docker-" "compose.yml`. Now you can run this command to dump the database into a " "file:" msgstr "" -#: ../../../CHANGELOG:720 +#: ../../../CHANGELOG.md:692 msgid "`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > \"db.dump\"`" msgstr "" -#: ../../../CHANGELOG:722 +#: ../../../CHANGELOG.md:694 msgid "" "Now you can update the Funkwhale version in `docker-compose.yml` to " "`1.2.0`. Additionally you should save your `data` directory, eg by " @@ -1442,1141 +1586,1354 @@ msgid "" "That's it, enjoy!" msgstr "" -#: ../../../CHANGELOG:726 +#: ../../../CHANGELOG.md:698 msgid "Implemented awesome recently added radio (part of #1390)" msgstr "" -#: ../../../CHANGELOG:727 +#: ../../../CHANGELOG.md:699 msgid "Rework the instance about page (#1376)" msgstr "" -#: ../../../CHANGELOG:728 +#: ../../../CHANGELOG.md:700 msgid "Made changes to the track table to make it more visibly pleasing" msgstr "" -#: ../../../CHANGELOG:733 +#: ../../../CHANGELOG.md:704 msgid "Add linting for Frontend code (#1602)" msgstr "" -#: ../../../CHANGELOG:734 +#: ../../../CHANGELOG.md:705 msgid "Add xmlns:content to feed schemas fixes #1535" msgstr "" -#: ../../../CHANGELOG:735 +#: ../../../CHANGELOG.md:706 msgid "Add a Maloja plugin to submit listenings" msgstr "" -#: ../../../CHANGELOG:736 +#: ../../../CHANGELOG.md:707 msgid "Add artist cover art in subsonic API response (#1528)" msgstr "" -#: ../../../CHANGELOG:737 +#: ../../../CHANGELOG.md:708 msgid "Allow listen activities privacy level to be set public" msgstr "" -#: ../../../CHANGELOG:738 +#: ../../../CHANGELOG.md:709 msgid "" "Allow running multi-container setup on non-root user inside docker " "(!1375) (fixes #1334)" msgstr "" -#: ../../../CHANGELOG:739 +#: ../../../CHANGELOG.md:710 msgid "Change volume dynamic range from 60dB to 40dB (fixes #1544)" msgstr "" -#: ../../../CHANGELOG:740 +#: ../../../CHANGELOG.md:711 msgid "Change Start Radio to Play Radio (#1400)" msgstr "" -#: ../../../CHANGELOG:741 +#: ../../../CHANGELOG.md:712 msgid "Display toast when subsonic password is copied (#1496)" msgstr "" -#: ../../../CHANGELOG:742 +#: ../../../CHANGELOG.md:713 msgid "Expose more metadata in Subsonic's getAlbumList endpoint (#623)" msgstr "" -#: ../../../CHANGELOG:743 +#: ../../../CHANGELOG.md:714 msgid "ListenBrainz: Submit media player and submission client information" msgstr "" -#: ../../../CHANGELOG:744 +#: ../../../CHANGELOG.md:715 msgid "" "Make \"play in list\" the default when interacting with individual tracks" " (#1274)" msgstr "" -#: ../../../CHANGELOG:745 +#: ../../../CHANGELOG.md:716 msgid "" "Prevent an uncontrolled exception when uploading a file without tags, and" " prints user friendly message (1275)" msgstr "" -#: ../../../CHANGELOG:746 +#: ../../../CHANGELOG.md:717 msgid "Remove deprecated JWT Authentication (#1108) (1108)" msgstr "" -#: ../../../CHANGELOG:747 +#: ../../../CHANGELOG.md:718 msgid "Remove Raven SDK to report errors to Sentry (#1425) (1425)" msgstr "" -#: ../../../CHANGELOG:748 +#: ../../../CHANGELOG.md:719 msgid "Replace psycopg2-binary with psycopg2 (#1513)" msgstr "" -#: ../../../CHANGELOG:753 ../../../CHANGELOG:929 +#: ../../../CHANGELOG.md:723 ../../../CHANGELOG.md:892 msgid "Add worker-src to nginx header to prevent issues (#1489)" msgstr "" -#: ../../../CHANGELOG:754 +#: ../../../CHANGELOG.md:724 msgid "Enable stepless adjustment of the volume slider (!1294)" msgstr "" -#: ../../../CHANGELOG:755 +#: ../../../CHANGELOG.md:725 msgid "" "Fix an error in a Subsonic methods that return lists of numbers/strings " "like getUser" msgstr "" -#: ../../../CHANGELOG:756 +#: ../../../CHANGELOG.md:726 msgid "Fix showing too long radio descriptions (#1556)" msgstr "" -#: ../../../CHANGELOG:757 +#: ../../../CHANGELOG.md:727 msgid "" "Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN " "value for other pages (fix #1022)" msgstr "" -#: ../../../CHANGELOG:758 +#: ../../../CHANGELOG.md:728 msgid "Fix before last track starts playing when last track removed (#1485)" msgstr "" -#: ../../../CHANGELOG:759 +#: ../../../CHANGELOG.md:729 msgid "Fix delete account button is not disabled when missing password (#1591)" msgstr "" -#: ../../../CHANGELOG:760 +#: ../../../CHANGELOG.md:730 msgid "Fix omputed properties already defined in components data (#1649)" msgstr "" -#: ../../../CHANGELOG:761 +#: ../../../CHANGELOG.md:731 msgid "Fix the all in one docker image building process, related to #1503" msgstr "" -#: ../../../CHANGELOG:762 +#: ../../../CHANGELOG.md:732 msgid "Fix crash in album moderation interface when missing cover (#1474)" msgstr "" -#: ../../../CHANGELOG:763 +#: ../../../CHANGELOG.md:733 msgid "Fix subsonic scrobble not triggering plugin hook (#1416)" msgstr "" -#: ../../../CHANGELOG:764 +#: ../../../CHANGELOG.md:734 msgid "Improve formatting of RSS episode descriptions (#1405)" msgstr "" -#: ../../../CHANGELOG:765 ../../../CHANGELOG:930 +#: ../../../CHANGELOG.md:735 ../../../CHANGELOG.md:893 msgid "Only suggest typed tag once if it already exists" msgstr "" -#: ../../../CHANGELOG:766 +#: ../../../CHANGELOG.md:736 msgid "Partially fixed playing two tracks at same time (#1213)" msgstr "" -#: ../../../CHANGELOG:767 +#: ../../../CHANGELOG.md:737 msgid "Revert changes that break mobile browser playback (#1509)" msgstr "" -#: ../../../CHANGELOG:768 +#: ../../../CHANGELOG.md:738 msgid "" "Sanitize remote tracks' saving locations with slashes on their names " "(#1435)" msgstr "" -#: ../../../CHANGELOG:769 +#: ../../../CHANGELOG.md:739 msgid "Show embed option for channel tracks (#1278)" msgstr "" -#: ../../../CHANGELOG:770 +#: ../../../CHANGELOG.md:740 msgid "" "Store volume in logarithmic scale and convert when setting it to audio " "(fixes #1543)" msgstr "" -#: ../../../CHANGELOG:771 +#: ../../../CHANGELOG.md:741 msgid "" "Use global Howler volume instead of setting it separately for each track " "(fixes #1542)" msgstr "" -#: ../../../CHANGELOG:776 +#: ../../../CHANGELOG.md:745 msgid "Add email configuration to the documentation (#1481)" msgstr "" -#: ../../../CHANGELOG:777 +#: ../../../CHANGELOG.md:746 msgid "Add server uninstallation documentation (\\!1314)" msgstr "" -#: ../../../CHANGELOG:778 +#: ../../../CHANGELOG.md:747 msgid "Document location of cli env file on macOS (\\!1354)" msgstr "" -#: ../../../CHANGELOG:779 +#: ../../../CHANGELOG.md:748 msgid "Fix broken backup documentation (#1345)" msgstr "" -#: ../../../CHANGELOG:780 +#: ../../../CHANGELOG.md:749 msgid "" "Refactore installation documentation and other small documentation " "adjustments (\\!1314)" msgstr "" -#: ../../../CHANGELOG:781 +#: ../../../CHANGELOG.md:750 msgid "Add User documentation for built-in plugins" msgstr "" -#: ../../../CHANGELOG:786 +#: ../../../CHANGELOG.md:754 msgid "" "Create stable branch, master is now deprecated and will be removed in 1.3" " (#1476)" msgstr "" -#: ../../../CHANGELOG:790 -msgid "" -"Alexandra Parker Alyssa Ross appzer0 Arthur Brugière Asier Iturralde " -"Sarasola bittin Blopware Brian McMillen Christoph Pomaska Ciaran " -"Ainsworth Ciarán Ainsworth Classified Connor Hay Damian Szetela David " -"Marzal Deleted User Dignified Silence Dominik Danelski egon0 Erik " -"Präntare Georg Abenthung Georgios B Georgios Brellas Georg Krause ghose " -"greengekota heyarne ian Vatega Janek jovuit JuniorJPDJ Konstantinos G " -"manuelviens Manuel Viens Marcos Marcos Peña Martin Giger Matthew J Micha " -"Gläß-Stöcker petitminion Petitminion Philipp Wolfer Porrumentzio Quentin " -"PAGÈS Raphael Lullis Riccardo Sacchetto Romain Failliot Rubén Cabrera " -"Ryan Harg Sergio Varela SpcCw Stefano Pigozzi Thomas Tony Simoes Tony " -"Wasserka vachan-maker Virgile Robles" +#: ../../../CHANGELOG.md:758 +msgid "Alexandra Parker" msgstr "" -#: ../../../CHANGELOG:850 -msgid "" -"AMoonRabbit Agate Antoine POPINEAU Arthur Brugière Ciarán Ainsworth " -"Connor Hay Creak David Marzal Georg Krause Gerhard Beck Greg Poole " -"JuniorJPDJ Kuba Orlik Lunar Control Marcos Peña Mateusz Korzeniewski " -"Mathieu Jourdan Micha Gläß-Stöcker Philipp Wolfer Porrumentzio Thomas " -"Tony Wasserka Ville Ranki arkhi heyarne interfect jovuit mal petitminion " -"vachan-maker" +#: ../../../CHANGELOG.md:759 +msgid "Alyssa Ross" msgstr "" -#: ../../../CHANGELOG:883 -msgid "" -"Agate Arthur Brugière Ciarán Ainsworth Connor Hay David Marzal Distopico " -"Fanyx Georg Abenthung Georg Krause Janek JuniorJPDJ Kasper Seweryn Marcos" -" Peña Mathieu Jourdan Matthew J. Micha Gläß-Stöcker Philipp Wolfer Thomas" -" Tony Wasserka heyarne jovuit petitminion thanksd" +#: ../../../CHANGELOG.md:760 ../../../CHANGELOG.md:972 +#: ../../../CHANGELOG.md:1212 +msgid "appzer0" msgstr "" -#: ../../../CHANGELOG:909 +#: ../../../CHANGELOG.md:761 ../../../CHANGELOG.md:821 +#: ../../../CHANGELOG.md:852 +msgid "Arthur Brugière" +msgstr "" + +#: ../../../CHANGELOG.md:762 ../../../CHANGELOG.md:974 +msgid "Asier Iturralde Sarasola" +msgstr "" + +#: ../../../CHANGELOG.md:763 +msgid "bittin" +msgstr "" + +#: ../../../CHANGELOG.md:764 +msgid "Blopware" +msgstr "" + +#: ../../../CHANGELOG.md:765 +msgid "Brian McMillen" +msgstr "" + +#: ../../../CHANGELOG.md:769 +msgid "Classified" +msgstr "" + +#: ../../../CHANGELOG.md:770 ../../../CHANGELOG.md:823 +#: ../../../CHANGELOG.md:854 +msgid "Connor Hay" +msgstr "" + +#: ../../../CHANGELOG.md:771 +msgid "Damian Szetela" +msgstr "" + +#: ../../../CHANGELOG.md:772 ../../../CHANGELOG.md:825 +#: ../../../CHANGELOG.md:855 +msgid "David Marzal" +msgstr "" + +#: ../../../CHANGELOG.md:773 +msgid "Deleted User" +msgstr "" + +#: ../../../CHANGELOG.md:775 ../../../CHANGELOG.md:979 +msgid "Dominik Danelski" +msgstr "" + +#: ../../../CHANGELOG.md:776 +msgid "egon0" +msgstr "" + +#: ../../../CHANGELOG.md:777 +msgid "Erik Präntare" +msgstr "" + +#: ../../../CHANGELOG.md:778 ../../../CHANGELOG.md:858 +msgid "Georg Abenthung" +msgstr "" + +#: ../../../CHANGELOG.md:779 +msgid "Georgios B" +msgstr "" + +#: ../../../CHANGELOG.md:780 +msgid "Georgios Brellas" +msgstr "" + +#: ../../../CHANGELOG.md:782 ../../../CHANGELOG.md:987 +#: ../../../CHANGELOG.md:1218 +msgid "ghose" +msgstr "" + +#: ../../../CHANGELOG.md:783 +msgid "greengekota" +msgstr "" + +#: ../../../CHANGELOG.md:785 +msgid "ian Vatega" +msgstr "" + +#: ../../../CHANGELOG.md:786 ../../../CHANGELOG.md:860 +msgid "Janek" +msgstr "" + +#: ../../../CHANGELOG.md:789 +msgid "Konstantinos G" +msgstr "" + +#: ../../../CHANGELOG.md:790 +msgid "manuelviens" +msgstr "" + +#: ../../../CHANGELOG.md:791 +msgid "Manuel Viens" +msgstr "" + +#: ../../../CHANGELOG.md:794 +msgid "Martin Giger" +msgstr "" + +#: ../../../CHANGELOG.md:795 +msgid "Matthew J" +msgstr "" + +#: ../../../CHANGELOG.md:800 ../../../CHANGELOG.md:837 +#: ../../../CHANGELOG.md:1000 +msgid "Porrumentzio" +msgstr "" + +#: ../../../CHANGELOG.md:801 ../../../CHANGELOG.md:1223 +#: ../../../CHANGELOG.md:1610 ../../../CHANGELOG.md:1680 +msgid "Quentin PAGÈS" +msgstr "" + +#: ../../../CHANGELOG.md:802 +msgid "Raphael Lullis" +msgstr "" + +#: ../../../CHANGELOG.md:803 +msgid "Riccardo Sacchetto" +msgstr "" + +#: ../../../CHANGELOG.md:804 ../../../CHANGELOG.md:1988 +msgid "Romain Failliot" +msgstr "" + +#: ../../../CHANGELOG.md:805 ../../../CHANGELOG.md:1003 +msgid "Rubén Cabrera" +msgstr "" + +#: ../../../CHANGELOG.md:806 +msgid "Ryan Harg" +msgstr "" + +#: ../../../CHANGELOG.md:807 +msgid "Sergio Varela" +msgstr "" + +#: ../../../CHANGELOG.md:808 ../../../CHANGELOG.md:1006 +#: ../../../CHANGELOG.md:1226 ../../../CHANGELOG.md:1614 +#: ../../../CHANGELOG.md:1989 +msgid "SpcCw" +msgstr "" + +#: ../../../CHANGELOG.md:809 ../../../CHANGELOG.md:1227 +msgid "Stefano Pigozzi" +msgstr "" + +#: ../../../CHANGELOG.md:810 ../../../CHANGELOG.md:838 +#: ../../../CHANGELOG.md:868 +msgid "Thomas" +msgstr "" + +#: ../../../CHANGELOG.md:811 +msgid "Tony Simoes" +msgstr "" + +#: ../../../CHANGELOG.md:813 ../../../CHANGELOG.md:847 +msgid "vachan-maker" +msgstr "" + +#: ../../../CHANGELOG.md:814 +msgid "Virgile Robles" +msgstr "" + +#: ../../../CHANGELOG.md:820 +msgid "Antoine POPINEAU" +msgstr "" + +#: ../../../CHANGELOG.md:824 ../../../CHANGELOG.md:1310 +#: ../../../CHANGELOG.md:1587 ../../../CHANGELOG.md:2029 +msgid "Creak" +msgstr "" + +#: ../../../CHANGELOG.md:827 +msgid "Gerhard Beck" +msgstr "" + +#: ../../../CHANGELOG.md:828 +msgid "Greg Poole" +msgstr "" + +#: ../../../CHANGELOG.md:830 ../../../CHANGELOG.md:1101 +msgid "Kuba Orlik" +msgstr "" + +#: ../../../CHANGELOG.md:831 +msgid "Lunar Control" +msgstr "" + +#: ../../../CHANGELOG.md:833 +msgid "Mateusz Korzeniewski" +msgstr "" + +#: ../../../CHANGELOG.md:840 +msgid "Ville Ranki" +msgstr "" + +#: ../../../CHANGELOG.md:841 +msgid "arkhi" +msgstr "" + +#: ../../../CHANGELOG.md:843 ../../../CHANGELOG.md:990 +#: ../../../CHANGELOG.md:1073 ../../../CHANGELOG.md:2225 +msgid "interfect" +msgstr "" + +#: ../../../CHANGELOG.md:845 +msgid "mal" +msgstr "" + +#: ../../../CHANGELOG.md:856 +msgid "Distopico" +msgstr "" + +#: ../../../CHANGELOG.md:857 +msgid "Fanyx" +msgstr "" + +#: ../../../CHANGELOG.md:865 +msgid "Matthew J." +msgstr "" + +#: ../../../CHANGELOG.md:873 +msgid "thanksd" +msgstr "" + +#: ../../../CHANGELOG.md:875 msgid "1.1.4 (2021-08-02)" msgstr "" -#: ../../../CHANGELOG:914 +#: ../../../CHANGELOG.md:879 msgid "" "Pinned version of asgiref to avoid trouble with latest release. For " "further information, see #1516" msgstr "" -#: ../../../CHANGELOG:917 +#: ../../../CHANGELOG.md:881 msgid "1.1.3 (2021-08-02)" msgstr "" -#: ../../../CHANGELOG:924 +#: ../../../CHANGELOG.md:887 msgid "Test better tagging of Docker Images (#1505)" msgstr "" -#: ../../../CHANGELOG:928 +#: ../../../CHANGELOG.md:891 msgid "" "Fix the scrobbler plugin submitting literal \"None\" as MusicBrainz ID " "(#1498)" msgstr "" -#: ../../../CHANGELOG:931 +#: ../../../CHANGELOG.md:894 msgid "Implement access control on the moderation views (#1494)" msgstr "" -#: ../../../CHANGELOG:932 +#: ../../../CHANGELOG.md:895 msgid "Prevent open redirect on login (#1492)" msgstr "" -#: ../../../CHANGELOG:936 +#: ../../../CHANGELOG.md:897 msgid "1.1.2 (2021-05-19)" msgstr "" -#: ../../../CHANGELOG:943 +#: ../../../CHANGELOG.md:903 msgid "Added modal to prompt users to log in when subscribing to channels (#1296)" msgstr "" -#: ../../../CHANGELOG:948 +#: ../../../CHANGELOG.md:907 msgid "Added missing is_playable serializer for the tracks endpoint." msgstr "" -#: ../../../CHANGELOG:949 +#: ../../../CHANGELOG.md:908 msgid "" "Fixed minor graphical bug where loaders would appear white in dark theme " "(#1442)" msgstr "" -#: ../../../CHANGELOG:950 +#: ../../../CHANGELOG.md:909 msgid "Fixed systemd unit for funkwhale-worker (#1160)" msgstr "" -#: ../../../CHANGELOG:951 +#: ../../../CHANGELOG.md:910 msgid "Several minor fixes for the Frontend" msgstr "" -#: ../../../CHANGELOG:955 +#: ../../../CHANGELOG.md:912 msgid "1.1.1 (2021-04-13)" msgstr "" -#: ../../../CHANGELOG:962 +#: ../../../CHANGELOG.md:918 msgid "Improve UI consistency in artist tracks (#1286)" msgstr "" -#: ../../../CHANGELOG:963 +#: ../../../CHANGELOG.md:919 msgid "Adds year to album's card and album's base UI" msgstr "" -#: ../../../CHANGELOG:967 +#: ../../../CHANGELOG.md:923 msgid "Fix playback issues when pausing close the the end of a track (#1324)" msgstr "" -#: ../../../CHANGELOG:968 +#: ../../../CHANGELOG.md:924 msgid "" "Fix tracks playing in the background without the ability to control them " "(#1213) (#1387)" msgstr "" -#: ../../../CHANGELOG:969 +#: ../../../CHANGELOG.md:925 msgid "Fixed track playback indicator to reset on queue end (#1380)" msgstr "" -#: ../../../CHANGELOG:970 +#: ../../../CHANGELOG.md:926 msgid "" "Frontend build tooling is less dependent on `npm` or `yarn` being used " "(!1285)" msgstr "" -#: ../../../CHANGELOG:971 +#: ../../../CHANGELOG.md:927 msgid "Fixed a small discrepancy to the subsonic api 1374" msgstr "" -#: ../../../CHANGELOG:975 +#: ../../../CHANGELOG.md:929 msgid "1.1 (2021-03-10)" msgstr "" -#: ../../../CHANGELOG:982 ../../../CHANGELOG:1082 +#: ../../../CHANGELOG.md:935 ../../../CHANGELOG.md:1028 msgid "Add number of tracks and discs of an album to API (#1238)" msgstr "" -#: ../../../CHANGELOG:983 ../../../CHANGELOG:1083 +#: ../../../CHANGELOG.md:936 ../../../CHANGELOG.md:1029 msgid "Add spacing after \"Play all\" button in playlist view (!1271)" msgstr "" -#: ../../../CHANGELOG:984 ../../../CHANGELOG:1084 +#: ../../../CHANGELOG.md:937 ../../../CHANGELOG.md:1030 msgid "Added a ListenBrainz plugin to submit listenings" msgstr "" -#: ../../../CHANGELOG:985 ../../../CHANGELOG:1085 +#: ../../../CHANGELOG.md:938 ../../../CHANGELOG.md:1031 msgid "" "Added ability to choose fediverse addresses from channel subscription " "page/podcast screen (#1294)" msgstr "" -#: ../../../CHANGELOG:986 ../../../CHANGELOG:1086 +#: ../../../CHANGELOG.md:939 ../../../CHANGELOG.md:1032 msgid "" "Added new search functions to allow users to more easily search for " "podcasts in the UI." msgstr "" -#: ../../../CHANGELOG:987 ../../../CHANGELOG:1087 +#: ../../../CHANGELOG.md:940 ../../../CHANGELOG.md:1033 msgid "Added padding to volume slider to ease mouse control (#1241)" msgstr "" -#: ../../../CHANGELOG:988 ../../../CHANGELOG:1088 +#: ../../../CHANGELOG.md:941 ../../../CHANGELOG.md:1034 msgid "Logarithmic scale for volume slider (#1222)" msgstr "" -#: ../../../CHANGELOG:989 ../../../CHANGELOG:1089 +#: ../../../CHANGELOG.md:942 ../../../CHANGELOG.md:1035 msgid "More user-friendly subsonic tokens (#1269)" msgstr "" -#: ../../../CHANGELOG:990 ../../../CHANGELOG:1090 +#: ../../../CHANGELOG.md:943 ../../../CHANGELOG.md:1036 msgid "Remove manual entry of Import Reference on front-end import (#1284)" msgstr "" -#: ../../../CHANGELOG:991 ../../../CHANGELOG:1092 +#: ../../../CHANGELOG.md:944 ../../../CHANGELOG.md:1038 msgid "Support AIFF file format (#1243)" msgstr "" -#: ../../../CHANGELOG:996 ../../../CHANGELOG:1097 +#: ../../../CHANGELOG.md:948 ../../../CHANGELOG.md:1042 msgid "\"Add check for empty/null covers (#1281)\"" msgstr "" -#: ../../../CHANGELOG:997 ../../../CHANGELOG:1098 +#: ../../../CHANGELOG.md:949 ../../../CHANGELOG.md:1043 msgid "" "Added an album filter to fix problem where channel entries would show up " "in the wrong series (#1282)" msgstr "" -#: ../../../CHANGELOG:998 ../../../CHANGELOG:1099 +#: ../../../CHANGELOG.md:950 ../../../CHANGELOG.md:1044 msgid "Avoid broken Faker version (#1323)" msgstr "" -#: ../../../CHANGELOG:999 ../../../CHANGELOG:1100 +#: ../../../CHANGELOG.md:951 ../../../CHANGELOG.md:1045 msgid "" "Changed audio format detection to happen via sniffing and not file " "extensions (#1274)" msgstr "" -#: ../../../CHANGELOG:1000 ../../../CHANGELOG:1101 +#: ../../../CHANGELOG.md:952 ../../../CHANGELOG.md:1046 msgid "" "Changed default behaviour of channel entries to use channel artwork if no" " entry artwork available (#1289)" msgstr "" -#: ../../../CHANGELOG:1001 ../../../CHANGELOG:1102 +#: ../../../CHANGELOG.md:953 ../../../CHANGELOG.md:1047 msgid "Fix delete library modal closing immediately (#1272)" msgstr "" -#: ../../../CHANGELOG:1002 ../../../CHANGELOG:1103 +#: ../../../CHANGELOG.md:954 ../../../CHANGELOG.md:1048 msgid "Fix public shared remote library radio button being disabled (#1292)" msgstr "" -#: ../../../CHANGELOG:1003 ../../../CHANGELOG:1104 +#: ../../../CHANGELOG.md:955 ../../../CHANGELOG.md:1049 msgid "Fixed an issue that prevented disabling plugins" msgstr "" -#: ../../../CHANGELOG:1004 ../../../CHANGELOG:1105 +#: ../../../CHANGELOG.md:956 ../../../CHANGELOG.md:1050 msgid "" "Fixed an issue where channel albums don't show up in the album search " "(#1300)" msgstr "" -#: ../../../CHANGELOG:1005 ../../../CHANGELOG:1106 +#: ../../../CHANGELOG.md:957 ../../../CHANGELOG.md:1051 msgid "" "Fixed an issue where modals would prevent users being able to interact " "with channels (#1295)" msgstr "" -#: ../../../CHANGELOG:1006 ../../../CHANGELOG:1107 +#: ../../../CHANGELOG.md:958 ../../../CHANGELOG.md:1052 msgid "Update MediaSession metadata for initially loaded track (#1252)" msgstr "" -#: ../../../CHANGELOG:1007 ../../../CHANGELOG:1108 +#: ../../../CHANGELOG.md:959 ../../../CHANGELOG.md:1053 msgid "Update playback position slider also when track is paused (#1266)" msgstr "" -#: ../../../CHANGELOG:1008 ../../../CHANGELOG:1068 +#: ../../../CHANGELOG.md:960 ../../../CHANGELOG.md:1017 msgid "" "Fixed follows from Pleroma with custom Emoji as Tag by ignoring not " "supported tag types #1342" msgstr "" -#: ../../../CHANGELOG:1009 ../../../CHANGELOG:1069 +#: ../../../CHANGELOG.md:961 ../../../CHANGELOG.md:1018 msgid "Update pleroma JSON-LD Schema (#1341)" msgstr "" -#: ../../../CHANGELOG:1010 ../../../CHANGELOG:1071 +#: ../../../CHANGELOG.md:962 ../../../CHANGELOG.md:1020 msgid "Pin twisted version to 20.3.0" msgstr "" -#: ../../../CHANGELOG:1012 ../../../CHANGELOG:1110 ../../../CHANGELOG:1154 -#: ../../../CHANGELOG:1330 +#: ../../../CHANGELOG.md:964 ../../../CHANGELOG.md:1055 +#: ../../../CHANGELOG.md:1096 ../../../CHANGELOG.md:1255 msgid "Contributors to this release (development, documentation, reviews):" msgstr "" -#: ../../../CHANGELOG:1014 -msgid "" -"Adam Novak Agate alemairebe Alicia Blasco Leon anonymous Amaranthe " -"appzer0 Arne Asier Iturralde Sarasola Christian Paul Ciarán Ainsworth " -"Daniel David Dominik Danelski Eorn le goéland Eleos Erik Duxstad Esteban " -"Fred Uggla Freyja Wildes Georg Krause ghose hellekin heyarne interfect " -"Jess Jing Johannes H. jovuit marzzzello Meliurwen Mehdi Nitai Bezerra da " -"Silva Philipp Wolfer Pierre Couy Porrumentzio Reg Robert Kaye Rubén " -"Cabrera Silver Fox Snack Capt SpcCw Strom Lin vicdorke x" +#: ../../../CHANGELOG.md:966 ../../../CHANGELOG.md:1065 +msgid "Adam Novak" msgstr "" -#: ../../../CHANGELOG:1061 +#: ../../../CHANGELOG.md:968 +msgid "alemairebe" +msgstr "" + +#: ../../../CHANGELOG.md:969 +msgid "Alicia Blasco Leon" +msgstr "" + +#: ../../../CHANGELOG.md:970 ../../../CHANGELOG.md:1211 +msgid "anonymous" +msgstr "" + +#: ../../../CHANGELOG.md:971 ../../../CHANGELOG.md:1061 +#: ../../../CHANGELOG.md:1968 +msgid "Amaranthe" +msgstr "" + +#: ../../../CHANGELOG.md:973 ../../../CHANGELOG.md:1213 +msgid "Arne" +msgstr "" + +#: ../../../CHANGELOG.md:975 ../../../CHANGELOG.md:1067 +msgid "Christian Paul" +msgstr "" + +#: ../../../CHANGELOG.md:977 +msgid "Daniel" +msgstr "" + +#: ../../../CHANGELOG.md:978 +msgid "David" +msgstr "" + +#: ../../../CHANGELOG.md:980 +msgid "Eorn le goéland" +msgstr "" + +#: ../../../CHANGELOG.md:981 ../../../CHANGELOG.md:1062 +msgid "Eleos" +msgstr "" + +#: ../../../CHANGELOG.md:982 ../../../CHANGELOG.md:1069 +msgid "Erik Duxstad" +msgstr "" + +#: ../../../CHANGELOG.md:983 ../../../CHANGELOG.md:1059 +#: ../../../CHANGELOG.md:1676 ../../../CHANGELOG.md:1972 +#: ../../../CHANGELOG.md:2032 +msgid "Esteban" +msgstr "" + +#: ../../../CHANGELOG.md:984 ../../../CHANGELOG.md:1070 +msgid "Fred Uggla" +msgstr "" + +#: ../../../CHANGELOG.md:985 ../../../CHANGELOG.md:1060 +#: ../../../CHANGELOG.md:1974 ../../../CHANGELOG.md:2033 +msgid "Freyja Wildes" +msgstr "" + +#: ../../../CHANGELOG.md:988 ../../../CHANGELOG.md:1058 +#: ../../../CHANGELOG.md:1975 ../../../CHANGELOG.md:2034 +msgid "hellekin" +msgstr "" + +#: ../../../CHANGELOG.md:991 +msgid "Jess Jing" +msgstr "" + +#: ../../../CHANGELOG.md:992 ../../../CHANGELOG.md:1063 +#: ../../../CHANGELOG.md:1677 ../../../CHANGELOG.md:1978 +#: ../../../CHANGELOG.md:2035 +msgid "Johannes H." +msgstr "" + +#: ../../../CHANGELOG.md:994 ../../../CHANGELOG.md:1601 +msgid "marzzzello" +msgstr "" + +#: ../../../CHANGELOG.md:996 ../../../CHANGELOG.md:1064 +#: ../../../CHANGELOG.md:1982 ../../../CHANGELOG.md:2036 +msgid "Mehdi" +msgstr "" + +#: ../../../CHANGELOG.md:997 ../../../CHANGELOG.md:1075 +msgid "Nitai Bezerra da Silva" +msgstr "" + +#: ../../../CHANGELOG.md:999 ../../../CHANGELOG.md:1077 +msgid "Pierre Couy" +msgstr "" + +#: ../../../CHANGELOG.md:1001 ../../../CHANGELOG.md:1057 +#: ../../../CHANGELOG.md:1986 ../../../CHANGELOG.md:2037 +msgid "Reg" +msgstr "" + +#: ../../../CHANGELOG.md:1002 ../../../CHANGELOG.md:1078 +msgid "Robert Kaye" +msgstr "" + +#: ../../../CHANGELOG.md:1004 +msgid "Silver Fox" +msgstr "" + +#: ../../../CHANGELOG.md:1005 +msgid "Snack Capt" +msgstr "" + +#: ../../../CHANGELOG.md:1007 ../../../CHANGELOG.md:1079 +msgid "Strom Lin" +msgstr "" + +#: ../../../CHANGELOG.md:1008 ../../../CHANGELOG.md:1230 +msgid "vicdorke" +msgstr "" + +#: ../../../CHANGELOG.md:1009 +msgid "x" +msgstr "" + +#: ../../../CHANGELOG.md:1011 msgid "1.1-rc2 (2021-03-01)" msgstr "" -#: ../../../CHANGELOG:1070 +#: ../../../CHANGELOG.md:1019 msgid "" "Revert fork replacement of http-signature since official package breaks " "federation" msgstr "" -#: ../../../CHANGELOG:1075 +#: ../../../CHANGELOG.md:1022 msgid "1.1-rc1 (2021-02-24)" msgstr "" -#: ../../../CHANGELOG:1091 +#: ../../../CHANGELOG.md:1037 msgid "Replaced forked http-signature dependency with official package (#876)" msgstr "" -#: ../../../CHANGELOG:1112 ../../../CHANGELOG:2093 ../../../CHANGELOG:2149 -msgid "Reg" -msgstr "" - -#: ../../../CHANGELOG:1113 ../../../CHANGELOG:2082 ../../../CHANGELOG:2146 -msgid "hellekin" -msgstr "" - -#: ../../../CHANGELOG:1114 ../../../CHANGELOG:1771 ../../../CHANGELOG:2079 -#: ../../../CHANGELOG:2144 -msgid "Esteban" -msgstr "" - -#: ../../../CHANGELOG:1115 ../../../CHANGELOG:2081 ../../../CHANGELOG:2145 -msgid "Freyja Wildes" -msgstr "" - -#: ../../../CHANGELOG:1116 ../../../CHANGELOG:2075 -msgid "Amaranthe" -msgstr "" - -#: ../../../CHANGELOG:1117 -msgid "Eleos" -msgstr "" - -#: ../../../CHANGELOG:1118 ../../../CHANGELOG:1772 ../../../CHANGELOG:2085 -#: ../../../CHANGELOG:2147 -msgid "Johannes H." -msgstr "" - -#: ../../../CHANGELOG:1119 ../../../CHANGELOG:2089 ../../../CHANGELOG:2148 -msgid "Mehdi" -msgstr "" - -#: ../../../CHANGELOG:1120 -msgid "Adam Novak" -msgstr "" - -#: ../../../CHANGELOG:1122 -msgid "Christian Paul" -msgstr "" - -#: ../../../CHANGELOG:1124 -msgid "Erik Duxstad" -msgstr "" - -#: ../../../CHANGELOG:1125 -msgid "Fred Uggla" -msgstr "" - -#: ../../../CHANGELOG:1128 ../../../CHANGELOG:2354 -msgid "interfect" -msgstr "" - -#: ../../../CHANGELOG:1130 -msgid "Nitai Bezerra da Silva" -msgstr "" - -#: ../../../CHANGELOG:1132 -msgid "Pierre Couy" -msgstr "" - -#: ../../../CHANGELOG:1133 -msgid "Robert Kaye" -msgstr "" - -#: ../../../CHANGELOG:1134 -msgid "Strom Lin" -msgstr "" - -#: ../../../CHANGELOG:1137 +#: ../../../CHANGELOG.md:1081 msgid "1.0.1 (2020-10-31)" msgstr "" -#: ../../../CHANGELOG:1144 +#: ../../../CHANGELOG.md:1087 msgid "Added controls to play volume of an album (#1226)" msgstr "" -#: ../../../CHANGELOG:1145 +#: ../../../CHANGELOG.md:1088 msgid "Allow genre tags to be updated when rescanning files in-place (#1246)" msgstr "" -#: ../../../CHANGELOG:1150 +#: ../../../CHANGELOG.md:1092 msgid "Fixed broken install because of upgraded dependencies" msgstr "" -#: ../../../CHANGELOG:1151 +#: ../../../CHANGELOG.md:1093 msgid "Fixed duplication of discs for multi-disc albums in album views (#1228)" msgstr "" -#: ../../../CHANGELOG:1152 +#: ../../../CHANGELOG.md:1094 msgid "Make the generated RSS feed more conformant with w3c specification (#1250)" msgstr "" -#: ../../../CHANGELOG:1157 +#: ../../../CHANGELOG.md:1099 msgid "Cédric Schieli" msgstr "" -#: ../../../CHANGELOG:1159 -msgid "Kuba Orlik" -msgstr "" - -#: ../../../CHANGELOG:1162 +#: ../../../CHANGELOG.md:1103 msgid "1.0 (2020-09-09)" msgstr "" -#: ../../../CHANGELOG:1169 +#: ../../../CHANGELOG.md:1107 msgid "Dropped python 3.5 support [manual action required, non-docker only]" msgstr "" -#: ../../../CHANGELOG:1171 +#: ../../../CHANGELOG.md:1109 msgid "" "With Funkwhale 1.0, we're dropping support for Python 3.5. Before " -"upgrading, ensure ``python3 --version`` returns ``3.6`` or higher." +"upgrading, ensure `python3 --version` returns `3.6` or higher." msgstr "" -#: ../../../CHANGELOG:1174 -msgid "If it returns ``3.6`` or higher, you have nothing to do." +#: ../../../CHANGELOG.md:1112 +msgid "If it returns `3.6` or higher, you have nothing to do." msgstr "" -#: ../../../CHANGELOG:1176 +#: ../../../CHANGELOG.md:1114 msgid "" -"If it returns ``3.5``, you will need to upgrade your Python version/Host," -" then recreate your virtual environment::" +"If it returns `3.5`, you will need to upgrade your Python version/Host, " +"then recreate your virtual environment:" msgstr "" -#: ../../../CHANGELOG:1183 +#: ../../../CHANGELOG.md:1121 msgid "Increased quality of JPEG thumbnails [manual action required]" msgstr "" -#: ../../../CHANGELOG:1185 +#: ../../../CHANGELOG.md:1123 msgid "" "Default quality for JPEG thumbnails was increased from 70 to 95, as 70 " "was producing visible artifacts in resized images." msgstr "" -#: ../../../CHANGELOG:1187 +#: ../../../CHANGELOG.md:1125 msgid "" "Because of this change, existing thumbnails will not load, and you will " "need to:" msgstr "" -#: ../../../CHANGELOG:1189 -msgid "delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory" +#: ../../../CHANGELOG.md:1127 +msgid "delete the `__sized__` directory in your `MEDIA_ROOT` directory" msgstr "" -#: ../../../CHANGELOG:1190 +#: ../../../CHANGELOG.md:1128 msgid "" -"run ``python manage.py fw media generate-thumbnails`` to regenerate " +"run `python manage.py fw media generate-thumbnails` to regenerate " "thumbnails with the enhanced quality" msgstr "" -#: ../../../CHANGELOG:1192 +#: ../../../CHANGELOG.md:1130 msgid "" "If you don't want to regenerate thumbnails, you can keep the old ones by " -"adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70`` to your .env file." +"adding `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your .env file." msgstr "" -#: ../../../CHANGELOG:1195 ../../../CHANGELOG:1375 -msgid "Small API breaking change in ``/api/v1/libraries``" +#: ../../../CHANGELOG.md:1132 ../../../CHANGELOG.md:1294 +msgid "Small API breaking change in `/api/v1/libraries`" msgstr "" -#: ../../../CHANGELOG:1197 ../../../CHANGELOG:1377 +#: ../../../CHANGELOG.md:1134 ../../../CHANGELOG.md:1296 msgid "" "To allow easier crawling of public libraries on a pod,we had to make a " -"slight breaking change to the behaviour of ``GET /api/v1/libraries``." +"slight breaking change to the behaviour of `GET /api/v1/libraries`." msgstr "" -#: ../../../CHANGELOG:1200 ../../../CHANGELOG:1380 +#: ../../../CHANGELOG.md:1137 ../../../CHANGELOG.md:1299 msgid "Before, it returned only libraries owned by the current user." msgstr "" -#: ../../../CHANGELOG:1202 ../../../CHANGELOG:1382 +#: ../../../CHANGELOG.md:1139 ../../../CHANGELOG.md:1301 msgid "" "Now, it returns all the accessible libraries (including ones from other " "users and pods)." msgstr "" -#: ../../../CHANGELOG:1204 ../../../CHANGELOG:1384 +#: ../../../CHANGELOG.md:1141 ../../../CHANGELOG.md:1303 msgid "" "If you are consuming the API via a third-party client and need to " -"retrieve your libraries, use the ``scope`` parameter, like this: ``GET " -"/api/v1/libraries?scope=me``" +"retrieve your libraries, use the `scope` parameter, like this: `GET " +"/api/v1/libraries?scope=me`" msgstr "" -#: ../../../CHANGELOG:1208 -msgid "API breaking change in ``/api/v1/albums``" +#: ../../../CHANGELOG.md:1144 +msgid "API breaking change in `/api/v1/albums`" msgstr "" -#: ../../../CHANGELOG:1210 +#: ../../../CHANGELOG.md:1146 msgid "" -"To increase performance, querying ``/api/v1/albums`` doesn't return album" -" tracks anymore. This caused some performance issues, especially as some " +"To increase performance, querying `/api/v1/albums` doesn't return album " +"tracks anymore. This caused some performance issues, especially as some " "albums and series have dozens or even hundreds of tracks." msgstr "" -#: ../../../CHANGELOG:1213 +#: ../../../CHANGELOG.md:1149 msgid "" "If you want to retrieve tracks for an album, you can query " -"``/api/v1/tracks/?album=<albumid>``." +"`/api/v1/tracks/?album=<albumid>`." msgstr "" -#: ../../../CHANGELOG:1216 +#: ../../../CHANGELOG.md:1151 msgid "JWT deprecation" msgstr "" -#: ../../../CHANGELOG:1218 +#: ../../../CHANGELOG.md:1153 msgid "" "API Authentication using JWT is deprecated and will be removed in " "Funkwhale 1.0. Please use OAuth or application tokens and refer to our " "API documentation at https://docs.funkwhale.audio/swagger/ for guidance." msgstr "" -#: ../../../CHANGELOG:1222 ../../../CHANGELOG:1583 +#: ../../../CHANGELOG.md:1156 ../../../CHANGELOG.md:1494 msgid "Full list of changes" msgstr "" -#: ../../../CHANGELOG:1226 +#: ../../../CHANGELOG.md:1160 msgid "Allow users to hide compilation artists on the artist search page (#1053)" msgstr "" -#: ../../../CHANGELOG:1227 +#: ../../../CHANGELOG.md:1161 msgid "Can now launch server import from the UI (#1105)" msgstr "" -#: ../../../CHANGELOG:1228 +#: ../../../CHANGELOG.md:1162 msgid "Dedicated, advanced search page (#370)" msgstr "" -#: ../../../CHANGELOG:1229 +#: ../../../CHANGELOG.md:1163 msgid "Persist theme and language settings across sessions (#996)" msgstr "" -#: ../../../CHANGELOG:1234 +#: ../../../CHANGELOG.md:1167 msgid "Add support for unauthenticated users hitting the logout page" msgstr "" -#: ../../../CHANGELOG:1235 +#: ../../../CHANGELOG.md:1168 msgid "Added support for Licence Art Libre (#1088)" msgstr "" -#: ../../../CHANGELOG:1236 +#: ../../../CHANGELOG.md:1169 msgid "Broadcast/handle rejected follows (#858)" msgstr "" -#: ../../../CHANGELOG:1237 +#: ../../../CHANGELOG.md:1170 msgid "" "Confirm email without requiring the user to validate the form manually " "(#407)" msgstr "" -#: ../../../CHANGELOG:1238 +#: ../../../CHANGELOG.md:1171 msgid "Display channel and track downloads count (#1178)" msgstr "" -#: ../../../CHANGELOG:1239 +#: ../../../CHANGELOG.md:1172 msgid "Do not include tracks in album API representation (#1102)" msgstr "" -#: ../../../CHANGELOG:1240 +#: ../../../CHANGELOG.md:1173 msgid "" "Dropped python 3.5 support. Python 3.6 is the minimum required version " "(#1099)" msgstr "" -#: ../../../CHANGELOG:1241 +#: ../../../CHANGELOG.md:1174 msgid "Improved keyboard accessibility (#1125)" msgstr "" -#: ../../../CHANGELOG:1242 +#: ../../../CHANGELOG.md:1175 msgid "Improved naming of pages for accessibility (#1127)" msgstr "" -#: ../../../CHANGELOG:1243 +#: ../../../CHANGELOG.md:1176 msgid "Improved shuffle behaviour (#1190)" msgstr "" -#: ../../../CHANGELOG:1244 +#: ../../../CHANGELOG.md:1177 msgid "Increased quality of JPEG thumbnails" msgstr "" -#: ../../../CHANGELOG:1245 +#: ../../../CHANGELOG.md:1178 msgid "Lock focus in modals to improve accessibility (#1128)" msgstr "" -#: ../../../CHANGELOG:1246 +#: ../../../CHANGELOG.md:1179 msgid "" "More consistent search UX on /albums, /artists, /radios and /playlists " "(#1131)" msgstr "" -#: ../../../CHANGELOG:1247 +#: ../../../CHANGELOG.md:1180 msgid "Play button now replace current queue instead of appending to it (#1083)" msgstr "" -#: ../../../CHANGELOG:1248 +#: ../../../CHANGELOG.md:1181 msgid "Set proper lang attribute on HTML document (#1130)" msgstr "" -#: ../../../CHANGELOG:1249 +#: ../../../CHANGELOG.md:1182 msgid "Use semantic headers for accessibility (#1121)" msgstr "" -#: ../../../CHANGELOG:1250 +#: ../../../CHANGELOG.md:1183 msgid "Users can now update their email address (#292)" msgstr "" -#: ../../../CHANGELOG:1251 +#: ../../../CHANGELOG.md:1184 msgid "" "[plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and " "secret are provided" msgstr "" -#: ../../../CHANGELOG:1252 +#: ../../../CHANGELOG.md:1185 msgid "Added a new, large thumbnail size for cover images (#1205" msgstr "" -#: ../../../CHANGELOG:1253 +#: ../../../CHANGELOG.md:1186 msgid "" "Enforce authentication when viewing remote channels, profiles and " "libraries (#1210)" msgstr "" -#: ../../../CHANGELOG:1259 +#: ../../../CHANGELOG.md:1190 msgid "Fix broken media support detection (#1180)" msgstr "" -#: ../../../CHANGELOG:1260 +#: ../../../CHANGELOG.md:1191 msgid "Fix layout issue with playbar on landscape tablets (#1144)" msgstr "" -#: ../../../CHANGELOG:1261 +#: ../../../CHANGELOG.md:1192 msgid "Fix random radio so that podcast content is not picked up (#1140)" msgstr "" -#: ../../../CHANGELOG:1262 +#: ../../../CHANGELOG.md:1193 msgid "" "Fixed an issue with search pages where results would not appear after " "navigating to another page" msgstr "" -#: ../../../CHANGELOG:1263 +#: ../../../CHANGELOG.md:1194 msgid "Fixed crash with negative track position in file tags (#1193)" msgstr "" -#: ../../../CHANGELOG:1264 +#: ../../../CHANGELOG.md:1195 msgid "Handle access errors scanning directories when importing files" msgstr "" -#: ../../../CHANGELOG:1265 ../../../CHANGELOG:1328 +#: ../../../CHANGELOG.md:1196 ../../../CHANGELOG.md:1253 msgid "" "Make channel card updated times more humanly readable, add " "internationalization (#1089)" msgstr "" -#: ../../../CHANGELOG:1266 +#: ../../../CHANGELOG.md:1197 msgid "" "Ensure search page reloads if another search is submitted in the sidebar " "(#1197)" msgstr "" -#: ../../../CHANGELOG:1267 +#: ../../../CHANGELOG.md:1198 msgid "" "Fixed \"scope=subscribed\" on albums, artists, uploads and libraries API " "(#1217)" msgstr "" -#: ../../../CHANGELOG:1268 +#: ../../../CHANGELOG.md:1199 msgid "Fixed broken federation with pods using allow-listing (#1999)" msgstr "" -#: ../../../CHANGELOG:1269 +#: ../../../CHANGELOG.md:1200 msgid "Fixed broken search when using (, \" or & chars (#1196)" msgstr "" -#: ../../../CHANGELOG:1270 +#: ../../../CHANGELOG.md:1201 msgid "Fixed domains table hidden controls when no domains are found (#1198)" msgstr "" -#: ../../../CHANGELOG:1275 +#: ../../../CHANGELOG.md:1205 msgid "Simplify Docker mono-container installation and upgrade documentation" msgstr "" -#: ../../../CHANGELOG:1278 ../../../CHANGELOG:1668 +#: ../../../CHANGELOG.md:1207 ../../../CHANGELOG.md:1579 msgid "" "Contributors to this release (translation, development, documentation, " "reviews, design, testing, third-party projects):" msgstr "" -#: ../../../CHANGELOG:1281 +#: ../../../CHANGELOG.md:1210 msgid "Andy Craze" msgstr "" -#: ../../../CHANGELOG:1282 -msgid "anonymous" -msgstr "" - -#: ../../../CHANGELOG:1283 -msgid "appzer0" -msgstr "" - -#: ../../../CHANGELOG:1284 -msgid "Arne" -msgstr "" - -#: ../../../CHANGELOG:1286 ../../../CHANGELOG:1677 ../../../CHANGELOG:1769 -#: ../../../CHANGELOG:2349 +#: ../../../CHANGELOG.md:1215 ../../../CHANGELOG.md:1588 +#: ../../../CHANGELOG.md:1674 ../../../CHANGELOG.md:2220 msgid "Daniele Lira Mereb" msgstr "" -#: ../../../CHANGELOG:1287 +#: ../../../CHANGELOG.md:1216 msgid "dulz" msgstr "" -#: ../../../CHANGELOG:1288 ../../../CHANGELOG:1681 ../../../CHANGELOG:2080 +#: ../../../CHANGELOG.md:1217 ../../../CHANGELOG.md:1592 +#: ../../../CHANGELOG.md:1973 msgid "Francesc Galí" msgstr "" -#: ../../../CHANGELOG:1289 -msgid "ghose" -msgstr "" - -#: ../../../CHANGELOG:1290 +#: ../../../CHANGELOG.md:1219 msgid "Kalle Anka" msgstr "" -#: ../../../CHANGELOG:1291 +#: ../../../CHANGELOG.md:1220 msgid "mekind" msgstr "" -#: ../../../CHANGELOG:1293 +#: ../../../CHANGELOG.md:1222 msgid "Puri" msgstr "" -#: ../../../CHANGELOG:1294 ../../../CHANGELOG:1699 ../../../CHANGELOG:1775 -msgid "Quentin PAGÈS" -msgstr "" - -#: ../../../CHANGELOG:1295 +#: ../../../CHANGELOG.md:1224 msgid "Raphaël Ventura" msgstr "" -#: ../../../CHANGELOG:1296 +#: ../../../CHANGELOG.md:1225 msgid "Slimane Selyan Amiri" msgstr "" -#: ../../../CHANGELOG:1297 ../../../CHANGELOG:1703 ../../../CHANGELOG:2096 -msgid "SpcCw" -msgstr "" - -#: ../../../CHANGELOG:1298 -msgid "Stefano Pigozzi" -msgstr "" - -#: ../../../CHANGELOG:1299 +#: ../../../CHANGELOG.md:1228 msgid "Sébastien de Melo" msgstr "" -#: ../../../CHANGELOG:1300 +#: ../../../CHANGELOG.md:1229 msgid "Ventura Pérez García" msgstr "" -#: ../../../CHANGELOG:1301 -msgid "vicdorke" -msgstr "" - -#: ../../../CHANGELOG:1302 ../../../CHANGELOG:1711 ../../../CHANGELOG:2100 +#: ../../../CHANGELOG.md:1231 ../../../CHANGELOG.md:1622 +#: ../../../CHANGELOG.md:1993 msgid "Xosé M" msgstr "" -#: ../../../CHANGELOG:1306 +#: ../../../CHANGELOG.md:1233 msgid "0.21.2 (2020-07-27)" msgstr "" -#: ../../../CHANGELOG:1313 +#: ../../../CHANGELOG.md:1239 msgid "" "Added a new ?related=obj_id filter for artists, albums and tracks, based " "on tags" msgstr "" -#: ../../../CHANGELOG:1314 +#: ../../../CHANGELOG.md:1240 msgid "Can now filter subscribed content through API (#1116)" msgstr "" -#: ../../../CHANGELOG:1315 +#: ../../../CHANGELOG.md:1241 msgid "" "Support ordering=random for artists, albums, tracks and channels " "endpoints (#1145)" msgstr "" -#: ../../../CHANGELOG:1316 +#: ../../../CHANGELOG.md:1242 msgid "Use role=alert on forms/toast message to improve accessibility (#1134)" msgstr "" -#: ../../../CHANGELOG:1321 +#: ../../../CHANGELOG.md:1246 msgid "Fix embedded player not working on channel series/album (#1175)" msgstr "" -#: ../../../CHANGELOG:1322 +#: ../../../CHANGELOG.md:1247 msgid "Fixed broken mimetype detection during import (#1165)" msgstr "" -#: ../../../CHANGELOG:1323 +#: ../../../CHANGELOG.md:1248 msgid "Fixed crash when loading recent albums via Subsonic (#1158)" msgstr "" -#: ../../../CHANGELOG:1324 +#: ../../../CHANGELOG.md:1249 msgid "Fixed crash with null help text in admin (#1161)" msgstr "" -#: ../../../CHANGELOG:1325 +#: ../../../CHANGELOG.md:1250 msgid "Fixed invalid metadata when importing multi-artists tracks/albums (#1104)" msgstr "" -#: ../../../CHANGELOG:1326 +#: ../../../CHANGELOG.md:1251 msgid "Fixed player crash when using Funkwhale as a PWA (#1157)" msgstr "" -#: ../../../CHANGELOG:1327 +#: ../../../CHANGELOG.md:1252 msgid "Fixed wrong convert art displaying in some situations (#1138)" msgstr "" -#: ../../../CHANGELOG:1333 +#: ../../../CHANGELOG.md:1258 msgid "Bheesham Persaud" msgstr "" -#: ../../../CHANGELOG:1338 +#: ../../../CHANGELOG.md:1261 msgid "0.21.1 (2020-06-11)" msgstr "" -#: ../../../CHANGELOG:1346 +#: ../../../CHANGELOG.md:1267 msgid "" -"Support a --watch mode with ``import_files`` to automatically add, update" -" and remove files when filesystem is updated (#721)" +"Support a --watch mode with `import_files` to automatically add, update " +"and remove files when filesystem is updated (#721)" msgstr "" -#: ../../../CHANGELOG:1350 +#: ../../../CHANGELOG.md:1271 msgid "Added new channels widget on pod landing page (#1113)" msgstr "" -#: ../../../CHANGELOG:1351 +#: ../../../CHANGELOG.md:1272 msgid "Fix HTML <title> not including instance name in some situations (#1107)" msgstr "" -#: ../../../CHANGELOG:1352 +#: ../../../CHANGELOG.md:1273 msgid "" "Make URL-building logic more resilient against reverse proxy " "misconfiguration (#1085)" msgstr "" -#: ../../../CHANGELOG:1353 +#: ../../../CHANGELOG.md:1274 msgid "Removed unused masonry dependency (#1112)" msgstr "" -#: ../../../CHANGELOG:1354 +#: ../../../CHANGELOG.md:1275 msgid "" "Support for specifying itunes:email and itunes:name in channels for " "compatibility with third-party platforms (#1154)" msgstr "" -#: ../../../CHANGELOG:1355 +#: ../../../CHANGELOG.md:1276 msgid "" "Updated the /api/v1/libraries endpoint to support listing public " "libraries from other users/pods (#1151)" msgstr "" -#: ../../../CHANGELOG:1360 +#: ../../../CHANGELOG.md:1280 msgid "" "Added safeguard to ensure local uploads are never purged from cache " "(#1086)" msgstr "" -#: ../../../CHANGELOG:1361 +#: ../../../CHANGELOG.md:1281 msgid "" "Ensure firefox password manager dont autofill username in search bar " "(#1090)" msgstr "" -#: ../../../CHANGELOG:1362 +#: ../../../CHANGELOG.md:1282 msgid "" "Ensure player doesn't disappear when last queue track is removed manually" " (#1092)" msgstr "" -#: ../../../CHANGELOG:1363 +#: ../../../CHANGELOG.md:1283 msgid "Ensure tracks linked to skipped upload can be pruned (#1011)" msgstr "" -#: ../../../CHANGELOG:1364 +#: ../../../CHANGELOG.md:1284 msgid "Fix playlist modal only listing 50 first playlists (#1087)" msgstr "" -#: ../../../CHANGELOG:1365 +#: ../../../CHANGELOG.md:1285 msgid "Fixed a wording issue on artist channel page (#1117)" msgstr "" -#: ../../../CHANGELOG:1366 +#: ../../../CHANGELOG.md:1286 msgid "Fixed crash on python 3.5 with cli importer (#1155)" msgstr "" -#: ../../../CHANGELOG:1367 +#: ../../../CHANGELOG.md:1287 msgid "Fixed issue when displaying starred tracks on subsonic (#1082)" msgstr "" -#: ../../../CHANGELOG:1368 +#: ../../../CHANGELOG.md:1288 msgid "" "Fixed mimetype detection issue that broke transcoding on some tracks " -"(#1093). Run ``python manage.py fix_uploads --mimetype`` to set proper " +"(#1093). Run `python manage.py fix_uploads --mimetype` to set proper " "mimetypes on existing uploads." msgstr "" -#: ../../../CHANGELOG:1369 +#: ../../../CHANGELOG.md:1289 msgid "" "Fixed page not refreshing when switching between My Library and Explore " "sections (#1091)" msgstr "" -#: ../../../CHANGELOG:1370 +#: ../../../CHANGELOG.md:1290 msgid "Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147)" msgstr "" -#: ../../../CHANGELOG:1371 +#: ../../../CHANGELOG.md:1291 msgid "Fixed wrong album and track count in admin artist API (#1096)" msgstr "" -#: ../../../CHANGELOG:1372 +#: ../../../CHANGELOG.md:1292 msgid "" "Include tracks by album artist when filtering by artist on /api/v1/tracks" " (#1078)" msgstr "" -#: ../../../CHANGELOG:1388 +#: ../../../CHANGELOG.md:1306 msgid "" "Contributors to this release (development, documentation, reviews, " "testing):" msgstr "" -#: ../../../CHANGELOG:1392 ../../../CHANGELOG:1676 ../../../CHANGELOG:2141 -msgid "Creak" -msgstr "" - -#: ../../../CHANGELOG:1393 +#: ../../../CHANGELOG.md:1311 msgid "gisforgabriel" msgstr "" -#: ../../../CHANGELOG:1394 +#: ../../../CHANGELOG.md:1312 msgid "Siren" msgstr "" -#: ../../../CHANGELOG:1399 +#: ../../../CHANGELOG.md:1315 msgid "0.21 \"Agate\" (2020-04-24)" msgstr "" -#: ../../../CHANGELOG:1401 +#: ../../../CHANGELOG.md:1317 msgid "" "This 0.21 release is dedicated to Agate, to thank her, for both having " "created the Funkwhale project, being the current lead developer, and for " @@ -2584,7 +2941,7 @@ msgid "" "Funkwhale community <3" msgstr "" -#: ../../../CHANGELOG:1403 +#: ../../../CHANGELOG.md:1319 msgid "" "We are truly grateful as well to the dozens of people who contributed to " "this release with translations, development, documentation, reviews, " @@ -2592,7 +2949,7 @@ msgid "" "integrations… You made it possible!" msgstr "" -#: ../../../CHANGELOG:1405 +#: ../../../CHANGELOG.md:1321 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html, there are also " @@ -2600,15 +2957,15 @@ msgid "" "(search \"Manual action\")." msgstr "" -#: ../../../CHANGELOG:1409 +#: ../../../CHANGELOG.md:1323 msgid "Channels and podcasts" msgstr "" -#: ../../../CHANGELOG:1411 +#: ../../../CHANGELOG.md:1325 msgid "Funkwhale 0.21 includes a brand new feature: Channels!" msgstr "" -#: ../../../CHANGELOG:1413 +#: ../../../CHANGELOG.md:1327 msgid "" "Channels can be used as a replacement to public libraries, to publish " "audio content, both musical and non-musical. They federate with other " @@ -2618,14 +2975,14 @@ msgid "" "publication, simply visit your profile and create a channel from there." msgstr "" -#: ../../../CHANGELOG:1418 +#: ../../../CHANGELOG.md:1332 msgid "" "Each Funkwhale channel also comes with RSS feed that is compatible with " "existing podcasting applications, like AntennaPod on Android and, within " "Funkwhale, you can also subscribe to any podcast from its RSS feed!" msgstr "" -#: ../../../CHANGELOG:1421 +#: ../../../CHANGELOG.md:1335 msgid "" "Many, many thanks to the numerous people who helped with the feature " "design, development and testing, and in particular to the members of the " @@ -2634,11 +2991,11 @@ msgid "" "with us to ensure compatibility." msgstr "" -#: ../../../CHANGELOG:1426 +#: ../../../CHANGELOG.md:1339 msgid "Redesigned navigation, player and queue" msgstr "" -#: ../../../CHANGELOG:1428 +#: ../../../CHANGELOG.md:1341 msgid "" "This release includes a full redesign of our navigation, player and " "queue. Overall, it should provide a better, less confusing experience, " @@ -2647,33 +3004,33 @@ msgid "" "people, we got it done!" msgstr "" -#: ../../../CHANGELOG:1433 +#: ../../../CHANGELOG.md:1345 msgid "Improved search bar for searching remote objects" msgstr "" -#: ../../../CHANGELOG:1435 +#: ../../../CHANGELOG.md:1347 msgid "" "The search bar now support fetching arbitrary objects using a URL. In " "particular, you can use this to quickly:" msgstr "" -#: ../../../CHANGELOG:1437 +#: ../../../CHANGELOG.md:1349 msgid "Subscribe to a remote library via its URL" msgstr "" -#: ../../../CHANGELOG:1438 +#: ../../../CHANGELOG.md:1350 msgid "Listen a public track from another pod" msgstr "" -#: ../../../CHANGELOG:1439 +#: ../../../CHANGELOG.md:1351 msgid "Subscribe to a channel" msgstr "" -#: ../../../CHANGELOG:1442 +#: ../../../CHANGELOG.md:1353 msgid "Screening for sign-ups and custom sign-up form" msgstr "" -#: ../../../CHANGELOG:1444 +#: ../../../CHANGELOG.md:1355 msgid "" "Instance admins can now configure their pod so that registrations " "required manual approval from a moderator. This is especially useful on " @@ -2681,49 +3038,49 @@ msgid "" "completely, but don't want spam or unwanted users to join your pod." msgstr "" -#: ../../../CHANGELOG:1448 +#: ../../../CHANGELOG.md:1359 msgid "" "When this is enabled and a new user register, their request is put in a " "moderation queue, and moderators are notified by email. When the request " "is approved or refused, the user is also notified by email." msgstr "" -#: ../../../CHANGELOG:1451 +#: ../../../CHANGELOG.md:1362 msgid "In addition, it's also possible to customize the sign-up form by:" msgstr "" -#: ../../../CHANGELOG:1453 +#: ../../../CHANGELOG.md:1364 msgid "Providing a custom help text, in markdown format" msgstr "" -#: ../../../CHANGELOG:1454 +#: ../../../CHANGELOG.md:1365 msgid "" "Including additional fields in the form, for instance to ask the user why" " they want to join. Data collected through these fields is included in " "the sign-up request and viewable by the mods" msgstr "" -#: ../../../CHANGELOG:1457 +#: ../../../CHANGELOG.md:1367 msgid "Federated reports" msgstr "" -#: ../../../CHANGELOG:1459 +#: ../../../CHANGELOG.md:1369 msgid "" "It's now possible to send a copy of a report to the server hosting the " "reported object, in order to make moderation easier and more distributed." msgstr "" -#: ../../../CHANGELOG:1461 +#: ../../../CHANGELOG.md:1371 msgid "" "This feature is inspired by Mastodon's current design, and should work " "with at least Funkwhale and Mastodon servers." msgstr "" -#: ../../../CHANGELOG:1464 +#: ../../../CHANGELOG.md:1373 msgid "Improved search performance" msgstr "" -#: ../../../CHANGELOG:1466 +#: ../../../CHANGELOG.md:1375 msgid "" "Our search engine went through a full rewrite to make it faster. This new" " engine is enabled by default when using the search bar, or when " @@ -2731,805 +3088,797 @@ msgid "" "text search capabilities." msgstr "" -#: ../../../CHANGELOG:1470 +#: ../../../CHANGELOG.md:1379 msgid "" "During our tests, we observed huge performance improvements after the " "switch, by an order of magnitude. This should be especially perceptible " "on pods with large databases, more modest hardware or hard drives." msgstr "" -#: ../../../CHANGELOG:1474 +#: ../../../CHANGELOG.md:1383 msgid "" "We plan to remove the old engine in an upcoming release. In the meantime," " if anything goes wrong, you can switch back by setting " -"``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` file." +"`USE_FULL_TEXT_SEARCH=false` in your `.env` file." msgstr "" -#: ../../../CHANGELOG:1478 +#: ../../../CHANGELOG.md:1386 msgid "Enforced email verification" msgstr "" -#: ../../../CHANGELOG:1480 +#: ../../../CHANGELOG.md:1388 msgid "" -"The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE`` setting can be used " -"to make email verification mandatory for your users. It defaults to " -"``false``, and doesn't apply to superuser accounts created through the " -"CLI." +"The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to" +" make email verification mandatory for your users. It defaults to " +"`false`, and doesn't apply to superuser accounts created through the CLI." msgstr "" -#: ../../../CHANGELOG:1484 +#: ../../../CHANGELOG.md:1392 msgid "If you enable this, ensure you have a SMTP server configured too." msgstr "" -#: ../../../CHANGELOG:1487 +#: ../../../CHANGELOG.md:1394 msgid "More reliable CLI importer [manual action required]" msgstr "" -#: ../../../CHANGELOG:1489 +#: ../../../CHANGELOG.md:1396 msgid "" "Our CLI importer is now more reliable and less prone to Out-of-Memory " "issues, especially when scanning large libraries. (hundreds of GB or " "bigger)" msgstr "" -#: ../../../CHANGELOG:1491 +#: ../../../CHANGELOG.md:1398 msgid "" "We've also improved the directory crawling logic, so that you don't have " "to use glob patterns or specify extensions when importing. As a result, " "the syntax for providing directories to the command as changed slightly." msgstr "" -#: ../../../CHANGELOG:1493 +#: ../../../CHANGELOG.md:1400 msgid "" -"If you use the ``import_files`` command, this means you should replace " -"scripts that look like this::" +"If you use the `import_files` command, this means you should replace " +"scripts that look like this:" msgstr "" -#: ../../../CHANGELOG:1497 -msgid "By this::" +#: ../../../CHANGELOG.md:1406 +msgid "By this:" msgstr "" -#: ../../../CHANGELOG:1501 +#: ../../../CHANGELOG.md:1412 msgid "" "And Funkwhale will happily import any supported audio file from the " "specified directory." msgstr "" -#: ../../../CHANGELOG:1504 ../../../CHANGELOG:1594 +#: ../../../CHANGELOG.md:1414 ../../../CHANGELOG.md:1505 msgid "User management through the server CLI" msgstr "" -#: ../../../CHANGELOG:1506 +#: ../../../CHANGELOG.md:1416 msgid "" "We now support user creation (incl. non-admin accounts), update and " "removal directly from the server CLI. Typical use cases include:" msgstr "" -#: ../../../CHANGELOG:1509 +#: ../../../CHANGELOG.md:1419 msgid "Changing a user password from the command line" msgstr "" -#: ../../../CHANGELOG:1510 +#: ../../../CHANGELOG.md:1420 msgid "Creating or updating users from deployments scripts or playbooks" msgstr "" -#: ../../../CHANGELOG:1511 +#: ../../../CHANGELOG.md:1421 msgid "Removing or granting permissions or upload quota to multiple users at once" msgstr "" -#: ../../../CHANGELOG:1512 +#: ../../../CHANGELOG.md:1422 msgid "Marking multiple users as inactive" msgstr "" -#: ../../../CHANGELOG:1514 +#: ../../../CHANGELOG.md:1424 msgid "" -"All user-related commands are available under the ``python manage.py fw " -"users`` namespace. Please refer to the `Admin documentation " -"<https://docs.funkwhale.audio/admin/commands.html#user-management>`_ for " -"more information and instructions." +"All user-related commands are available under the `python manage.py fw " +"users` namespace. Please refer to the [Admin " +"documentation](https://docs.funkwhale.audio/admin/commands.html#user-" +"management) for more information and instructions." msgstr "" -#: ../../../CHANGELOG:1518 -msgid "" -"Progressive web app [Manual action sugFull list of changes " -"^^^^^^^^^^^^^^^^^^^^gested, non-docker only] " -"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" +#: ../../../CHANGELOG.md:1428 +msgid "Progressive web app [Manual action suggested, non-docker only]" msgstr "" -#: ../../../CHANGELOG:1522 +#: ../../../CHANGELOG.md:1430 msgid "" "We've made Funkwhale's Web UI a Progressive Web Application (PWA), in " "order to improve the user experience during offline use, and on mobile " "devices." msgstr "" -#: ../../../CHANGELOG:1525 +#: ../../../CHANGELOG.md:1433 msgid "" "In order to fully benefit from this change, if your pod isn't deployed " "using Docker, ensure the following instruction is present in your nginx " -"configuration::" +"configuration:" msgstr "" -#: ../../../CHANGELOG:1534 +#: ../../../CHANGELOG.md:1443 msgid "" "Postgres docker changed environment variable [manual action required, " "docker multi-container only]" msgstr "" -#: ../../../CHANGELOG:1536 +#: ../../../CHANGELOG.md:1445 msgid "" "If you're running with docker and our multi-container setup, there was a " "breaking change starting in the 11.7 postgres image (https://github.com" "/docker-library/postgres/pull/658)" msgstr "" -#: ../../../CHANGELOG:1538 -msgid "" -"You need to add this to your .env file: " -"``POSTGRES_HOST_AUTH_METHOD=trust``" +#: ../../../CHANGELOG.md:1447 +msgid "You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust`" msgstr "" -#: ../../../CHANGELOG:1540 +#: ../../../CHANGELOG.md:1449 msgid "Newer deployments aren't affected." msgstr "" -#: ../../../CHANGELOG:1543 +#: ../../../CHANGELOG.md:1451 msgid "" "Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one" " only]" msgstr "" -#: ../../../CHANGELOG:1545 +#: ../../../CHANGELOG.md:1453 msgid "" -"With our upgrade to Alpine 3.10, the ``funkwhale/all-in-one`` image now " +"With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now " "includes PostgreSQL 11." msgstr "" -#: ../../../CHANGELOG:1547 +#: ../../../CHANGELOG.md:1455 msgid "" "In order to update to Funkwhale 0.21, you will first need to upgrade " -"Funkwhale's PostgreSQL database, following the steps below::" +"Funkwhale's PostgreSQL database, following the steps below:" msgstr "" -#: ../../../CHANGELOG:1574 +#: ../../../CHANGELOG.md:1484 msgid "" "Once you have completed the Funkwhale upgrade with our regular " "instructions and everything works properly, you can remove the " -"backups/old files::" +"backups/old files:" msgstr "" -#: ../../../CHANGELOG:1587 +#: ../../../CHANGELOG.md:1498 msgid "Support for publishing and subscribing to podcasts (#170)" msgstr "" -#: ../../../CHANGELOG:1588 +#: ../../../CHANGELOG.md:1499 msgid "Brand new navigation, queue and player redesign (#594)" msgstr "" -#: ../../../CHANGELOG:1589 +#: ../../../CHANGELOG.md:1500 msgid "Can now browse a library content through the UI (#926)" msgstr "" -#: ../../../CHANGELOG:1590 +#: ../../../CHANGELOG.md:1501 msgid "Federated reports (#1038)" msgstr "" -#: ../../../CHANGELOG:1591 +#: ../../../CHANGELOG.md:1502 msgid "Screening for sign-ups (#1040)" msgstr "" -#: ../../../CHANGELOG:1592 +#: ../../../CHANGELOG.md:1503 msgid "Make it possible to enforce email verification (#1039)" msgstr "" -#: ../../../CHANGELOG:1593 +#: ../../../CHANGELOG.md:1504 msgid "Added a new radio based on another user listenings (#1060)" msgstr "" -#: ../../../CHANGELOG:1598 +#: ../../../CHANGELOG.md:1509 msgid "Added ability to reject library follows from notifications screen (#859)" msgstr "" -#: ../../../CHANGELOG:1599 +#: ../../../CHANGELOG.md:1510 msgid "" "Added periodic background task and CLI command to associate genre tags to" " artists and albums based on identical tags found on corresponding tracks" " (#988)" msgstr "" -#: ../../../CHANGELOG:1600 +#: ../../../CHANGELOG.md:1511 msgid "" "Added support for CELERYD_CONCURRENCY env var to control the number of " "worker processes (#997)" msgstr "" -#: ../../../CHANGELOG:1601 +#: ../../../CHANGELOG.md:1512 msgid "Added the ability to sort albums by release date (#1013)" msgstr "" -#: ../../../CHANGELOG:1602 +#: ../../../CHANGELOG.md:1513 msgid "Added two new radios to play your own content or a given library tracks" msgstr "" -#: ../../../CHANGELOG:1603 +#: ../../../CHANGELOG.md:1514 msgid "" "Advertise list of known nodes on /api/v1/federation/domains and in " "nodeinfo if stats sharing is enabled" msgstr "" -#: ../../../CHANGELOG:1604 +#: ../../../CHANGELOG.md:1515 msgid "" "Changed footer to use instance name if available, and append ellipses if " "instance URL/Name is too long (#1012)" msgstr "" -#: ../../../CHANGELOG:1605 +#: ../../../CHANGELOG.md:1516 msgid "Favor local uploads when playing a track with multiple uploads (#1036)" msgstr "" -#: ../../../CHANGELOG:1606 +#: ../../../CHANGELOG.md:1517 msgid "Include only local content in nodeinfo stats, added downloads count" msgstr "" -#: ../../../CHANGELOG:1607 +#: ../../../CHANGELOG.md:1518 msgid "" "Make media and static files serving more reliable when reverse proxy " -"X_FORWARDED_* headers are incorrect (#947)" +"`X_FORWARDED_*` headers are incorrect (#947)" msgstr "" -#: ../../../CHANGELOG:1608 +#: ../../../CHANGELOG.md:1519 msgid "Order the playlist columns by modification date in the Browse tab (#775)" msgstr "" -#: ../../../CHANGELOG:1609 +#: ../../../CHANGELOG.md:1520 msgid "" "Reduced size of funkwhale/funkwhale docker images thanks to multi-stage " "builds (!1042)" msgstr "" -#: ../../../CHANGELOG:1610 +#: ../../../CHANGELOG.md:1521 msgid "" "Remember display settings in Album, Artist, Radio and Playlist views " "(#391)" msgstr "" -#: ../../../CHANGELOG:1611 +#: ../../../CHANGELOG.md:1522 msgid "Removed unnecessary \"Federation music needs approval\" setting (#959)" msgstr "" -#: ../../../CHANGELOG:1612 +#: ../../../CHANGELOG.md:1523 msgid "Replaced our slow research logic by PostgreSQL full-text search (#994)" msgstr "" -#: ../../../CHANGELOG:1613 +#: ../../../CHANGELOG.md:1524 msgid "" "Support autoplay when loading embed frame from Mastodon and third-party " "websites (#1041)" msgstr "" -#: ../../../CHANGELOG:1614 +#: ../../../CHANGELOG.md:1525 msgid "" "Support filtering playlist by name and several additional UX improvements" " in playlists modal (#974)" msgstr "" -#: ../../../CHANGELOG:1615 +#: ../../../CHANGELOG.md:1526 msgid "Support modifying album cover art through the web UI (#588)" msgstr "" -#: ../../../CHANGELOG:1616 +#: ../../../CHANGELOG.md:1527 msgid "" "Use a dedicated scope for throttling subsonic to avoid intrusive rate-" "limiting" msgstr "" -#: ../../../CHANGELOG:1617 +#: ../../../CHANGELOG.md:1528 msgid "" "Use same markdown widget for all content fields (rules, description, " "reports, notes, etc.)" msgstr "" -#: ../../../CHANGELOG:1618 +#: ../../../CHANGELOG.md:1529 msgid "" "CLI Importer is now more reliable and less resource-hungry on large " "libraries" msgstr "" -#: ../../../CHANGELOG:1619 ../../../CHANGELOG:1643 +#: ../../../CHANGELOG.md:1530 ../../../CHANGELOG.md:1554 msgid "Add support custom domain for S3 storage" msgstr "" -#: ../../../CHANGELOG:1620 +#: ../../../CHANGELOG.md:1531 msgid "Better placeholders for channels when there are no episodes or series" msgstr "" -#: ../../../CHANGELOG:1621 +#: ../../../CHANGELOG.md:1532 msgid "Updated documentation for 0.21 release" msgstr "" -#: ../../../CHANGELOG:1622 +#: ../../../CHANGELOG.md:1533 msgid "Improved performance and error handling when fetching remote attachments" msgstr "" -#: ../../../CHANGELOG:1626 +#: ../../../CHANGELOG.md:1537 msgid "Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961)" msgstr "" -#: ../../../CHANGELOG:1627 +#: ../../../CHANGELOG.md:1538 msgid "" "Fix issue with browser shortcuts such as search and focus URL not being " "recognised (#340, #985)" msgstr "" -#: ../../../CHANGELOG:1628 +#: ../../../CHANGELOG.md:1539 msgid "Fixed admin dropdown not showing after login (#1042)" msgstr "" -#: ../../../CHANGELOG:1629 +#: ../../../CHANGELOG.md:1540 msgid "Fixed an issue with celerybeat container failing to restart (#1004)" msgstr "" -#: ../../../CHANGELOG:1630 +#: ../../../CHANGELOG.md:1541 msgid "Fixed invalid displayed number of tracks in playlist (#986)" msgstr "" -#: ../../../CHANGELOG:1631 +#: ../../../CHANGELOG.md:1542 msgid "Fixed issue with recent results not being loaded from the API (#948)" msgstr "" -#: ../../../CHANGELOG:1632 +#: ../../../CHANGELOG.md:1543 msgid "Fixed issue with sorting by album name not working (#960)" msgstr "" -#: ../../../CHANGELOG:1633 +#: ../../../CHANGELOG.md:1544 msgid "" "Fixed short audio glitch when switching switching to another track with " "player paused (#970)" msgstr "" -#: ../../../CHANGELOG:1634 +#: ../../../CHANGELOG.md:1545 msgid "" "Improved deduplication logic to prevent skipped files during import " "(#348, #474, #557, #740, #928)" msgstr "" -#: ../../../CHANGELOG:1635 +#: ../../../CHANGELOG.md:1546 msgid "More resilient tag parsing with empty release date or album artist (#1037)" msgstr "" -#: ../../../CHANGELOG:1636 +#: ../../../CHANGELOG.md:1547 msgid "More robust importer against malformed dates (#966)" msgstr "" -#: ../../../CHANGELOG:1637 +#: ../../../CHANGELOG.md:1548 msgid "" "Removed \"nodeinfo disabled\" setting, as nodeinfo is required for the UI" " to work (#982)" msgstr "" -#: ../../../CHANGELOG:1638 +#: ../../../CHANGELOG.md:1549 msgid "Replaced PDF icon by List icon in playlist placeholder (#943)" msgstr "" -#: ../../../CHANGELOG:1639 +#: ../../../CHANGELOG.md:1550 msgid "" "Resolve an issue where disc numbers were not taken into consideration " "when playing an album from the album card (#1006)" msgstr "" -#: ../../../CHANGELOG:1640 +#: ../../../CHANGELOG.md:1551 msgid "Set correct size for album covers in playlist cards (#680)" msgstr "" -#: ../../../CHANGELOG:1641 +#: ../../../CHANGELOG.md:1552 msgid "Remove double spaces in ChannelForm" msgstr "" -#: ../../../CHANGELOG:1642 +#: ../../../CHANGELOG.md:1553 msgid "Deduplicate tags in Audio ActivityPub representation" msgstr "" -#: ../../../CHANGELOG:1644 +#: ../../../CHANGELOG.md:1555 msgid "Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075)" msgstr "" -#: ../../../CHANGELOG:1645 +#: ../../../CHANGELOG.md:1556 msgid "Exclude external podcasts from library home" msgstr "" -#: ../../../CHANGELOG:1646 +#: ../../../CHANGELOG.md:1557 msgid "Fixed broken channel save when description is too long" msgstr "" -#: ../../../CHANGELOG:1647 +#: ../../../CHANGELOG.md:1558 msgid "" "Fixed 500 error when federation is disabled and application+json is " "requested" msgstr "" -#: ../../../CHANGELOG:1648 +#: ../../../CHANGELOG.md:1559 msgid "Fixed minor subsonic API crash" msgstr "" -#: ../../../CHANGELOG:1649 +#: ../../../CHANGELOG.md:1560 msgid "Fixed broken local profile page when allow-list is enabled" msgstr "" -#: ../../../CHANGELOG:1650 +#: ../../../CHANGELOG.md:1561 msgid "" "Fixed issue with confirmation email not sending when signup-approval was " "enabled" msgstr "" -#: ../../../CHANGELOG:1651 +#: ../../../CHANGELOG.md:1562 msgid "Ensure 0 quota on user is honored" msgstr "" -#: ../../../CHANGELOG:1652 +#: ../../../CHANGELOG.md:1563 msgid "Fixed attachments URL not honoring media URL" msgstr "" -#: ../../../CHANGELOG:1653 +#: ../../../CHANGELOG.md:1564 msgid "Fix grammar in msg string in TrackBase.vue" msgstr "" -#: ../../../CHANGELOG:1654 +#: ../../../CHANGELOG.md:1565 msgid "Fix typo in SubscribeButton.vue" msgstr "" -#: ../../../CHANGELOG:1656 +#: ../../../CHANGELOG.md:1567 msgid "Translations:" msgstr "" -#: ../../../CHANGELOG:1658 +#: ../../../CHANGELOG.md:1569 msgid "Arabic" msgstr "" -#: ../../../CHANGELOG:1659 +#: ../../../CHANGELOG.md:1570 msgid "Catalan" msgstr "" -#: ../../../CHANGELOG:1660 +#: ../../../CHANGELOG.md:1571 msgid "English (United Kingdom)" msgstr "" -#: ../../../CHANGELOG:1661 +#: ../../../CHANGELOG.md:1572 msgid "German" msgstr "" -#: ../../../CHANGELOG:1662 +#: ../../../CHANGELOG.md:1573 msgid "Hungarian" msgstr "" -#: ../../../CHANGELOG:1663 +#: ../../../CHANGELOG.md:1574 msgid "Japanese" msgstr "" -#: ../../../CHANGELOG:1664 +#: ../../../CHANGELOG.md:1575 msgid "Occitan" msgstr "" -#: ../../../CHANGELOG:1665 +#: ../../../CHANGELOG.md:1576 msgid "Portuguese (Brazil)" msgstr "" -#: ../../../CHANGELOG:1666 +#: ../../../CHANGELOG.md:1577 msgid "Russian" msgstr "" -#: ../../../CHANGELOG:1671 +#: ../../../CHANGELOG.md:1582 msgid "annando" msgstr "" -#: ../../../CHANGELOG:1672 +#: ../../../CHANGELOG.md:1583 msgid "Anton Strömkvist" msgstr "" -#: ../../../CHANGELOG:1673 +#: ../../../CHANGELOG.md:1584 msgid "Audrey" msgstr "" -#: ../../../CHANGELOG:1674 ../../../CHANGELOG:2076 ../../../CHANGELOG:2346 +#: ../../../CHANGELOG.md:1585 ../../../CHANGELOG.md:1969 +#: ../../../CHANGELOG.md:2217 msgid "ButterflyOfFire" msgstr "" -#: ../../../CHANGELOG:1678 +#: ../../../CHANGELOG.md:1589 msgid "dashie" msgstr "" -#: ../../../CHANGELOG:1679 +#: ../../../CHANGELOG.md:1590 msgid "Eloisa" msgstr "" -#: ../../../CHANGELOG:1680 +#: ../../../CHANGELOG.md:1591 msgid "eorn" msgstr "" -#: ../../../CHANGELOG:1682 +#: ../../../CHANGELOG.md:1593 msgid "gerhardbeck" msgstr "" -#: ../../../CHANGELOG:1683 +#: ../../../CHANGELOG.md:1594 msgid "GinnyMcQueen" msgstr "" -#: ../../../CHANGELOG:1684 +#: ../../../CHANGELOG.md:1595 msgid "guillermau" msgstr "" -#: ../../../CHANGELOG:1685 +#: ../../../CHANGELOG.md:1596 msgid "Haelwenn" msgstr "" -#: ../../../CHANGELOG:1686 +#: ../../../CHANGELOG.md:1597 msgid "jinxx" msgstr "" -#: ../../../CHANGELOG:1687 +#: ../../../CHANGELOG.md:1598 msgid "Jonathan Aylard" msgstr "" -#: ../../../CHANGELOG:1689 +#: ../../../CHANGELOG.md:1600 msgid "M.G" msgstr "" -#: ../../../CHANGELOG:1690 -msgid "marzzzello" -msgstr "" - -#: ../../../CHANGELOG:1691 +#: ../../../CHANGELOG.md:1602 msgid "Mathé Grievink" msgstr "" -#: ../../../CHANGELOG:1692 ../../../CHANGELOG:2090 ../../../CHANGELOG:2358 +#: ../../../CHANGELOG.md:1603 ../../../CHANGELOG.md:1983 +#: ../../../CHANGELOG.md:2229 msgid "Mélanie Chauvel" msgstr "" -#: ../../../CHANGELOG:1693 +#: ../../../CHANGELOG.md:1604 msgid "Mjourdan" msgstr "" -#: ../../../CHANGELOG:1694 +#: ../../../CHANGELOG.md:1605 msgid "Morgan Kesler" msgstr "" -#: ../../../CHANGELOG:1695 +#: ../../../CHANGELOG.md:1606 msgid "Noe Gaumont" msgstr "" -#: ../../../CHANGELOG:1696 +#: ../../../CHANGELOG.md:1607 msgid "Noureddine HADDAG" msgstr "" -#: ../../../CHANGELOG:1697 +#: ../../../CHANGELOG.md:1608 msgid "Ollie" msgstr "" -#: ../../../CHANGELOG:1698 +#: ../../../CHANGELOG.md:1609 msgid "Peter Wickenberg" msgstr "" -#: ../../../CHANGELOG:1700 ../../../CHANGELOG:2363 +#: ../../../CHANGELOG.md:1611 ../../../CHANGELOG.md:2234 msgid "Renon" msgstr "" -#: ../../../CHANGELOG:1701 +#: ../../../CHANGELOG.md:1612 msgid "Satsuki Yanagi" msgstr "" -#: ../../../CHANGELOG:1702 +#: ../../../CHANGELOG.md:1613 msgid "Shlee" msgstr "" -#: ../../../CHANGELOG:1704 +#: ../../../CHANGELOG.md:1615 msgid "techknowlogick" msgstr "" -#: ../../../CHANGELOG:1705 +#: ../../../CHANGELOG.md:1616 msgid "ThibG" msgstr "" -#: ../../../CHANGELOG:1707 +#: ../../../CHANGELOG.md:1618 msgid "unklebonehead" msgstr "" -#: ../../../CHANGELOG:1708 +#: ../../../CHANGELOG.md:1619 msgid "wakest" msgstr "" -#: ../../../CHANGELOG:1709 +#: ../../../CHANGELOG.md:1620 msgid "wxcafé" msgstr "" -#: ../../../CHANGELOG:1710 ../../../CHANGELOG:2099 +#: ../../../CHANGELOG.md:1621 ../../../CHANGELOG.md:1992 msgid "Xaloc" msgstr "" -#: ../../../CHANGELOG:1714 +#: ../../../CHANGELOG.md:1624 msgid "0.20.1 (2019-10-28)" msgstr "" -#: ../../../CHANGELOG:1721 ../../../CHANGELOG:1742 +#: ../../../CHANGELOG.md:1628 ../../../CHANGELOG.md:1650 msgid "" "Denormalized audio permission logic in a separate table to enhance " "performance" msgstr "" -#: ../../../CHANGELOG:1723 +#: ../../../CHANGELOG.md:1630 msgid "" "With this release, we're introducing a performance enhancement that " "should reduce the load on the database and API servers (cf " "https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939)." msgstr "" -#: ../../../CHANGELOG:1726 +#: ../../../CHANGELOG.md:1633 msgid "" "Under the hood, we now maintain a separate table to link users to the " "tracks they are allowed to see. This change is **disabled** by default, " "but should be enabled by default starting in Funkwhale 0.21." msgstr "" -#: ../../../CHANGELOG:1729 +#: ../../../CHANGELOG.md:1636 msgid "" -"If you want to try it now, add ``MUSIC_USE_DENORMALIZATION=True`` to your" -" ``.env`` file, restart Funkwhale, and run the following command::" +"If you want to try it now, add `MUSIC_USE_DENORMALIZATION=True` to your " +"`.env` file, restart Funkwhale, and run the following command:" msgstr "" -#: ../../../CHANGELOG:1734 +#: ../../../CHANGELOG.md:1643 msgid "" "This shouldn't cause any regression, but we'd appreciate if you could " "test this before the 0.21 release and report any unusual behaviour " "regarding tracks, albums and artists visibility." msgstr "" -#: ../../../CHANGELOG:1740 +#: ../../../CHANGELOG.md:1648 msgid "Added a retry option for failed uploads (#942)" msgstr "" -#: ../../../CHANGELOG:1741 +#: ../../../CHANGELOG.md:1649 msgid "Added feedback via loading spinner when searching a remote library" msgstr "" -#: ../../../CHANGELOG:1743 +#: ../../../CHANGELOG.md:1651 msgid "" "Placeholders will now be shown if no content is available across the " "application (#750)" msgstr "" -#: ../../../CHANGELOG:1744 +#: ../../../CHANGELOG.md:1652 msgid "" "Reduce the number of simultaneous DB connections under some deployment " "scenario" msgstr "" -#: ../../../CHANGELOG:1745 +#: ../../../CHANGELOG.md:1653 msgid "Support byYear filtering in Subsonic API (#936)" msgstr "" -#: ../../../CHANGELOG:1750 +#: ../../../CHANGELOG.md:1657 msgid "Ensure password input doesn't overflow outside of container (#933)" msgstr "" -#: ../../../CHANGELOG:1751 +#: ../../../CHANGELOG.md:1658 msgid "Fix audio serving issues under S3/nginx when signatures are enabled" msgstr "" -#: ../../../CHANGELOG:1752 +#: ../../../CHANGELOG.md:1659 msgid "Fix import crash when importing M4A file with no embedded cover (#946)" msgstr "" -#: ../../../CHANGELOG:1753 +#: ../../../CHANGELOG.md:1660 msgid "Fix tag exclusion in custom radios (#950)" msgstr "" -#: ../../../CHANGELOG:1754 +#: ../../../CHANGELOG.md:1661 msgid "Fixed an issue with embed player CSS being purged during build (#935)" msgstr "" -#: ../../../CHANGELOG:1755 +#: ../../../CHANGELOG.md:1662 msgid "Fixed escaped pod name displayed on home/about page (#945)" msgstr "" -#: ../../../CHANGELOG:1756 +#: ../../../CHANGELOG.md:1663 msgid "Fixed pagination in subsonic getSongsByGenre endpoint (#954)" msgstr "" -#: ../../../CHANGELOG:1757 +#: ../../../CHANGELOG.md:1664 msgid "Fixed style glitches in dropdowns" msgstr "" -#: ../../../CHANGELOG:1762 +#: ../../../CHANGELOG.md:1668 msgid "" "Documented how to create DB extension by hand in case of permission error" " during migrations (#934)" msgstr "" -#: ../../../CHANGELOG:1765 ../../../CHANGELOG:2073 +#: ../../../CHANGELOG.md:1670 ../../../CHANGELOG.md:1966 msgid "" "Contributors to this release (translation, development, documentation, " "reviews, design):" msgstr "" -#: ../../../CHANGELOG:1768 +#: ../../../CHANGELOG.md:1673 msgid "Dag Stenstad" msgstr "" -#: ../../../CHANGELOG:1773 +#: ../../../CHANGELOG.md:1678 msgid "knuxify" msgstr "" -#: ../../../CHANGELOG:1774 +#: ../../../CHANGELOG.md:1679 msgid "Mateus Mattei Garcia" msgstr "" -#: ../../../CHANGELOG:1779 +#: ../../../CHANGELOG.md:1682 msgid "0.20 (2019-10-04)" msgstr "" -#: ../../../CHANGELOG:1786 +#: ../../../CHANGELOG.md:1686 msgid "Support for genres via tags" msgstr "" -#: ../../../CHANGELOG:1788 +#: ../../../CHANGELOG.md:1688 msgid "One of our most requested missing features is now available!" msgstr "" -#: ../../../CHANGELOG:1790 +#: ../../../CHANGELOG.md:1690 msgid "" "Starting with Funkwhale 0.20, Funkwhale will automatically extract genre " "information from uploaded files and associate it with the corresponding " "tracks in the form of tags (similar to Mastodon or Twitter hashtags). " -"Please refer to `our tagging documentation " -"<https://docs.funkwhale.audio/users/upload.html#tagging-files>`_ for more" -" information regarding the tagging process." +"Please refer to [our tagging " +"documentation](https://docs.funkwhale.audio/users/upload.html#tagging-" +"files) for more information regarding the tagging process." msgstr "" -#: ../../../CHANGELOG:1796 +#: ../../../CHANGELOG.md:1696 msgid "" "Tags can also be associated with artists and albums, and updated after " "upload through the UI using the edit system released in Funkwhale 0.19. " "Tags are also fetched when retrieving content via federation." msgstr "" -#: ../../../CHANGELOG:1800 +#: ../../../CHANGELOG.md:1700 msgid "Tags are used in various places to enhance user experience:" msgstr "" -#: ../../../CHANGELOG:1802 +#: ../../../CHANGELOG.md:1702 msgid "Tags are listed on tracks, albums and artist profiles" msgstr "" -#: ../../../CHANGELOG:1803 +#: ../../../CHANGELOG.md:1703 msgid "" "Each tag has a dedicated page were you can browse corresponding content " "and quickly start a radio" msgstr "" -#: ../../../CHANGELOG:1804 +#: ../../../CHANGELOG.md:1704 msgid "The custom radio builder now supports using tags" msgstr "" -#: ../../../CHANGELOG:1805 +#: ../../../CHANGELOG.md:1705 msgid "" "Subsonic apps that support genres - such as DSub or Ultrasonic - should " "display this information as well" msgstr "" -#: ../../../CHANGELOG:1807 +#: ../../../CHANGELOG.md:1707 msgid "" "If you are a pod admin and want to extract tags from already uploaded " -"content, you run `this snippet " -"<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__ and " -"`this snippet " -"<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ in a " -"``python manage.py shell``." +"content, you run [this " +"snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) and" +" [this " +"snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in " +"a `python manage.py shell`." msgstr "" -#: ../../../CHANGELOG:1811 +#: ../../../CHANGELOG.md:1710 msgid "Content and account reports" msgstr "" -#: ../../../CHANGELOG:1813 +#: ../../../CHANGELOG.md:1712 msgid "" "It is now possible to report content, such as artists, tracks or " "libraries, as well as user accounts. Such reports are forwarded to the " @@ -3537,7 +3886,7 @@ msgid "" "accounts or take any other action they deem necessary." msgstr "" -#: ../../../CHANGELOG:1816 +#: ../../../CHANGELOG.md:1715 msgid "" "By default, both anonymous and authenticated users can submit these " "reports. This makes sure moderators can receive and handle takedown " @@ -3546,39 +3895,35 @@ msgid "" " reports completely via your pod settings." msgstr "" -#: ../../../CHANGELOG:1820 +#: ../../../CHANGELOG.md:1719 msgid "Federation of the reports will be supported in a future release." msgstr "" -#: ../../../CHANGELOG:1822 ../../../CHANGELOG:1836 +#: ../../../CHANGELOG.md:1721 ../../../CHANGELOG.md:1734 msgid "" "For more information about this feature, please check out our " "documentation:" msgstr "" -#: ../../../CHANGELOG:1824 -msgid "" -"`User documentation " -"<https://docs.funkwhale.audio/moderator/reports.html>`__" +#: ../../../CHANGELOG.md:1723 +msgid "[User documentation](https://docs.funkwhale.audio/moderator/reports.html)" msgstr "" -#: ../../../CHANGELOG:1825 -msgid "" -"`Moderator documentation " -"<https://docs.funkwhale.audio/users/reports.html>`__" +#: ../../../CHANGELOG.md:1724 +msgid "[Moderator documentation](https://docs.funkwhale.audio/users/reports.html)" msgstr "" -#: ../../../CHANGELOG:1828 +#: ../../../CHANGELOG.md:1726 msgid "Account deletion" msgstr "" -#: ../../../CHANGELOG:1830 +#: ../../../CHANGELOG.md:1728 msgid "" "Users can now delete their account themselves, without involving an " "administrator." msgstr "" -#: ../../../CHANGELOG:1832 +#: ../../../CHANGELOG.md:1730 msgid "" "The deletion process will remove any local data and objects associated " "with the account, but the username won't be able to new users to avoid " @@ -3586,113 +3931,113 @@ msgid "" " federation." msgstr "" -#: ../../../CHANGELOG:1838 -msgid "`User documentation <https://docs.funkwhale.audio/users/account.html>`__" +#: ../../../CHANGELOG.md:1736 +msgid "[User documentation](https://docs.funkwhale.audio/users/account.html)" msgstr "" -#: ../../../CHANGELOG:1841 +#: ../../../CHANGELOG.md:1738 msgid "Landing and about page redesign [Manual action suggested]" msgstr "" -#: ../../../CHANGELOG:1843 +#: ../../../CHANGELOG.md:1740 msgid "" "In this release, we've completely redesigned the landing and about page, " "by making it more useful and adapted to your pod configuration. Among " "other things, the landing page will now include:" msgstr "" -#: ../../../CHANGELOG:1846 +#: ../../../CHANGELOG.md:1743 msgid "your pod and an excerpt from your pod's description" msgstr "" -#: ../../../CHANGELOG:1847 ../../../CHANGELOG:1859 +#: ../../../CHANGELOG.md:1744 ../../../CHANGELOG.md:1756 msgid "your pod banner image, if any" msgstr "" -#: ../../../CHANGELOG:1848 ../../../CHANGELOG:1860 +#: ../../../CHANGELOG.md:1745 ../../../CHANGELOG.md:1757 msgid "your contact email, if any" msgstr "" -#: ../../../CHANGELOG:1849 +#: ../../../CHANGELOG.md:1746 msgid "the login form" msgstr "" -#: ../../../CHANGELOG:1850 +#: ../../../CHANGELOG.md:1747 msgid "the signup form (if registrations are open on your pod)" msgstr "" -#: ../../../CHANGELOG:1851 +#: ../../../CHANGELOG.md:1748 msgid "some basic statistics about your pod" msgstr "" -#: ../../../CHANGELOG:1852 +#: ../../../CHANGELOG.md:1749 msgid "" "a widget including recently uploaded albums, if anonymous access is " "enabled" msgstr "" -#: ../../../CHANGELOG:1854 +#: ../../../CHANGELOG.md:1751 msgid "" "The landing page will still include some information about Funkwhale, but" " in a less intrusive and proeminent way than before." msgstr "" -#: ../../../CHANGELOG:1856 +#: ../../../CHANGELOG.md:1753 msgid "Additionally, the about page now includes:" msgstr "" -#: ../../../CHANGELOG:1858 +#: ../../../CHANGELOG.md:1755 msgid "your pod name, description, rules and terms" msgstr "" -#: ../../../CHANGELOG:1861 +#: ../../../CHANGELOG.md:1758 msgid "comprehensive statistics about your pod" msgstr "" -#: ../../../CHANGELOG:1862 +#: ../../../CHANGELOG.md:1759 msgid "" "some info about your pod configuration, such as registration and " "federation status or the default upload quota for new users" msgstr "" -#: ../../../CHANGELOG:1864 +#: ../../../CHANGELOG.md:1761 msgid "With this redesign, we've added a handful of additional pod settings:" msgstr "" -#: ../../../CHANGELOG:1866 +#: ../../../CHANGELOG.md:1763 msgid "Pod banner image" msgstr "" -#: ../../../CHANGELOG:1867 +#: ../../../CHANGELOG.md:1764 msgid "Contact email" msgstr "" -#: ../../../CHANGELOG:1868 +#: ../../../CHANGELOG.md:1765 msgid "Rules" msgstr "" -#: ../../../CHANGELOG:1869 +#: ../../../CHANGELOG.md:1766 msgid "Terms of service" msgstr "" -#: ../../../CHANGELOG:1871 +#: ../../../CHANGELOG.md:1768 msgid "" "We recommend taking a few moments to fill these accordingly to your " -"needs, by visiting ``/manage/settings``." +"needs, by visiting `/manage/settings`." msgstr "" -#: ../../../CHANGELOG:1874 +#: ../../../CHANGELOG.md:1770 msgid "Allow-list to restrict federation to trusted domains" msgstr "" -#: ../../../CHANGELOG:1876 +#: ../../../CHANGELOG.md:1772 msgid "" "The Allow-Listing feature grants pod moderators and administrators " "greater control over federation by allowing you to create a pod-wide " "allow-list." msgstr "" -#: ../../../CHANGELOG:1880 +#: ../../../CHANGELOG.md:1776 msgid "" "When allow-listing is enabled, your pod's users will only be able to " "interact with pods included in the allow-list. Any messages, activity, " @@ -3702,134 +4047,134 @@ msgid "" "be able to send anything to your pod." msgstr "" -#: ../../../CHANGELOG:1889 +#: ../../../CHANGELOG.md:1785 msgid "" "If you want to enable this feature on your pod, or learn more, please " -"refer to `our documentation " -"<https://docs.funkwhale.audio/moderator/listing.html>`_!" +"refer to [our " +"documentation](https://docs.funkwhale.audio/moderator/listing.html)!" msgstr "" -#: ../../../CHANGELOG:1892 +#: ../../../CHANGELOG.md:1787 msgid "Periodic message to incite people to support their pod and Funkwhale" msgstr "" -#: ../../../CHANGELOG:1894 +#: ../../../CHANGELOG.md:1789 msgid "" "Users will now be reminded on a regular basis that they can help " "Funkwhale by donating or contributing." msgstr "" -#: ../../../CHANGELOG:1896 +#: ../../../CHANGELOG.md:1791 msgid "" "If specified by the pod admin, a separate and custom message will also be" " displayed in a similar way to provide instructions and links to support " "the pod." msgstr "" -#: ../../../CHANGELOG:1898 +#: ../../../CHANGELOG.md:1793 msgid "" "Both messages will appear for the first time 15 days after signup, in the" " notifications tab. For each message, users can schedule a reminder for a" " later time, or disable the messages entirely." msgstr "" -#: ../../../CHANGELOG:1902 +#: ../../../CHANGELOG.md:1795 msgid "" "Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker " "only]" msgstr "" -#: ../../../CHANGELOG:1904 +#: ../../../CHANGELOG.md:1797 msgid "" "To improve the performance, stability and reliability of Funkwhale's web " "processes, we now recommend using Gunicorn and Uvicorn instead of Daphne." " This combination unlock new use cases such as:" msgstr "" -#: ../../../CHANGELOG:1907 +#: ../../../CHANGELOG.md:1800 msgid "zero-downtime upgrades" msgstr "" -#: ../../../CHANGELOG:1908 +#: ../../../CHANGELOG.md:1801 msgid "configurable number of web worker processes" msgstr "" -#: ../../../CHANGELOG:1910 +#: ../../../CHANGELOG.md:1803 msgid "" "Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable " "under higher workloads compared to Daphne." msgstr "" -#: ../../../CHANGELOG:1912 +#: ../../../CHANGELOG.md:1805 msgid "" "To benefit from this enhancement on existing instances, you need to add " -"``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` file (use a higher number if" -" you want to have more web worker processes)." +"`FUNKWHALE_WEB_WORKERS=1` in your `.env` file (use a higher number if you" +" want to have more web worker processes)." msgstr "" -#: ../../../CHANGELOG:1915 +#: ../../../CHANGELOG.md:1808 msgid "" -"Then, edit your ``/etc/systemd/system/funkwhale-server.service`` and " -"replace the ``ExecStart=`` line with " -"``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn " -"config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k " -"uvicorn.workers.UvicornWorker -b " -"${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}``" +"Then, edit your `/etc/systemd/system/funkwhale-server.service` and " +"replace the `ExecStart=` line with " +"`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application" +" -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b " +"${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}`" msgstr "" -#: ../../../CHANGELOG:1918 +#: ../../../CHANGELOG.md:1811 msgid "" -"Then reload the configuration change with ``sudo systemctl daemon-" -"reload`` and ``sudo systemctl restart funkwhale-server``." +"Then reload the configuration change with `sudo systemctl daemon-reload` " +"and `sudo systemctl restart funkwhale-server`." msgstr "" -#: ../../../CHANGELOG:1922 +#: ../../../CHANGELOG.md:1813 msgid "" "Content-Security-Policy and additional security headers [manual action " "suggested]" msgstr "" -#: ../../../CHANGELOG:1924 +#: ../../../CHANGELOG.md:1815 msgid "" "To improve the security and reduce the attack surface in case of a " "successful exploit, we suggest you add the following Content-Security-" "Policy to your nginx configuration." msgstr "" -#: ../../../CHANGELOG:1927 -msgid "..note::" -msgstr "" - -#: ../../../CHANGELOG:1935 +#: ../../../CHANGELOG.md:1819 msgid "" -"**On non-docker setups**, in ``/etc/nginx/sites-" -"available/funkwhale.conf``::" +"If you are using an S3-compatible store to serve music, you will need to " +"specify the URL of your S3 store in the ``media-src`` and ``img-src`` " +"headers" msgstr "" -#: ../../../CHANGELOG:1957 -msgid "Then reload nginx with ``systemctl reload nginx``." +#: ../../../CHANGELOG.md:1826 +msgid "**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`:" msgstr "" -#: ../../../CHANGELOG:1959 -msgid "**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``::" +#: ../../../CHANGELOG.md:1850 +msgid "Then reload nginx with `systemctl reload nginx`." msgstr "" -#: ../../../CHANGELOG:1981 -msgid "Then reload nginx with ``docker-compose restart nginx``." +#: ../../../CHANGELOG.md:1852 +msgid "**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`:" msgstr "" -#: ../../../CHANGELOG:1984 +#: ../../../CHANGELOG.md:1877 +msgid "Then reload nginx with `docker-compose restart nginx`." +msgstr "" + +#: ../../../CHANGELOG.md:1879 msgid "Rate limiting" msgstr "" -#: ../../../CHANGELOG:1986 +#: ../../../CHANGELOG.md:1881 msgid "" "With this release, rate-limiting on the API is enabled by default, with " "high enough limits to ensure regular users of the app aren't affected. " "Requests beyond allowed limits are answered with a 429 HTTP error." msgstr "" -#: ../../../CHANGELOG:1989 +#: ../../../CHANGELOG.md:1884 msgid "" "For anonymous requests, the limit is applied to the IP address of the " "client, and for authenticated requests, the limit is applied to the " @@ -3837,437 +4182,433 @@ msgid "" "limit than authenticated requests." msgstr "" -#: ../../../CHANGELOG:1992 +#: ../../../CHANGELOG.md:1887 msgid "" "You can disable the rate-limiting feature by adding " -"`THROTTLING_ENABLED=false` to your ``.env`` file and restarting the " +"`THROTTLING_ENABLED=false` to your `.env` file and restarting the " "services. If you are using the Funkwhale API in your project or app and " "want to know more about the limits, please consult " "https://docs.funkwhale.audio/swagger/." msgstr "" -#: ../../../CHANGELOG:1996 +#: ../../../CHANGELOG.md:1890 msgid "" "Broken audio streaming when using S3/Minio and DSub [manual action " "required]" msgstr "" -#: ../../../CHANGELOG:1998 +#: ../../../CHANGELOG.md:1892 msgid "" "Some Subsonic clients, such as DSub, are sending an Authorization headers" " which was forwarded to the S3 storage when streaming, causing some " "issues. If you are using S3 or a compatible storage such as Minio, please" -" add the following in your nginx ``~ /_protected/media/(.+)`` location::" +" add the following in your nginx `~ /_protected/media/(.+)` location:" msgstr "" -#: ../../../CHANGELOG:2005 +#: ../../../CHANGELOG.md:1901 msgid "And reload your nginx process." msgstr "" -#: ../../../CHANGELOG:2008 +#: ../../../CHANGELOG.md:1903 msgid "Detail" msgstr "" -#: ../../../CHANGELOG:2012 +#: ../../../CHANGELOG.md:1907 msgid "" "Added periodical message to incite people to support their pod and " "Funkwhale (#839)" msgstr "" -#: ../../../CHANGELOG:2013 +#: ../../../CHANGELOG.md:1908 msgid "Admins can now add custom CSS from their pod settings (#879)" msgstr "" -#: ../../../CHANGELOG:2014 +#: ../../../CHANGELOG.md:1909 msgid "Allow-list to restrict federation to trusted domains (#853)" msgstr "" -#: ../../../CHANGELOG:2015 +#: ../../../CHANGELOG.md:1910 msgid "Content and account reports (#890)" msgstr "" -#: ../../../CHANGELOG:2016 +#: ../../../CHANGELOG.md:1911 msgid "Dark theme (#756)" msgstr "" -#: ../../../CHANGELOG:2017 +#: ../../../CHANGELOG.md:1912 msgid "Enforce a configurable rate limit on the API to mitigate abuse (#261)" msgstr "" -#: ../../../CHANGELOG:2018 +#: ../../../CHANGELOG.md:1913 msgid "Redesign of the landing and about pages (#872)" msgstr "" -#: ../../../CHANGELOG:2019 +#: ../../../CHANGELOG.md:1914 msgid "Support for genres, via tags (#432)" msgstr "" -#: ../../../CHANGELOG:2020 +#: ../../../CHANGELOG.md:1915 msgid "Users can now delete their account without admin intervention (#852)" msgstr "" -#: ../../../CHANGELOG:2025 +#: ../../../CHANGELOG.md:1919 msgid "" "Added a info message on embed wizard when anonymous access to content is " "disabled (#878)" msgstr "" -#: ../../../CHANGELOG:2026 +#: ../../../CHANGELOG.md:1920 msgid "Added Catalan translation files" msgstr "" -#: ../../../CHANGELOG:2027 +#: ../../../CHANGELOG.md:1921 msgid "Added Czech translation (#844)" msgstr "" -#: ../../../CHANGELOG:2028 +#: ../../../CHANGELOG.md:1922 msgid "Added field to manage user upload quota in Django backend (#903)" msgstr "" -#: ../../../CHANGELOG:2029 +#: ../../../CHANGELOG.md:1923 msgid "" "Added the option to replace the queue's current contents with a selected " "album or track (#761)" msgstr "" -#: ../../../CHANGELOG:2030 +#: ../../../CHANGELOG.md:1924 msgid "Artists with no albums will now show track count on artist card (#895)" msgstr "" -#: ../../../CHANGELOG:2031 +#: ../../../CHANGELOG.md:1925 msgid "Ensure API urls answer with and without a trailing slash (#877)" msgstr "" -#: ../../../CHANGELOG:2032 +#: ../../../CHANGELOG.md:1926 msgid "" "Hardcoded list of supported browsers to avoid unexpected regressions " "(#854)" msgstr "" -#: ../../../CHANGELOG:2033 +#: ../../../CHANGELOG.md:1927 msgid "Hardened security thanks to CSP and additional HTTP headers (#880)" msgstr "" -#: ../../../CHANGELOG:2034 +#: ../../../CHANGELOG.md:1928 msgid "Improve display of search results by including artist and album data" msgstr "" -#: ../../../CHANGELOG:2035 +#: ../../../CHANGELOG.md:1929 msgid "" "Increase the security of JWT token generation by using DJANGO_SECRET_KEY " "as well as user-specific salt for the signature" msgstr "" -#: ../../../CHANGELOG:2036 +#: ../../../CHANGELOG.md:1930 msgid "Mods can now change a library visibility through the admin UI (#548)" msgstr "" -#: ../../../CHANGELOG:2037 +#: ../../../CHANGELOG.md:1931 msgid "New keyboard shortcuts added for enhanced control over audio player (#866)" msgstr "" -#: ../../../CHANGELOG:2038 +#: ../../../CHANGELOG.md:1932 msgid "" "Now refetch remote ActivityPub artists, albums and tracks to avoid local " "stale data" msgstr "" -#: ../../../CHANGELOG:2039 +#: ../../../CHANGELOG.md:1933 msgid "" "Numbers on the stats page will now be formatted in a human readable way " "and will update with the locale (#873)" msgstr "" -#: ../../../CHANGELOG:2040 +#: ../../../CHANGELOG.md:1934 msgid "" "Pickup folder.png and folder.jpg files for cover art when importing from " "CLI (#898)" msgstr "" -#: ../../../CHANGELOG:2041 +#: ../../../CHANGELOG.md:1935 msgid "Prevent usage of too weak passwords (#883)" msgstr "" -#: ../../../CHANGELOG:2042 +#: ../../../CHANGELOG.md:1936 #, python-format msgid "Reduced CSS size by 30% using purgecss" msgstr "" -#: ../../../CHANGELOG:2043 +#: ../../../CHANGELOG.md:1937 msgid "" "Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and" " performance (#862)" msgstr "" -#: ../../../CHANGELOG:2044 +#: ../../../CHANGELOG.md:1938 msgid "Simplified embedded docker reverse proxy IP configuration (#834)" msgstr "" -#: ../../../CHANGELOG:2045 +#: ../../../CHANGELOG.md:1939 msgid "Support embeds on public playlists" msgstr "" -#: ../../../CHANGELOG:2046 +#: ../../../CHANGELOG.md:1940 msgid "Support for M4A/AAC files (#661)" msgstr "" -#: ../../../CHANGELOG:2047 +#: ../../../CHANGELOG.md:1941 msgid "Switched from Semantic-UI to Fomentic-UI" msgstr "" -#: ../../../CHANGELOG:2048 +#: ../../../CHANGELOG.md:1942 msgid "Add dropdown menu to track table (#531)" msgstr "" -#: ../../../CHANGELOG:2049 +#: ../../../CHANGELOG.md:1943 msgid "Display placeholder on homepage when there are no playlists (#892)" msgstr "" -#: ../../../CHANGELOG:2050 +#: ../../../CHANGELOG.md:1944 msgid "Make album cards height independent (#710)" msgstr "" -#: ../../../CHANGELOG:2055 +#: ../../../CHANGELOG.md:1948 msgid "" "Added context strings to en_GB translations so that picking the language " "changes the interface as expected" msgstr "" -#: ../../../CHANGELOG:2056 +#: ../../../CHANGELOG.md:1949 msgid "Ensure selected locale is not reset to browser default when refreshing app" msgstr "" -#: ../../../CHANGELOG:2057 +#: ../../../CHANGELOG.md:1950 msgid "Fix missing license information on track details page (#913)" msgstr "" -#: ../../../CHANGELOG:2058 +#: ../../../CHANGELOG.md:1951 msgid "Fix regression to quota bar color (#897)" msgstr "" -#: ../../../CHANGELOG:2059 +#: ../../../CHANGELOG.md:1952 msgid "Fixed a responsive display issues on 1024px wide screens (#904)" msgstr "" -#: ../../../CHANGELOG:2060 +#: ../../../CHANGELOG.md:1953 msgid "Fixed album art not being retrieved from Ogg/Opus files" msgstr "" -#: ../../../CHANGELOG:2061 +#: ../../../CHANGELOG.md:1954 msgid "Fixed broken embedded player layout after dependency update (#875)" msgstr "" -#: ../../../CHANGELOG:2062 +#: ../../../CHANGELOG.md:1955 msgid "" "Fixed broken external HTTPS request under some scenarios, because of " "missing PyOpenSSL" msgstr "" -#: ../../../CHANGELOG:2063 +#: ../../../CHANGELOG.md:1956 msgid "Fixed broken less listened radio (#912)" msgstr "" -#: ../../../CHANGELOG:2064 +#: ../../../CHANGELOG.md:1957 msgid "Fixed broken URL to artist and album on album and track pages (#871)" msgstr "" -#: ../../../CHANGELOG:2065 +#: ../../../CHANGELOG.md:1958 msgid "" "Fixed empty contentType causing client crash in some Subsonic payloads " "(#893)" msgstr "" -#: ../../../CHANGELOG:2066 +#: ../../../CHANGELOG.md:1959 msgid "" "Fixed import crashing with empty cover file or too long values on some " "fields" msgstr "" -#: ../../../CHANGELOG:2067 +#: ../../../CHANGELOG.md:1960 msgid "" "Fixed in-place imported files not playing under nginx when filename " "contains ? or % (#924)" msgstr "" -#: ../../../CHANGELOG:2068 +#: ../../../CHANGELOG.md:1961 msgid "Fixed remaining transcoding issue with Subsonic API (#867)" msgstr "" -#: ../../../CHANGELOG:2069 +#: ../../../CHANGELOG.md:1962 msgid "" "Fixed search usability issue when browsing artists, albums, radios and " "playlists (#902)" msgstr "" -#: ../../../CHANGELOG:2070 +#: ../../../CHANGELOG.md:1963 msgid "" "Improved performance of /artists, /albums and /tracks API endpoints by a " "factor 2 (#865)" msgstr "" -#: ../../../CHANGELOG:2071 +#: ../../../CHANGELOG.md:1964 msgid "Updated docs to ensure streaming works when using Minio/S3 and DSub (#932)" msgstr "" -#: ../../../CHANGELOG:2083 +#: ../../../CHANGELOG.md:1976 msgid "IISergII" msgstr "" -#: ../../../CHANGELOG:2084 +#: ../../../CHANGELOG.md:1977 msgid "jiri-novacek" msgstr "" -#: ../../../CHANGELOG:2087 +#: ../../../CHANGELOG.md:1980 msgid "Koen" msgstr "" -#: ../../../CHANGELOG:2088 +#: ../../../CHANGELOG.md:1981 msgid "Manuel Cortez" msgstr "" -#: ../../../CHANGELOG:2091 ../../../CHANGELOG:2359 +#: ../../../CHANGELOG.md:1984 ../../../CHANGELOG.md:2230 msgid "nouts" msgstr "" -#: ../../../CHANGELOG:2092 ../../../CHANGELOG:2362 +#: ../../../CHANGELOG.md:1985 ../../../CHANGELOG.md:2233 msgid "Quentí" msgstr "" -#: ../../../CHANGELOG:2094 ../../../CHANGELOG:2364 +#: ../../../CHANGELOG.md:1987 ../../../CHANGELOG.md:2235 msgid "Rodrigo Leite" msgstr "" -#: ../../../CHANGELOG:2095 -msgid "Romain Failliot" -msgstr "" - -#: ../../../CHANGELOG:2097 ../../../CHANGELOG:2365 +#: ../../../CHANGELOG.md:1990 ../../../CHANGELOG.md:2236 msgid "Sylke Vicious" msgstr "" -#: ../../../CHANGELOG:2098 +#: ../../../CHANGELOG.md:1991 msgid "Tobias Reisinger" msgstr "" -#: ../../../CHANGELOG:2104 +#: ../../../CHANGELOG.md:1995 msgid "0.19.1 (2019-06-28)" msgstr "" -#: ../../../CHANGELOG:2111 +#: ../../../CHANGELOG.md:2001 msgid "" "The currently playing track is now highlighted with an orange play icon " "(#832)" msgstr "" -#: ../../../CHANGELOG:2112 +#: ../../../CHANGELOG.md:2002 msgid "Support for importing files with no album tag (#122)" msgstr "" -#: ../../../CHANGELOG:2113 +#: ../../../CHANGELOG.md:2003 msgid "Redirect from / to /library when user is logged in (#864)" msgstr "" -#: ../../../CHANGELOG:2114 +#: ../../../CHANGELOG.md:2004 msgid "" "Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients " "that don't provide the format parameter (#867)" msgstr "" -#: ../../../CHANGELOG:2115 +#: ../../../CHANGELOG.md:2005 msgid "Added button to search for objects on Discogs (#368)" msgstr "" -#: ../../../CHANGELOG:2116 +#: ../../../CHANGELOG.md:2006 msgid "Added copy-to-clipboard button with Subsonic password input (#814)" msgstr "" -#: ../../../CHANGELOG:2117 +#: ../../../CHANGELOG.md:2007 msgid "Added opus to the list of supported mimetypes and extensions (#868)" msgstr "" -#: ../../../CHANGELOG:2118 +#: ../../../CHANGELOG.md:2008 msgid "Aligned search headers with search results in the sidebar (#708)" msgstr "" -#: ../../../CHANGELOG:2119 +#: ../../../CHANGELOG.md:2009 msgid "" "Clicking on the currently selected playlist in the Playlist popup will " "now close the popup (#807)" msgstr "" -#: ../../../CHANGELOG:2120 +#: ../../../CHANGELOG.md:2010 msgid "" "Favorites radio will not be visible if the user does not have any " "favorites (#419)" msgstr "" -#: ../../../CHANGELOG:2125 +#: ../../../CHANGELOG.md:2014 msgid "" "Ensure empty but optional fields in file metadata don't error during " "import (#850)" msgstr "" -#: ../../../CHANGELOG:2126 +#: ../../../CHANGELOG.md:2015 msgid "Fix broken upload for specific files when using S3 storage (#857)" msgstr "" -#: ../../../CHANGELOG:2127 +#: ../../../CHANGELOG.md:2016 msgid "Fixed broken translation on home and track detail page (#833)" msgstr "" -#: ../../../CHANGELOG:2128 +#: ../../../CHANGELOG.md:2017 msgid "" "Fixed broken user admin for users with non-digit or letters in their " "username (#869)" msgstr "" -#: ../../../CHANGELOG:2129 +#: ../../../CHANGELOG.md:2018 msgid "Fixed invalid file extension for transcoded tracks (#848)" msgstr "" -#: ../../../CHANGELOG:2130 +#: ../../../CHANGELOG.md:2019 msgid "Fixed issue with French translation for \"Start radio\" (#849)" msgstr "" -#: ../../../CHANGELOG:2131 +#: ../../../CHANGELOG.md:2020 msgid "" "Fixed issue with player changing height when hovering over the volume " "slider (#838)" msgstr "" -#: ../../../CHANGELOG:2132 +#: ../../../CHANGELOG.md:2021 msgid "Fixed secondary menus truncated on narrow screens (#855)" msgstr "" -#: ../../../CHANGELOG:2133 +#: ../../../CHANGELOG.md:2022 msgid "Fixed wrong og:image url when using S3 storage (#851)" msgstr "" -#: ../../../CHANGELOG:2134 +#: ../../../CHANGELOG.md:2023 msgid "Hide pod statistics on about page if those are disabled (#835)" msgstr "" -#: ../../../CHANGELOG:2135 +#: ../../../CHANGELOG.md:2024 msgid "Use ASCII filename before upload to S3 to avoid playback issues (#847)" msgstr "" -#: ../../../CHANGELOG:2138 +#: ../../../CHANGELOG.md:2026 msgid "Contributors to this release (committers and reviewers):" msgstr "" -#: ../../../CHANGELOG:2142 +#: ../../../CHANGELOG.md:2030 msgid "ealgase" msgstr "" -#: ../../../CHANGELOG:2153 +#: ../../../CHANGELOG.md:2039 msgid "0.19.0 (2019-05-16)" msgstr "" -#: ../../../CHANGELOG:2160 +#: ../../../CHANGELOG.md:2043 msgid "Edits on tracks, albums and artists" msgstr "" -#: ../../../CHANGELOG:2162 +#: ../../../CHANGELOG.md:2045 msgid "" "Funkwhale was a bit annoying when it camed to metadata. Tracks, albums " "and artists profiles were created from audio file tags, but basically " @@ -4275,58 +4616,58 @@ msgid "" "wasn't ideal to do this kind of changes)." msgstr "" -#: ../../../CHANGELOG:2166 +#: ../../../CHANGELOG.md:2049 msgid "" "With this release, everyone can suggest changes on track, album and " "artist pages. Users with the \"library\" permission can review suggested " "edits in a dedicated interface and apply/reject them." msgstr "" -#: ../../../CHANGELOG:2170 +#: ../../../CHANGELOG.md:2053 msgid "" "Approved edits are broadcasted via federation, to ensure other instances " "get the information too." msgstr "" -#: ../../../CHANGELOG:2173 +#: ../../../CHANGELOG.md:2056 msgid "" "Not all fields are currently modifiable using this feature. Especially, " "it's not possible to suggest a new album cover, or reassign a track to a " "different album or artist. Those will be implemented in a future release." msgstr "" -#: ../../../CHANGELOG:2178 +#: ../../../CHANGELOG.md:2060 msgid "Admin UI for tracks, albums, artists, libraries and uploads" msgstr "" -#: ../../../CHANGELOG:2180 +#: ../../../CHANGELOG.md:2062 msgid "" "As part of our ongoing effort to make Funkwhale easier to manage for " "instance owners, this release includes a brand new administration " "interface to deal with:" msgstr "" -#: ../../../CHANGELOG:2183 +#: ../../../CHANGELOG.md:2065 msgid "tracks" msgstr "" -#: ../../../CHANGELOG:2184 +#: ../../../CHANGELOG.md:2066 msgid "albums" msgstr "" -#: ../../../CHANGELOG:2185 +#: ../../../CHANGELOG.md:2067 msgid "artists" msgstr "" -#: ../../../CHANGELOG:2186 +#: ../../../CHANGELOG.md:2068 msgid "libraries" msgstr "" -#: ../../../CHANGELOG:2187 +#: ../../../CHANGELOG.md:2069 msgid "uploads" msgstr "" -#: ../../../CHANGELOG:2189 +#: ../../../CHANGELOG.md:2071 msgid "" "You can use this UI to quickly search for any object, delete objects in " "batch, understand where they are coming from etc. This new UI should " @@ -4334,60 +4675,60 @@ msgid "" "cases (but also includes a link to Django's admin when needed)." msgstr "" -#: ../../../CHANGELOG:2194 +#: ../../../CHANGELOG.md:2075 msgid "Artist hiding in the interface" msgstr "" -#: ../../../CHANGELOG:2196 +#: ../../../CHANGELOG.md:2077 msgid "It's now possible for users to hide artists they don't want to see." msgstr "" -#: ../../../CHANGELOG:2198 +#: ../../../CHANGELOG.md:2079 msgid "" "Content linked to hidden artists will not show up in the interface " "anymore. Especially:" msgstr "" -#: ../../../CHANGELOG:2200 +#: ../../../CHANGELOG.md:2081 msgid "Hidden artists tracks are removed from the current queue" msgstr "" -#: ../../../CHANGELOG:2201 +#: ../../../CHANGELOG.md:2082 msgid "Starting a playlist will skip tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2202 +#: ../../../CHANGELOG.md:2083 msgid "" "Recently favorited, recently listened and recently added widgets on the " "homepage won't include content from hidden artists" msgstr "" -#: ../../../CHANGELOG:2203 +#: ../../../CHANGELOG.md:2084 msgid "Radio suggestions will exclude tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2204 +#: ../../../CHANGELOG.md:2085 msgid "Hidden artists won't appear in Subsonic apps" msgstr "" -#: ../../../CHANGELOG:2206 +#: ../../../CHANGELOG.md:2087 msgid "" "Results linked to hidden artists will continue to show up in search " "results and their profile page remains accessible." msgstr "" -#: ../../../CHANGELOG:2209 +#: ../../../CHANGELOG.md:2089 msgid "OAuth2 authorization for better integration with third-party apps" msgstr "" -#: ../../../CHANGELOG:2211 +#: ../../../CHANGELOG.md:2091 msgid "" "Funkwhale now support the OAuth2 authorization and authentication " "protocol which will allow third-party apps to interact with Funkwhale on " "behalf of users." msgstr "" -#: ../../../CHANGELOG:2214 +#: ../../../CHANGELOG.md:2094 msgid "" "This feature makes it possible to build third-party apps that have the " "same capabilities as Funkwhale's Web UI. The only exception at the moment" @@ -4396,18 +4737,18 @@ msgid "" "release)." msgstr "" -#: ../../../CHANGELOG:2219 +#: ../../../CHANGELOG.md:2099 msgid "" "If you want to start building an app on top of Funkwhale's API, please " "check-out https://docs.funkwhale.audio/api.html and " "https://docs.funkwhale.audio/developers/authentication.html." msgstr "" -#: ../../../CHANGELOG:2223 +#: ../../../CHANGELOG.md:2102 msgid "Better error handling and display during import" msgstr "" -#: ../../../CHANGELOG:2225 +#: ../../../CHANGELOG.md:2104 msgid "" "Funkwhale should now be more resilient to missing tags in imported files," " and give you more insights when something goes wrong, including the " @@ -4415,52 +4756,53 @@ msgid "" "information to share in your support requests." msgstr "" -#: ../../../CHANGELOG:2229 +#: ../../../CHANGELOG.md:2108 msgid "" "This information is available in all pages that list uploads, when " "clicking on the button next to the upload status." msgstr "" -#: ../../../CHANGELOG:2232 +#: ../../../CHANGELOG.md:2110 msgid "Support for S3-compatible storages to store media files" msgstr "" -#: ../../../CHANGELOG:2234 +#: ../../../CHANGELOG.md:2112 msgid "" "Storing all media files on the Funkwhale server itself may not be " "possible or desirable in all scenarios. You can now configure Funkwhale " "to store those files in a S3 bucket instead." msgstr "" -#: ../../../CHANGELOG:2238 +#: ../../../CHANGELOG.md:2116 msgid "" "Check-out https://docs.funkwhale.audio/admin/external-storages.html if " "you want to use this feature." msgstr "" -#: ../../../CHANGELOG:2242 +#: ../../../CHANGELOG.md:2119 msgid "Prune library command" msgstr "" -#: ../../../CHANGELOG:2244 +#: ../../../CHANGELOG.md:2121 msgid "" "Users are often surprised by Funkwhale's tendency to keep track, album " "and artist metadata even if no associated files exist." msgstr "" -#: ../../../CHANGELOG:2247 +#: ../../../CHANGELOG.md:2124 msgid "" -"To help with that, we now offer a ``prune_library`` management command " -"you can run to purge your database from obsolete entries. `Please refer " -"to our documentation for usage instructions " -"<https://docs.funkwhale.audio/admin/commands.html#pruning-library>`__." +"To help with that, we now offer a `prune_library` management command you " +"can run to purge your database from obsolete entries. [Please refer to " +"our documentation for usage " +"instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-" +"library)." msgstr "" -#: ../../../CHANGELOG:2252 +#: ../../../CHANGELOG.md:2127 msgid "Check in-place files command" msgstr "" -#: ../../../CHANGELOG:2254 +#: ../../../CHANGELOG.md:2129 msgid "" "When using in-place import with a living audio library, you'll quite " "often rename or remove files from the file system. Unfortunately, " @@ -4468,552 +4810,552 @@ msgid "" " in unplayable tracks." msgstr "" -#: ../../../CHANGELOG:2258 +#: ../../../CHANGELOG.md:2133 msgid "" -"To help with that, we now offer a ``check_inplace_files`` management " -"command you can run to purge your database from obsolete files. `Please " -"refer to our documentation for usage instructions " -"<https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-" -"from-database>`__." +"To help with that, we now offer a `check_inplace_files` management " +"command you can run to purge your database from obsolete files. [Please " +"refer to our documentation for usage " +"instructions](https://docs.funkwhale.audio/admin/commands.html#remove-" +"obsolete-files-from-database)." msgstr "" -#: ../../../CHANGELOG:2265 +#: ../../../CHANGELOG.md:2138 msgid "" "Added albums view. Similar to artists view, it's viewable by clicking on " "the \"Albums\" link on the top bar. (#356)" msgstr "" -#: ../../../CHANGELOG:2266 +#: ../../../CHANGELOG.md:2139 msgid "Allow artists hiding (#701)" msgstr "" -#: ../../../CHANGELOG:2267 +#: ../../../CHANGELOG.md:2140 msgid "Change the document title to display current track information. (#359)" msgstr "" -#: ../../../CHANGELOG:2268 +#: ../../../CHANGELOG.md:2141 msgid "" "Display a confirmation dialog when adding duplicate songs to a playlist " "(#784)" msgstr "" -#: ../../../CHANGELOG:2269 +#: ../../../CHANGELOG.md:2142 msgid "" "Improved error handling and display during import (#252, #718, #583, " "#501, #544)" msgstr "" -#: ../../../CHANGELOG:2270 +#: ../../../CHANGELOG.md:2143 msgid "Support embedding full artist discographies (#747)" msgstr "" -#: ../../../CHANGELOG:2271 +#: ../../../CHANGELOG.md:2144 msgid "" "Support metadata update on tracks, albums and artists and broadcast those" " on the federation (#689)" msgstr "" -#: ../../../CHANGELOG:2272 +#: ../../../CHANGELOG.md:2145 msgid "" "Support OAuth2 authorization for better integration with third-party apps" " (#752)" msgstr "" -#: ../../../CHANGELOG:2273 +#: ../../../CHANGELOG.md:2146 msgid "Support S3-compatible storages for media files (#565)" msgstr "" -#: ../../../CHANGELOG:2278 +#: ../../../CHANGELOG.md:2150 msgid "" "[Experimental] Added a new \"Similar\" radio based on users history " "(suggested by @gordon)" msgstr "" -#: ../../../CHANGELOG:2279 +#: ../../../CHANGELOG.md:2151 msgid "" "Added a \"load more\" button on artist pages to load more tracks/albums " "(#719)" msgstr "" -#: ../../../CHANGELOG:2280 +#: ../../../CHANGELOG.md:2152 msgid "" "Added a `check_inplace_files` management command to remove purge the " "database from references to in-place imported files that don't exist on " "disk anymore (#781)" msgstr "" -#: ../../../CHANGELOG:2281 +#: ../../../CHANGELOG.md:2153 msgid "" "Added a prune_library management command to remove obsolete metadata from" " the database (#777)" msgstr "" -#: ../../../CHANGELOG:2282 +#: ../../../CHANGELOG.md:2154 msgid "" "Added admin options to disable login for users, ensure related content is" " deleted when deleting a user account (#809)" msgstr "" -#: ../../../CHANGELOG:2283 +#: ../../../CHANGELOG.md:2155 msgid "" "Added standardized translation context for all strings in the frontend to" " give accurate hints to translators." msgstr "" -#: ../../../CHANGELOG:2284 +#: ../../../CHANGELOG.md:2156 msgid "" -"Added twitter:* meta tags to detect tracks and albums players " +"Added twitter:\\* meta tags to detect tracks and albums players " "automatically on more sites (#578) Improved responsiveness of embedded " "player" msgstr "" -#: ../../../CHANGELOG:2286 +#: ../../../CHANGELOG.md:2158 msgid "" "Advertise the list of supported upload extensions in the Nodeinfo " "endpoint (#808)" msgstr "" -#: ../../../CHANGELOG:2287 +#: ../../../CHANGELOG.md:2159 msgid "" "Better handling of follow/accept messages to avoid and recover from " "desync between instances (#830)" msgstr "" -#: ../../../CHANGELOG:2288 +#: ../../../CHANGELOG.md:2160 msgid "Better workflow for connecting to another instance (#715)" msgstr "" -#: ../../../CHANGELOG:2290 +#: ../../../CHANGELOG.md:2162 msgid "" "Changing the instance used is now better integrated in the App, and it is" " checked that the chosen instance and the suggested instances are valid " "and running Funkwhale servers." msgstr "" -#: ../../../CHANGELOG:2291 +#: ../../../CHANGELOG.md:2164 msgid "Bumped dependencies to latest versions (#815)" msgstr "" -#: ../../../CHANGELOG:2292 +#: ../../../CHANGELOG.md:2165 msgid "Descriptions will now be shown underneath user libraries (#768)" msgstr "" -#: ../../../CHANGELOG:2293 +#: ../../../CHANGELOG.md:2166 msgid "Don't store unhandled ActivityPub messages in database (#776)" msgstr "" -#: ../../../CHANGELOG:2294 +#: ../../../CHANGELOG.md:2167 msgid "Enhanced the design of the embed wizard. (!619)" msgstr "" -#: ../../../CHANGELOG:2295 +#: ../../../CHANGELOG.md:2168 msgid "Ensure the footer always stays at the bottom of the page" msgstr "" -#: ../../../CHANGELOG:2296 +#: ../../../CHANGELOG.md:2169 msgid "" "Expose an instance-level actor (service@domain) in nodeinfo endpoint " "(#689)" msgstr "" -#: ../../../CHANGELOG:2297 +#: ../../../CHANGELOG.md:2170 msgid "Improved readability of logo (#385)" msgstr "" -#: ../../../CHANGELOG:2298 +#: ../../../CHANGELOG.md:2171 msgid "" "Keep persistent connections to the database instead of recreating a new " "one for each request" msgstr "" -#: ../../../CHANGELOG:2299 +#: ../../../CHANGELOG.md:2172 msgid "" "Labels for privacy levels are now consistently grabbed from a common " "source instead of being hardcoded every time they are needed." msgstr "" -#: ../../../CHANGELOG:2300 +#: ../../../CHANGELOG.md:2173 msgid "" "Merged artist/album buttons with title text on artist and album pages " "(#725)" msgstr "" -#: ../../../CHANGELOG:2301 +#: ../../../CHANGELOG.md:2174 msgid "Now honor maxBitrate parameter in Subsonic API (#802)" msgstr "" -#: ../../../CHANGELOG:2302 +#: ../../../CHANGELOG.md:2175 msgid "Preload next track in queue (#572)" msgstr "" -#: ../../../CHANGELOG:2303 +#: ../../../CHANGELOG.md:2176 msgid "" "Reduced app size for regular users by moving admin-related code in a " "dedicated chunk (#805)" msgstr "" -#: ../../../CHANGELOG:2304 +#: ../../../CHANGELOG.md:2177 msgid "Removed broken/instable lyrics feature (#799)" msgstr "" -#: ../../../CHANGELOG:2305 +#: ../../../CHANGELOG.md:2178 msgid "" "Show remaining storage space during import and prevent file upload if not" " enough space is remaining (#550)" msgstr "" -#: ../../../CHANGELOG:2306 +#: ../../../CHANGELOG.md:2179 msgid "" "The buttons displaying an icon now always show a little divider between " "the icon and the text. (!620)" msgstr "" -#: ../../../CHANGELOG:2307 +#: ../../../CHANGELOG.md:2180 msgid "Use attributedTo instead of actor in library ActivityPub payload (#619)" msgstr "" -#: ../../../CHANGELOG:2308 +#: ../../../CHANGELOG.md:2181 msgid "Use network/depends_on instead of links in docker-compose.yml (!716)" msgstr "" -#: ../../../CHANGELOG:2313 +#: ../../../CHANGELOG.md:2185 msgid "Add missing command from contributing file (#754)" msgstr "" -#: ../../../CHANGELOG:2314 +#: ../../../CHANGELOG.md:2186 msgid "Add required envvar for dev environment (!668)" msgstr "" -#: ../../../CHANGELOG:2315 +#: ../../../CHANGELOG.md:2187 msgid "" "Added env variable to set AWS region and signature version to serve media" " without proxy (#826)" msgstr "" -#: ../../../CHANGELOG:2316 +#: ../../../CHANGELOG.md:2188 msgid "" "Allow users with dots in their usernames to request a subsonic password " "(#798)" msgstr "" -#: ../../../CHANGELOG:2317 +#: ../../../CHANGELOG.md:2189 msgid "" "Better handling of featuring/multi-artist tracks tagged with MusicBrainz " "(#782)" msgstr "" -#: ../../../CHANGELOG:2318 +#: ../../../CHANGELOG.md:2190 msgid "" "Do not consider tracks as duplicates during import if they have different" " positions (#740)" msgstr "" -#: ../../../CHANGELOG:2319 +#: ../../../CHANGELOG.md:2191 msgid "Ensure all our ActivityPub fetches are authenticated (#758)" msgstr "" -#: ../../../CHANGELOG:2320 +#: ../../../CHANGELOG.md:2192 msgid "" "Ensure correct track duration and playable status when browsing radios " "(#812)" msgstr "" -#: ../../../CHANGELOG:2321 +#: ../../../CHANGELOG.md:2193 msgid "Fixed alignment/size issue with some buttons (#702)" msgstr "" -#: ../../../CHANGELOG:2322 +#: ../../../CHANGELOG.md:2194 msgid "Fixed an encoding issue with instance name on about page (#828)" msgstr "" -#: ../../../CHANGELOG:2323 +#: ../../../CHANGELOG.md:2195 msgid "" "Fixed cover not showing in queue/player when playing tracks from " "\"albums\" tab (#795)" msgstr "" -#: ../../../CHANGELOG:2324 +#: ../../../CHANGELOG.md:2196 msgid "Fixed crashing upload processing on invalid date format (#718)" msgstr "" -#: ../../../CHANGELOG:2325 +#: ../../../CHANGELOG.md:2197 msgid "Fixed dev command for fake data creation (!664)" msgstr "" -#: ../../../CHANGELOG:2326 +#: ../../../CHANGELOG.md:2198 msgid "Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824)" msgstr "" -#: ../../../CHANGELOG:2327 +#: ../../../CHANGELOG.md:2199 msgid "Fixed invalid required fields in Upload django's admin (#819)" msgstr "" -#: ../../../CHANGELOG:2328 +#: ../../../CHANGELOG.md:2200 msgid "Fixed issue with querying the albums api endpoint (#356)" msgstr "" -#: ../../../CHANGELOG:2329 +#: ../../../CHANGELOG.md:2201 msgid "Fixed non-transparent background for volume range on Firefox (#722)" msgstr "" -#: ../../../CHANGELOG:2330 +#: ../../../CHANGELOG.md:2202 msgid "Fixed overflowing input on account detail page (#791)" msgstr "" -#: ../../../CHANGELOG:2331 +#: ../../../CHANGELOG.md:2203 msgid "Fixed unplayable radios for anonymous users (#563)" msgstr "" -#: ../../../CHANGELOG:2332 +#: ../../../CHANGELOG.md:2204 msgid "Prevent skipping on file import if album_mbid is different (#772)" msgstr "" -#: ../../../CHANGELOG:2333 +#: ../../../CHANGELOG.md:2205 msgid "Use proper site name/domain in emails (#806)" msgstr "" -#: ../../../CHANGELOG:2334 +#: ../../../CHANGELOG.md:2206 msgid "" "Width of filter menus for radios has been set to stop text from " "overlapping the borders" msgstr "" -#: ../../../CHANGELOG:2339 +#: ../../../CHANGELOG.md:2210 msgid "Document how to use Redis over unix sockets (#770)" msgstr "" -#: ../../../CHANGELOG:2341 +#: ../../../CHANGELOG.md:2212 msgid "Contributors to this release (committers and translators):" msgstr "" -#: ../../../CHANGELOG:2343 +#: ../../../CHANGELOG.md:2214 msgid "Ale London" msgstr "" -#: ../../../CHANGELOG:2344 +#: ../../../CHANGELOG.md:2215 msgid "Alexander" msgstr "" -#: ../../../CHANGELOG:2345 +#: ../../../CHANGELOG.md:2216 msgid "Ben Finney" msgstr "" -#: ../../../CHANGELOG:2348 +#: ../../../CHANGELOG.md:2219 msgid "Damien Nicolas" msgstr "" -#: ../../../CHANGELOG:2351 +#: ../../../CHANGELOG.md:2222 msgid "Elza Gelez" msgstr "" -#: ../../../CHANGELOG:2352 +#: ../../../CHANGELOG.md:2223 msgid "gerry_the_hat" msgstr "" -#: ../../../CHANGELOG:2353 +#: ../../../CHANGELOG.md:2224 msgid "gordon" msgstr "" -#: ../../../CHANGELOG:2355 +#: ../../../CHANGELOG.md:2226 msgid "jake" msgstr "" -#: ../../../CHANGELOG:2356 +#: ../../../CHANGELOG.md:2227 msgid "Jee" msgstr "" -#: ../../../CHANGELOG:2360 +#: ../../../CHANGELOG.md:2231 msgid "Pierrick" msgstr "" -#: ../../../CHANGELOG:2361 +#: ../../../CHANGELOG.md:2232 msgid "Qasim Ali" msgstr "" -#: ../../../CHANGELOG:2366 +#: ../../../CHANGELOG.md:2237 msgid "Thomas Brockmöller" msgstr "" -#: ../../../CHANGELOG:2367 +#: ../../../CHANGELOG.md:2238 msgid "Tixie" msgstr "" -#: ../../../CHANGELOG:2368 +#: ../../../CHANGELOG.md:2239 msgid "Vierkantor" msgstr "" -#: ../../../CHANGELOG:2369 +#: ../../../CHANGELOG.md:2240 msgid "Von" msgstr "" -#: ../../../CHANGELOG:2370 +#: ../../../CHANGELOG.md:2241 msgid "Zach Halasz" msgstr "" -#: ../../../CHANGELOG:2373 +#: ../../../CHANGELOG.md:2243 msgid "0.18.3 (2019-03-21)" msgstr "" -#: ../../../CHANGELOG:2380 +#: ../../../CHANGELOG.md:2247 msgid "" "Avoid mixed content when deploying mono-container behind proxy [Manual " "action required]" msgstr "" -#: ../../../CHANGELOG:2382 +#: ../../../CHANGELOG.md:2249 msgid "" -"*You are only concerned if you use the mono-container docker deployment " -"behind a reverse proxy*" +"_You are only concerned if you use the mono-container docker deployment " +"behind a reverse proxy_" msgstr "" -#: ../../../CHANGELOG:2384 +#: ../../../CHANGELOG.md:2251 msgid "" -"Because of `an issue in our mono-container configuration " -"<https://github.com/thetarkus/docker-funkwhale/issues/19>`_, users " -"deploying Funkwhale via docker using our `funkwhale/all-in-one` image " -"could face some mixed content warnings (and possibly other troubles) when" -" browsing the Web UI." +"Because of [an issue in our mono-container " +"configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), " +"users deploying Funkwhale via docker using our `funkwhale/all-in-one` " +"image could face some mixed content warnings (and possibly other " +"troubles) when browsing the Web UI." msgstr "" -#: ../../../CHANGELOG:2388 +#: ../../../CHANGELOG.md:2255 msgid "" "This is fixed in this release, but on existing deployments, you'll need " -"to add ``NESTED_PROXY=1`` in your container environment (either in your " -"``.env`` file, or via your container management tool), then recreate your" -" funkwhale container." +"to add `NESTED_PROXY=1` in your container environment (either in your " +"`.env` file, or via your container management tool), then recreate your " +"funkwhale container." msgstr "" -#: ../../../CHANGELOG:2394 +#: ../../../CHANGELOG.md:2260 msgid "Added title on hover for truncated content (#766)" msgstr "" -#: ../../../CHANGELOG:2395 +#: ../../../CHANGELOG.md:2261 msgid "" "Ask for confirmation before leaving upload page if there is a an upload " "in process (#630)" msgstr "" -#: ../../../CHANGELOG:2396 +#: ../../../CHANGELOG.md:2262 msgid "Exclude in-place imported files from quota computation (#570)" msgstr "" -#: ../../../CHANGELOG:2397 +#: ../../../CHANGELOG.md:2263 msgid "" "Truncate filename in library file table to ensure correct display of the " "table. (#735)" msgstr "" -#: ../../../CHANGELOG:2402 +#: ../../../CHANGELOG.md:2267 msgid "" "Avoid mixed content when deploying mono-container behind HTTPS proxy " "(thetarkus/docker-funkwhale#19)" msgstr "" -#: ../../../CHANGELOG:2403 +#: ../../../CHANGELOG.md:2268 msgid "Display new notifications immediately on notifications page (#729)" msgstr "" -#: ../../../CHANGELOG:2404 +#: ../../../CHANGELOG.md:2269 msgid "" "Ensure cover art from uploaded files is picked up properly on existing " "albums (#757)" msgstr "" -#: ../../../CHANGELOG:2405 +#: ../../../CHANGELOG.md:2270 msgid "Fixed a crash when federating a track with unspecified position" msgstr "" -#: ../../../CHANGELOG:2406 +#: ../../../CHANGELOG.md:2271 msgid "Fixed broken Activity and Actor modules in django admin (#767)" msgstr "" -#: ../../../CHANGELOG:2407 +#: ../../../CHANGELOG.md:2272 msgid "Fixed broken sample apache configuration (#764)" msgstr "" -#: ../../../CHANGELOG:2408 +#: ../../../CHANGELOG.md:2273 msgid "Fixed constant and unpredictable reordering during file upload (#716)" msgstr "" -#: ../../../CHANGELOG:2409 +#: ../../../CHANGELOG.md:2274 msgid "" "Fixed delivering of local activities causing unintended side effects, " "such as rollbacking changes (#737)" msgstr "" -#: ../../../CHANGELOG:2410 +#: ../../../CHANGELOG.md:2275 msgid "Fixed escaping issues in translated strings (#652)" msgstr "" -#: ../../../CHANGELOG:2411 +#: ../../../CHANGELOG.md:2276 msgid "Fixed saving moderation policy when clicking on \"Cancel\" (#751)" msgstr "" -#: ../../../CHANGELOG:2412 +#: ../../../CHANGELOG.md:2277 msgid "i18n: Update page title when changing the App's language. (#511)" msgstr "" -#: ../../../CHANGELOG:2413 +#: ../../../CHANGELOG.md:2278 msgid "Include disc number in Subsonic responses (#765)" msgstr "" -#: ../../../CHANGELOG:2414 +#: ../../../CHANGELOG.md:2279 msgid "Do not send notification when rejecting a follow on a local library (#743)" msgstr "" -#: ../../../CHANGELOG:2419 +#: ../../../CHANGELOG.md:2283 msgid "Added documentation on mono-container docker upgrade (#713)" msgstr "" -#: ../../../CHANGELOG:2420 +#: ../../../CHANGELOG.md:2284 msgid "Added documentation to set up let's encrypt certificate (#745)" msgstr "" -#: ../../../CHANGELOG:2424 +#: ../../../CHANGELOG.md:2286 msgid "0.18.2 (2019-02-13)" msgstr "" -#: ../../../CHANGELOG:2431 +#: ../../../CHANGELOG.md:2292 msgid "" "Added a 'fix_federation_ids' management command to deal with " "protocol/domain issues in federation IDs after deployments (#706)" msgstr "" -#: ../../../CHANGELOG:2433 +#: ../../../CHANGELOG.md:2294 msgid "" "Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an" " HTTP request (#705)" msgstr "" -#: ../../../CHANGELOG:2438 +#: ../../../CHANGELOG.md:2298 msgid "Downgraded channels dependency to 2.1.6 to fix denied uploads (#697)" msgstr "" -#: ../../../CHANGELOG:2439 +#: ../../../CHANGELOG.md:2299 msgid "Fixed cards display issues on medium/small screens (#707)" msgstr "" -#: ../../../CHANGELOG:2440 +#: ../../../CHANGELOG.md:2300 msgid "" "Fixed Embed component name that could lead to issue when developping on " "OSX (#696)" msgstr "" -#: ../../../CHANGELOG:2441 +#: ../../../CHANGELOG.md:2301 msgid "Fixed resizing issues for album cards on artist pages (#694)" msgstr "" -#: ../../../CHANGELOG:2445 +#: ../../../CHANGELOG.md:2303 msgid "0.18.1 (2019-01-29)" msgstr "" -#: ../../../CHANGELOG:2452 +#: ../../../CHANGELOG.md:2307 msgid "" "Fix Gzip compression to avoid BREACH exploit [security] [manual action " "required]" msgstr "" -#: ../../../CHANGELOG:2454 +#: ../../../CHANGELOG.md:2309 msgid "" "In the 0.18 release, we've enabled Gzip compression by default for " "various content types, including HTML and JSON. Unfortunately, enabling " @@ -5021,135 +5363,135 @@ msgid "" "possible." msgstr "" -#: ../../../CHANGELOG:2458 +#: ../../../CHANGELOG.md:2313 msgid "" "We've removed the risky content-types from our nginx template files, to " "ensure new instances are safe, however, if you already have an instance, " "you need to double check that your host nginx virtualhost do not include " -"the following values for the ``gzip_types`` settings::" +"the following values for the `gzip_types` settings:" msgstr "" -#: ../../../CHANGELOG:2472 +#: ../../../CHANGELOG.md:2329 msgid "" "For convenience, you can also replace the whole setting with the " -"following snippet::" +"following snippet:" msgstr "" -#: ../../../CHANGELOG:2493 +#: ../../../CHANGELOG.md:2352 msgid "Many thanks to @jibec for the report!" msgstr "" -#: ../../../CHANGELOG:2496 +#: ../../../CHANGELOG.md:2354 msgid "Fix Apache configuration file for 0.18 [manual action required]" msgstr "" -#: ../../../CHANGELOG:2498 +#: ../../../CHANGELOG.md:2356 msgid "" "The way front is served has changed since 0.18. The Apache configuration " "can't serve 0.18 properly, leading to blank screens." msgstr "" -#: ../../../CHANGELOG:2500 +#: ../../../CHANGELOG.md:2358 msgid "" "If you are on an Apache setup, you will have to replace the `<Location " -"\"/api\">` block with the following::" +"\"/api\">` block with the following:" msgstr "" -#: ../../../CHANGELOG:2510 +#: ../../../CHANGELOG.md:2370 msgid "" "And add some more `ProxyPass` directives so that the `Alias` part of your" -" configuration file looks this way::" +" configuration file looks this way:" msgstr "" -#: ../../../CHANGELOG:2521 +#: ../../../CHANGELOG.md:2383 msgid "" "In case you are using custom css and theming, you also need to match this" -" block::" +" block:" msgstr "" -#: ../../../CHANGELOG:2532 +#: ../../../CHANGELOG.md:2395 msgid "" "Added name attributes on all inputs to improve UX, especially with " "password managers (#686)" msgstr "" -#: ../../../CHANGELOG:2533 +#: ../../../CHANGELOG.md:2396 msgid "" "Disable makemigrations in production and misleading message when running " "migrate (#685)" msgstr "" -#: ../../../CHANGELOG:2534 +#: ../../../CHANGELOG.md:2397 msgid "Display progress during file upload" msgstr "" -#: ../../../CHANGELOG:2535 +#: ../../../CHANGELOG.md:2398 msgid "Hide pagination when there is only one page of results (#681)" msgstr "" -#: ../../../CHANGELOG:2536 +#: ../../../CHANGELOG.md:2399 msgid "Include shared/public playlists in Subsonic API responses (#684)" msgstr "" -#: ../../../CHANGELOG:2537 +#: ../../../CHANGELOG.md:2400 msgid "Use proper locale for date-related/duration strings (#670)" msgstr "" -#: ../../../CHANGELOG:2542 +#: ../../../CHANGELOG.md:2404 msgid "Fix transcoding of in-place imported tracks (#688)" msgstr "" -#: ../../../CHANGELOG:2543 +#: ../../../CHANGELOG.md:2405 msgid "" "Fixed celery worker defaulting to development settings instead of " "production" msgstr "" -#: ../../../CHANGELOG:2544 +#: ../../../CHANGELOG.md:2406 msgid "Fixed crashing Django admin when loading track detail page (#666)" msgstr "" -#: ../../../CHANGELOG:2545 +#: ../../../CHANGELOG.md:2407 msgid "Fixed list icon alignment on landing page (#668)" msgstr "" -#: ../../../CHANGELOG:2546 +#: ../../../CHANGELOG.md:2408 msgid "Fixed overescaping issue in notifications and album page (#676)" msgstr "" -#: ../../../CHANGELOG:2547 +#: ../../../CHANGELOG.md:2409 msgid "Fixed wrong number of affected elements in bulk action modal (#683)" msgstr "" -#: ../../../CHANGELOG:2548 +#: ../../../CHANGELOG.md:2410 msgid "" "Fixed wrong URL in documentation for funkwhale_proxy.conf file when " "deploying using Docker" msgstr "" -#: ../../../CHANGELOG:2549 +#: ../../../CHANGELOG.md:2411 msgid "Make Apache configuration file work with 0.18 changes (#667)" msgstr "" -#: ../../../CHANGELOG:2550 +#: ../../../CHANGELOG.md:2412 msgid "Removed potential BREACH exploit because of Gzip compression (#678)" msgstr "" -#: ../../../CHANGELOG:2551 +#: ../../../CHANGELOG.md:2413 msgid "Upgraded kombu to fix an incompatibility with redis>=3" msgstr "" -#: ../../../CHANGELOG:2556 +#: ../../../CHANGELOG.md:2417 msgid "" "Added user upload documentation at " "https://docs.funkwhale.audio/users/upload.html" msgstr "" -#: ../../../CHANGELOG:2560 +#: ../../../CHANGELOG.md:2419 msgid "0.18 \"Naomi\" (2019-01-22)" msgstr "" -#: ../../../CHANGELOG:2562 +#: ../../../CHANGELOG.md:2421 msgid "" "This release is dedicated to Naomi, an early contributor and beta tester " "of Funkwhale. Her positivity, love and support have been incredibly " @@ -5157,37 +5499,37 @@ msgid "" " so much Naomi <3" msgstr "" -#: ../../../CHANGELOG:2566 +#: ../../../CHANGELOG.md:2425 msgid "" "Many thanks to the dozens of people that contributed to this release: " "translators, developers, bug hunters, admins and backers. You made it " "possible!" msgstr "" -#: ../../../CHANGELOG:2569 +#: ../../../CHANGELOG.md:2428 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/admin/upgrading.html, ensure you also " -"execute the instructions marked with ``[manual action required]`` and " -"``[manual action suggested]``." +"execute the instructions marked with `[manual action required]` and " +"`[manual action suggested]`." msgstr "" -#: ../../../CHANGELOG:2573 -msgid "See ``Full changelog`` below for an exhaustive list of changes!" +#: ../../../CHANGELOG.md:2431 +msgid "See `Full changelog` below for an exhaustive list of changes!" msgstr "" -#: ../../../CHANGELOG:2576 +#: ../../../CHANGELOG.md:2433 msgid "Audio transcoding is back!" msgstr "" -#: ../../../CHANGELOG:2578 +#: ../../../CHANGELOG.md:2435 msgid "" "After removal of our first, buggy transcoding implementation, we're proud" " to announce that this feature is back. It is enabled by default, and can" " be configured/disabled in your instance settings!" msgstr "" -#: ../../../CHANGELOG:2582 +#: ../../../CHANGELOG.md:2439 msgid "" "This feature works in the browser, with federated/non-federated tracks " "and using Subsonic clients. Transcoded tracks are generated on the fly, " @@ -5195,11 +5537,11 @@ msgid "" "server." msgstr "" -#: ../../../CHANGELOG:2588 +#: ../../../CHANGELOG.md:2443 msgid "Licensing and copyright information" msgstr "" -#: ../../../CHANGELOG:2590 +#: ../../../CHANGELOG.md:2445 msgid "" "Funkwhale is now able to parse copyright and license data from file and " "store this information. Apart from displaying it on each track detail " @@ -5207,57 +5549,57 @@ msgid "" "data, but this will change in future releases." msgstr "" -#: ../../../CHANGELOG:2595 +#: ../../../CHANGELOG.md:2450 msgid "License and copyright data is also broadcasted over federation." msgstr "" -#: ../../../CHANGELOG:2597 +#: ../../../CHANGELOG.md:2452 msgid "" -"License matching is done on the content of the ``License`` tag in the " -"files, with a fallback on the ``Copyright`` tag." +"License matching is done on the content of the `License` tag in the " +"files, with a fallback on the `Copyright` tag." msgstr "" -#: ../../../CHANGELOG:2600 +#: ../../../CHANGELOG.md:2455 msgid "" "Funkwhale will successfully extract licensing data for the following " "licenses:" msgstr "" -#: ../../../CHANGELOG:2602 +#: ../../../CHANGELOG.md:2457 msgid "Creative Commons 0 (Public Domain)" msgstr "" -#: ../../../CHANGELOG:2603 +#: ../../../CHANGELOG.md:2458 msgid "Creative Commons 1.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2604 +#: ../../../CHANGELOG.md:2459 msgid "Creative Commons 2.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2605 +#: ../../../CHANGELOG.md:2460 msgid "Creative Commons 2.5 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2606 +#: ../../../CHANGELOG.md:2461 msgid "Creative Commons 3.0 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2607 +#: ../../../CHANGELOG.md:2462 msgid "Creative Commons 4.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2609 +#: ../../../CHANGELOG.md:2464 msgid "" "Support for other licenses such as Art Libre or WTFPL will be added in " "future releases." msgstr "" -#: ../../../CHANGELOG:2613 +#: ../../../CHANGELOG.md:2466 msgid "Instance-level moderation tools" msgstr "" -#: ../../../CHANGELOG:2615 +#: ../../../CHANGELOG.md:2468 msgid "" "This release includes a first set of moderation tools that will give more" " control to admins about the way their instance federates with other " @@ -5265,39 +5607,39 @@ msgid "" "possible to:" msgstr "" -#: ../../../CHANGELOG:2619 +#: ../../../CHANGELOG.md:2472 msgid "" "Browse known accounts and domains, and associated data (storage size, " "software version, etc.)" msgstr "" -#: ../../../CHANGELOG:2620 +#: ../../../CHANGELOG.md:2473 msgid "Purge data belonging to given accounts and domains" msgstr "" -#: ../../../CHANGELOG:2621 +#: ../../../CHANGELOG.md:2474 msgid "Block or partially restrict interactions with any account or domain" msgstr "" -#: ../../../CHANGELOG:2623 +#: ../../../CHANGELOG.md:2476 msgid "" "All those features are usable using a brand new \"moderation\" " "permission, meaning you can appoint one or multiple moderators to help " "with this task." msgstr "" -#: ../../../CHANGELOG:2626 +#: ../../../CHANGELOG.md:2479 msgid "" "I'd like to thank all Mastodon contributors, because some of the these " "tools are heavily inspired from what's being done in Mastodon. Thank you " "so much!" msgstr "" -#: ../../../CHANGELOG:2631 +#: ../../../CHANGELOG.md:2482 msgid "Iframe widget to embed public tracks and albums [manual action required]" msgstr "" -#: ../../../CHANGELOG:2633 +#: ../../../CHANGELOG.md:2484 msgid "" "Funkwhale now supports embedding a lightweight audio player on external " "websites for album and tracks that are available in public libraries. " @@ -5306,444 +5648,447 @@ msgid "" " a Funkwhale track link on Mastodon or Twitter)." msgstr "" -#: ../../../CHANGELOG:2639 +#: ../../../CHANGELOG.md:2490 msgid "" "To achieve that, we had to tweak the way Funkwhale front-end is served. " "You'll have to modify your nginx configuration when upgrading to keep " "your instance working." msgstr "" -#: ../../../CHANGELOG:2642 +#: ../../../CHANGELOG.md:2493 msgid "" -"**On docker setups**, edit your " -"``/srv/funkwhale/nginx/funkwhale.template`` and replace the ``location " -"/api/`` and `location /` blocks by the following snippets::" +"**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template`" +" and replace the `location /api/` and `location /` blocks by the " +"following snippets:" msgstr "" -#: ../../../CHANGELOG:2656 +#: ../../../CHANGELOG.md:2509 msgid "" "The change of configuration will be picked when restarting your nginx " "container." msgstr "" -#: ../../../CHANGELOG:2658 +#: ../../../CHANGELOG.md:2511 msgid "" -"**On non-docker setups**, edit your ``/etc/nginx/sites-" -"available/funkwhale.conf`` file, and replace the ``location /api/`` and " -"`location /` blocks by the following snippets::" +"**On non-docker setups**, edit your `/etc/nginx/sites-" +"available/funkwhale.conf` file, and replace the `location /api/` and " +"`location /` blocks by the following snippets:" msgstr "" -#: ../../../CHANGELOG:2673 +#: ../../../CHANGELOG.md:2527 msgid "" -"Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from" -" your .env file, which should be ``/srv/funkwhale/front/dist`` by " -"default, then reload your nginx process with ``sudo systemctl reload " -"nginx``." +"Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from " +"your .env file, which should be `/srv/funkwhale/front/dist` by default, " +"then reload your nginx process with `sudo systemctl reload nginx`." msgstr "" -#: ../../../CHANGELOG:2679 +#: ../../../CHANGELOG.md:2531 msgid "Alternative docker deployment method" msgstr "" -#: ../../../CHANGELOG:2681 +#: ../../../CHANGELOG.md:2533 msgid "" "Thanks to the awesome work done by @thetarkus at " "https://github.com/thetarkus/docker-funkwhale, we're now able to provide " "an alternative and easier Docker deployment method!" msgstr "" -#: ../../../CHANGELOG:2684 +#: ../../../CHANGELOG.md:2536 msgid "" "In contrast with our current, multi-container offer, this method " "integrates all Funkwhale processes and services (database, redis, etc.) " "into a single, easier to deploy container." msgstr "" -#: ../../../CHANGELOG:2687 +#: ../../../CHANGELOG.md:2539 msgid "" "Both methods will coexist in parallel, as each one has pros and cons. You" " can learn more about this exciting new deployment option by visiting " "https://docs.funkwhale.audio/installation/docker.html!" msgstr "" -#: ../../../CHANGELOG:2691 +#: ../../../CHANGELOG.md:2542 msgid "Automatically load .env file" msgstr "" -#: ../../../CHANGELOG:2693 +#: ../../../CHANGELOG.md:2544 msgid "" "On non-docker deployments, earlier versions required you to source the " -"config/.env file before launching any Funkwhale command, with ``export " -"$(cat config/.env | grep -v ^# | xargs)`` This led to more complex and " +"config/.env file before launching any Funkwhale command, with `export " +"$(cat config/.env | grep -v ^# | xargs)` This led to more complex and " "error prone deployment / setup." msgstr "" -#: ../../../CHANGELOG:2697 +#: ../../../CHANGELOG.md:2548 msgid "" "This is not the case anymore, and Funkwhale will automatically load this " "file if it's available." msgstr "" -#: ../../../CHANGELOG:2701 +#: ../../../CHANGELOG.md:2550 msgid "Delete pre 0.17 federated tracks [manual action suggested]" msgstr "" -#: ../../../CHANGELOG:2703 +#: ../../../CHANGELOG.md:2552 msgid "" "If you were using Funkwhale before the 0.17 release and federated with " "other instances, it's possible that you still have some unplayable " "federated files in the database." msgstr "" -#: ../../../CHANGELOG:2706 +#: ../../../CHANGELOG.md:2555 msgid "To purge the database of those entries, you can run the following command:" msgstr "" -#: ../../../CHANGELOG:2708 ../../../CHANGELOG:3259 ../../../CHANGELOG:3282 -msgid "On docker setups::" +#: ../../../CHANGELOG.md:2557 ../../../CHANGELOG.md:3088 +#: ../../../CHANGELOG.md:3113 ../../../CHANGELOG.md:3735 +#: ../../../CHANGELOG.md:3772 +msgid "On docker setups:" msgstr "" -#: ../../../CHANGELOG:2712 ../../../CHANGELOG:3263 ../../../CHANGELOG:3286 -msgid "On non-docker setups::" +#: ../../../CHANGELOG.md:2563 ../../../CHANGELOG.md:3094 +#: ../../../CHANGELOG.md:3119 ../../../CHANGELOG.md:3741 +#: ../../../CHANGELOG.md:3778 +msgid "On non-docker setups:" msgstr "" -#: ../../../CHANGELOG:2718 +#: ../../../CHANGELOG.md:2569 msgid "Enable gzip compression [manual action suggested]" msgstr "" -#: ../../../CHANGELOG:2720 +#: ../../../CHANGELOG.md:2571 msgid "" "Gzip compression will be enabled on new instances by default and will " "reduce the amount of bandwidth consumed by your instance." msgstr "" -#: ../../../CHANGELOG:2723 +#: ../../../CHANGELOG.md:2574 msgid "" "If you want to benefit from gzip compression on your instance, edit your " -"reverse proxy virtualhost file (located at ``/etc/nginx/sites-" -"available/funkwhale.conf``) and add the following snippet in the server " -"block, then reload your nginx server::" +"reverse proxy virtualhost file (located at `/etc/nginx/sites-" +"available/funkwhale.conf`) and add the following snippet in the server " +"block, then reload your nginx server:" msgstr "" -#: ../../../CHANGELOG:2759 +#: ../../../CHANGELOG.md:2611 msgid "Full changelog" msgstr "" -#: ../../../CHANGELOG:2763 +#: ../../../CHANGELOG.md:2615 msgid "" "Allow embedding of albums and tracks available in public libraries via an" " <iframe> (#578)" msgstr "" -#: ../../../CHANGELOG:2764 +#: ../../../CHANGELOG.md:2616 msgid "Audio transcoding is back! (#272)" msgstr "" -#: ../../../CHANGELOG:2765 +#: ../../../CHANGELOG.md:2617 msgid "First set of instance level moderation tools (#580, !521)" msgstr "" -#: ../../../CHANGELOG:2766 +#: ../../../CHANGELOG.md:2618 msgid "" "Store licensing and copyright information from file metadata, if " "available (#308)" msgstr "" -#: ../../../CHANGELOG:2771 +#: ../../../CHANGELOG.md:2622 msgid "Add UI elements for multi-disc albums (#631)" msgstr "" -#: ../../../CHANGELOG:2772 +#: ../../../CHANGELOG.md:2623 msgid "Added alternative funkwhale/all-in-one docker image (#614)" msgstr "" -#: ../../../CHANGELOG:2773 +#: ../../../CHANGELOG.md:2624 msgid "Broadcast library updates (name, description, visibility) over federation" msgstr "" -#: ../../../CHANGELOG:2774 +#: ../../../CHANGELOG.md:2625 msgid "Based Docker image on alpine to have a smaller (and faster to build) image" msgstr "" -#: ../../../CHANGELOG:2775 +#: ../../../CHANGELOG.md:2626 msgid "" "Improved front-end performance by stripping unused dependencies, reducing" " bundle size and enabling gzip compression" msgstr "" -#: ../../../CHANGELOG:2777 +#: ../../../CHANGELOG.md:2628 msgid "" "Improved accessibility by using main/section/nav tags and aria-labels in " "most critical places (#612)" msgstr "" -#: ../../../CHANGELOG:2778 +#: ../../../CHANGELOG.md:2629 msgid "" "The progress bar in the player now display loading state / buffer loading" " (#586)" msgstr "" -#: ../../../CHANGELOG:2779 +#: ../../../CHANGELOG.md:2630 msgid "" "Added \"type: funkwhale\" and \"funkwhale-version\" in Subsonic responses" " (#573)" msgstr "" -#: ../../../CHANGELOG:2780 +#: ../../../CHANGELOG.md:2631 msgid "" "Documented keyboard shortcuts, list is now available by pressing \"h\" or" " in the footer (#611)" msgstr "" -#: ../../../CHANGELOG:2781 +#: ../../../CHANGELOG.md:2632 msgid "Documented which Subsonic endpoints are implemented (#575)" msgstr "" -#: ../../../CHANGELOG:2782 +#: ../../../CHANGELOG.md:2633 msgid "Hide invitation code field during signup when it's not required (#410)" msgstr "" -#: ../../../CHANGELOG:2783 +#: ../../../CHANGELOG.md:2634 msgid "" "Importer will now pick embedded images in files with OTHER type if no " "COVER_FRONT is present" msgstr "" -#: ../../../CHANGELOG:2784 +#: ../../../CHANGELOG.md:2635 msgid "" "Improved keyboard accessibility on player, queue and various controls " "(#576)" msgstr "" -#: ../../../CHANGELOG:2785 +#: ../../../CHANGELOG.md:2636 msgid "Improved performance when listing playable tracks, albums and artists" msgstr "" -#: ../../../CHANGELOG:2786 +#: ../../../CHANGELOG.md:2637 msgid "Increased default upload limit from 30 to 100MB (#654)" msgstr "" -#: ../../../CHANGELOG:2787 +#: ../../../CHANGELOG.md:2638 msgid "" "Load env file in config/.env automatically to avoid sourcing it by hand " "(#626)" msgstr "" -#: ../../../CHANGELOG:2788 +#: ../../../CHANGELOG.md:2639 msgid "" "More resilient date parsing during audio import, will not crash anymore " "on invalid dates (#622)" msgstr "" -#: ../../../CHANGELOG:2790 +#: ../../../CHANGELOG.md:2641 msgid "Now start radios immediately, skipping any existing tracks in queue (#585)" msgstr "" -#: ../../../CHANGELOG:2791 +#: ../../../CHANGELOG.md:2642 msgid "" "Officially support connecting to a password protected redis server, with " "the redis://:password@localhost:6379/0 scheme (#640)" msgstr "" -#: ../../../CHANGELOG:2793 +#: ../../../CHANGELOG.md:2644 msgid "" "Performance improvement when fetching favorites, down to a single, small " "http request" msgstr "" -#: ../../../CHANGELOG:2794 +#: ../../../CHANGELOG.md:2645 msgid "" "Removed \"Activity\" page, since all the data is available on the " "\"Browse\" page (#600)" msgstr "" -#: ../../../CHANGELOG:2795 +#: ../../../CHANGELOG.md:2646 msgid "Removed the need to specify the DJANGO_ALLOWED_HOSTS variable" msgstr "" -#: ../../../CHANGELOG:2796 +#: ../../../CHANGELOG.md:2647 msgid "Restructured the footer, added useful links and removed unused content" msgstr "" -#: ../../../CHANGELOG:2797 +#: ../../../CHANGELOG.md:2648 msgid "Show short entries first in search results to improve UX" msgstr "" -#: ../../../CHANGELOG:2798 +#: ../../../CHANGELOG.md:2649 msgid "Store disc number and order tracks by disc number / position) (#507)" msgstr "" -#: ../../../CHANGELOG:2799 +#: ../../../CHANGELOG.md:2650 msgid "" "Strip EXIF metadata from uploaded avatars to avoid leaking private data " "(#374)" msgstr "" -#: ../../../CHANGELOG:2800 +#: ../../../CHANGELOG.md:2651 msgid "Support blind key rotation in HTTP Signatures (#658)" msgstr "" -#: ../../../CHANGELOG:2801 +#: ../../../CHANGELOG.md:2652 msgid "Support setting a server URL in settings.json (#650)" msgstr "" -#: ../../../CHANGELOG:2802 +#: ../../../CHANGELOG.md:2653 msgid "Updated default docker postgres version from 9.4 to 11 (#656)" msgstr "" -#: ../../../CHANGELOG:2803 +#: ../../../CHANGELOG.md:2654 msgid "" "Updated lots of dependencies (especially django 2.0->2.1), and removed " "unused dependencies (#657)" msgstr "" -#: ../../../CHANGELOG:2804 +#: ../../../CHANGELOG.md:2655 msgid "" "Improved test suite speed by reducing / disabling expensive operations " "(#648)" msgstr "" -#: ../../../CHANGELOG:2809 +#: ../../../CHANGELOG.md:2659 msgid "" "Fixed parsing of embedded file cover for ogg files tagged with " "MusicBrainz (#469)" msgstr "" -#: ../../../CHANGELOG:2810 +#: ../../../CHANGELOG.md:2660 msgid "" "Upgraded core dependencies to fix websocket/messaging issues and possible" " memory leaks (#643)" msgstr "" -#: ../../../CHANGELOG:2811 +#: ../../../CHANGELOG.md:2661 msgid "Fix \".None\" extension when downloading Flac file (#473)" msgstr "" -#: ../../../CHANGELOG:2812 +#: ../../../CHANGELOG.md:2662 msgid "Fixed None extension when downloading an in-place imported file (#621)" msgstr "" -#: ../../../CHANGELOG:2813 +#: ../../../CHANGELOG.md:2663 msgid "Added a script to prune pre 0.17 federated tracks (#564)" msgstr "" -#: ../../../CHANGELOG:2814 +#: ../../../CHANGELOG.md:2664 msgid "Advertise public libraries properly in ActivityPub representations (#553)" msgstr "" -#: ../../../CHANGELOG:2815 +#: ../../../CHANGELOG.md:2665 msgid "Allow opus file upload (#598)" msgstr "" -#: ../../../CHANGELOG:2816 +#: ../../../CHANGELOG.md:2666 msgid "Do not display \"view on MusicBrainz\" button if we miss the mbid (#422)" msgstr "" -#: ../../../CHANGELOG:2817 +#: ../../../CHANGELOG.md:2667 msgid "Do not try to create unaccent extension if it's already present (#663)" msgstr "" -#: ../../../CHANGELOG:2818 +#: ../../../CHANGELOG.md:2668 msgid "" "Ensure admin links in sidebar are displayed for users with relevant " "permissions, and only them (#597)" msgstr "" -#: ../../../CHANGELOG:2819 +#: ../../../CHANGELOG.md:2669 msgid "Fix broken websocket connection under Chrome browser (#589)" msgstr "" -#: ../../../CHANGELOG:2820 +#: ../../../CHANGELOG.md:2670 msgid "Fix play button not starting playback with empty queue (#632)" msgstr "" -#: ../../../CHANGELOG:2821 +#: ../../../CHANGELOG.md:2671 msgid "" "Fixed a styling inconsistency on about page when instance description was" " missing (#659)" msgstr "" -#: ../../../CHANGELOG:2822 +#: ../../../CHANGELOG.md:2672 msgid "Fixed a UI discrepancy in playlist tracks count (#647)" msgstr "" -#: ../../../CHANGELOG:2823 +#: ../../../CHANGELOG.md:2673 msgid "Fixed greyed tracks in radio builder and detail page (#637)" msgstr "" -#: ../../../CHANGELOG:2824 +#: ../../../CHANGELOG.md:2674 msgid "Fixed inconsistencies in subsonic error responses (#616)" msgstr "" -#: ../../../CHANGELOG:2825 +#: ../../../CHANGELOG.md:2675 msgid "Fixed incorrect icon for \"next track\" in player control (#613)" msgstr "" -#: ../../../CHANGELOG:2826 +#: ../../../CHANGELOG.md:2676 msgid "Fixed malformed search string when redirecting to LyricsWiki (#608)" msgstr "" -#: ../../../CHANGELOG:2827 +#: ../../../CHANGELOG.md:2677 msgid "Fixed missing track count on various library cards (#581)" msgstr "" -#: ../../../CHANGELOG:2828 +#: ../../../CHANGELOG.md:2678 msgid "" "Fixed skipped track when appending multiple tracks to the queue under " "certain conditions (#209)" msgstr "" -#: ../../../CHANGELOG:2829 +#: ../../../CHANGELOG.md:2679 msgid "Fixed wrong album/track count on artist page (#599)" msgstr "" -#: ../../../CHANGELOG:2830 +#: ../../../CHANGELOG.md:2680 msgid "Hide unplayable/empty playlists in \"Browse playlist\" pages (#424)" msgstr "" -#: ../../../CHANGELOG:2831 +#: ../../../CHANGELOG.md:2681 msgid "Initial UI render using correct language from browser (#644)" msgstr "" -#: ../../../CHANGELOG:2832 +#: ../../../CHANGELOG.md:2682 msgid "Invalid URI for reverse proxy websocket with apache (#617)" msgstr "" -#: ../../../CHANGELOG:2833 +#: ../../../CHANGELOG.md:2683 msgid "Properly encode Wikipedia and lyrics search urls (#470)" msgstr "" -#: ../../../CHANGELOG:2834 +#: ../../../CHANGELOG.md:2684 msgid "Refresh profile after user settings update to avoid cache issues (#606)" msgstr "" -#: ../../../CHANGELOG:2835 +#: ../../../CHANGELOG.md:2685 msgid "Use role=button instead of empty links for player controls (#610)" msgstr "" -#: ../../../CHANGELOG:2840 +#: ../../../CHANGELOG.md:2689 msgid "" "Deploy documentation from the master branch instead of the develop branch" " to avoid inconsistencies (#642)" msgstr "" -#: ../../../CHANGELOG:2841 +#: ../../../CHANGELOG.md:2690 msgid "Document how to find and use library id when importing files in CLI (#562)" msgstr "" -#: ../../../CHANGELOG:2842 +#: ../../../CHANGELOG.md:2691 msgid "Fix documentation typos (#645)" msgstr "" -#: ../../../CHANGELOG:2846 +#: ../../../CHANGELOG.md:2693 msgid "0.17 (2018-10-07)" msgstr "" -#: ../../../CHANGELOG:2849 +#: ../../../CHANGELOG.md:2695 msgid "Per user libraries" msgstr "" -#: ../../../CHANGELOG:2851 +#: ../../../CHANGELOG.md:2697 msgid "" "This release contains a big change in music management. This has a lot of" " impact on how Funkwhale behaves, and you should have a look at " @@ -5751,99 +6096,99 @@ msgid "" "what changed and how to migrate." msgstr "" -#: ../../../CHANGELOG:2859 +#: ../../../CHANGELOG.md:2704 msgid "Per user libraries (#463, also fixes #160 and #147)" msgstr "" -#: ../../../CHANGELOG:2860 +#: ../../../CHANGELOG.md:2705 msgid "Authentication using a LDAP directory (#194)" msgstr "" -#: ../../../CHANGELOG:2865 +#: ../../../CHANGELOG.md:2709 msgid "Add configuration option to set Musicbrainz hostname" msgstr "" -#: ../../../CHANGELOG:2866 +#: ../../../CHANGELOG.md:2710 msgid "Add sign up link in the sidebar (#408)" msgstr "" -#: ../../../CHANGELOG:2867 +#: ../../../CHANGELOG.md:2711 msgid "" "Added a library widget to display libraries associated with a track, " "album and artist (#551)" msgstr "" -#: ../../../CHANGELOG:2869 +#: ../../../CHANGELOG.md:2713 msgid "Ensure from_activity field is not required in django's admin (#546)" msgstr "" -#: ../../../CHANGELOG:2870 +#: ../../../CHANGELOG.md:2714 msgid "Move setting link from profile page to the sidebar (#406)" msgstr "" -#: ../../../CHANGELOG:2871 +#: ../../../CHANGELOG.md:2715 msgid "Simplified and less error-prone nginx setup (#358)" msgstr "" -#: ../../../CHANGELOG:2875 +#: ../../../CHANGELOG.md:2719 msgid "" "Do not restart current song when rordering queue, deleting tracks from " "queue or adding tracks to queue (#464)" msgstr "" -#: ../../../CHANGELOG:2877 +#: ../../../CHANGELOG.md:2721 msgid "Fix broken icons in playlist editor (#515)" msgstr "" -#: ../../../CHANGELOG:2878 +#: ../../../CHANGELOG.md:2722 msgid "Fixed a few untranslated strings (#559)" msgstr "" -#: ../../../CHANGELOG:2879 +#: ../../../CHANGELOG.md:2723 msgid "Fixed split album when importing from federation (#346)" msgstr "" -#: ../../../CHANGELOG:2880 +#: ../../../CHANGELOG.md:2724 msgid "" "Fixed toggle mute in volume bar does not restore previous volume level " "(#514)" msgstr "" -#: ../../../CHANGELOG:2881 +#: ../../../CHANGELOG.md:2725 msgid "" "Fixed wrong env file URL and display bugs in deployment documentation " "(#520)" msgstr "" -#: ../../../CHANGELOG:2882 +#: ../../../CHANGELOG.md:2726 msgid "Fixed wrong title in PlayButton (#435)" msgstr "" -#: ../../../CHANGELOG:2883 +#: ../../../CHANGELOG.md:2727 msgid "Remove transparency on artist page button (#517)" msgstr "" -#: ../../../CHANGELOG:2884 +#: ../../../CHANGELOG.md:2728 msgid "Set sane width default for ui cards and center play button (#530)" msgstr "" -#: ../../../CHANGELOG:2885 +#: ../../../CHANGELOG.md:2729 msgid "Updated wrong icon and copy in play button dropdown (#436)" msgstr "" -#: ../../../CHANGELOG:2890 +#: ../../../CHANGELOG.md:2733 msgid "Fixed wrong URLs for docker / nginx files in documentation (#537)" msgstr "" -#: ../../../CHANGELOG:2895 +#: ../../../CHANGELOG.md:2737 msgid "Added a merge request template and more documentation about the changelog" msgstr "" -#: ../../../CHANGELOG:2899 +#: ../../../CHANGELOG.md:2739 msgid "Using a LDAP directory to authenticate to your Funkwhale instance" msgstr "" -#: ../../../CHANGELOG:2901 +#: ../../../CHANGELOG.md:2741 msgid "" "Funkwhale now support LDAP as an authentication source: you can configure" " your instance to delegate login to a LDAP directory, which is especially" @@ -5851,21 +6196,21 @@ msgid "" "users manually." msgstr "" -#: ../../../CHANGELOG:2906 +#: ../../../CHANGELOG.md:2746 msgid "You can use this authentication backend side by side with the classic one." msgstr "" -#: ../../../CHANGELOG:2908 +#: ../../../CHANGELOG.md:2748 msgid "" "Have a look at https://docs.funkwhale.audio/installation/ldap.html for " "detailed instructions on how to set this up." msgstr "" -#: ../../../CHANGELOG:2913 +#: ../../../CHANGELOG.md:2751 msgid "Simplified nginx setup [Docker: Manual action required]" msgstr "" -#: ../../../CHANGELOG:2915 +#: ../../../CHANGELOG.md:2753 msgid "" "We've received a lot of user feedback regarding our installation process," " and it seems the proxy part is the one which is the most confusing and " @@ -5873,446 +6218,445 @@ msgid "" "can completely break the application." msgstr "" -#: ../../../CHANGELOG:2920 +#: ../../../CHANGELOG.md:2758 msgid "" "To make things easier for everyone, we now offer a simplified deployment " "process for the reverse proxy part. This will make upgrade of the proxy " "configuration significantly easier on docker deployments." msgstr "" -#: ../../../CHANGELOG:2924 +#: ../../../CHANGELOG.md:2762 msgid "On non-docker instances, you have nothing to do." msgstr "" -#: ../../../CHANGELOG:2926 +#: ../../../CHANGELOG.md:2764 msgid "If you have a dockerized instance, here is the upgrade path." msgstr "" -#: ../../../CHANGELOG:2928 -msgid "First, tweak your .env file::" +#: ../../../CHANGELOG.md:2766 +msgid "First, tweak your .env file:" msgstr "" -#: ../../../CHANGELOG:2940 -msgid "Then, add the following block at the end of your docker-compose.yml file::" +#: ../../../CHANGELOG.md:2780 +msgid "Then, add the following block at the end of your docker-compose.yml file:" msgstr "" -#: ../../../CHANGELOG:2975 +#: ../../../CHANGELOG.md:2818 msgid "" "By doing that, you'll enable a dockerized nginx that will automatically " "be configured to serve your Funkwhale instance." msgstr "" -#: ../../../CHANGELOG:2978 +#: ../../../CHANGELOG.md:2821 msgid "Download the required configuration files for the nginx container:" msgstr "" -#: ../../../CHANGELOG:2987 -msgid "Update the funkwhale.conf configuration of your server's reverse-proxy::" +#: ../../../CHANGELOG.md:2830 +msgid "Update the funkwhale.conf configuration of your server's reverse-proxy:" msgstr "" -#: ../../../CHANGELOG:3033 +#: ../../../CHANGELOG.md:2881 msgid "Check that your configuration is valid then reload:" msgstr "" -#: ../../../CHANGELOG:3035 -msgid "sudo nginx -t sudo systemctl reload nginx" -msgstr "" - -#: ../../../CHANGELOG:3040 +#: ../../../CHANGELOG.md:2888 msgid "0.16.3 (2018-08-21)" msgstr "" -#: ../../../CHANGELOG:3042 ../../../CHANGELOG:3058 ../../../CHANGELOG:3072 -#: ../../../CHANGELOG:3147 ../../../CHANGELOG:3380 ../../../CHANGELOG:3462 -#: ../../../CHANGELOG:3584 ../../../CHANGELOG:4141 +#: ../../../CHANGELOG.md:2890 ../../../CHANGELOG.md:2903 +#: ../../../CHANGELOG.md:2915 ../../../CHANGELOG.md:2988 +#: ../../../CHANGELOG.md:3210 ../../../CHANGELOG.md:3283 +#: ../../../CHANGELOG.md:3398 ../../../CHANGELOG.md:3483 +#: ../../../CHANGELOG.md:3681 ../../../CHANGELOG.md:3791 +#: ../../../CHANGELOG.md:3934 msgid "" "Upgrade instructions are available at " "https://docs.funkwhale.audio/upgrading.html" msgstr "" -#: ../../../CHANGELOG:3047 +#: ../../../CHANGELOG.md:2895 msgid "Fixed front-end not contacting the proper path on the API (!385)" msgstr "" -#: ../../../CHANGELOG:3051 +#: ../../../CHANGELOG.md:2897 msgid "0.16.2 (2018-08-21)" msgstr "" -#: ../../../CHANGELOG:3055 +#: ../../../CHANGELOG.md:2900 msgid "" "**This release is broken, do not use it. Upgrade to 0.16.3 or higher " "instead.**" msgstr "" -#: ../../../CHANGELOG:3063 +#: ../../../CHANGELOG.md:2908 msgid "" "Ensure we always have a default api url set on first load to avoid " "displaying the instance picker (#490)" msgstr "" -#: ../../../CHANGELOG:3065 +#: ../../../CHANGELOG.md:2910 msgid "" "Fixed CLI importer syntax error because of async reserved keyword usage " "(#494)" msgstr "" -#: ../../../CHANGELOG:3070 +#: ../../../CHANGELOG.md:2913 msgid "0.16.1 (2018-08-19)" msgstr "" -#: ../../../CHANGELOG:3077 +#: ../../../CHANGELOG.md:2920 msgid "Make funkwhale themable by loading external stylesheets (#456)" msgstr "" -#: ../../../CHANGELOG:3081 +#: ../../../CHANGELOG.md:2924 msgid "Add link to admin on \"Staff member\" button (#202)" msgstr "" -#: ../../../CHANGELOG:3082 +#: ../../../CHANGELOG.md:2925 msgid "Can now add a description to radios and better radio cards (#331)" msgstr "" -#: ../../../CHANGELOG:3083 +#: ../../../CHANGELOG.md:2926 msgid "Display track duration in track tables (#461)" msgstr "" -#: ../../../CHANGELOG:3084 +#: ../../../CHANGELOG.md:2927 msgid "More permissive default permissions for front-end files (#388)" msgstr "" -#: ../../../CHANGELOG:3085 +#: ../../../CHANGELOG.md:2928 msgid "Simpler configuration and toolchain for the front-end using vue-cli (!375)" msgstr "" -#: ../../../CHANGELOG:3086 +#: ../../../CHANGELOG.md:2929 msgid "Use Howler to manage audio instead of our own dirty/untested code (#392)" msgstr "" -#: ../../../CHANGELOG:3091 +#: ../../../CHANGELOG.md:2933 msgid "Fix alignment issue on top bar in Admin tabs (#395)" msgstr "" -#: ../../../CHANGELOG:3092 +#: ../../../CHANGELOG.md:2934 msgid "" "Fix Apache2 permission issue preventing `/media` folder from being served" " correctly (#389)" msgstr "" -#: ../../../CHANGELOG:3094 +#: ../../../CHANGELOG.md:2936 msgid "" "Fix loading on browse page lists causing them to go down, and dimming " "over the top bar (#468)" msgstr "" -#: ../../../CHANGELOG:3096 +#: ../../../CHANGELOG.md:2938 msgid "" "Fixed (again): administration section not showing up in sidebar after " "login (#245)" msgstr "" -#: ../../../CHANGELOG:3098 +#: ../../../CHANGELOG.md:2940 msgid "Fixed audio mimetype not showing up on track detail and list (#459)" msgstr "" -#: ../../../CHANGELOG:3099 +#: ../../../CHANGELOG.md:2941 msgid "Fixed broken audio playback on Chrome and invisible volume control (#390)" msgstr "" -#: ../../../CHANGELOG:3100 +#: ../../../CHANGELOG.md:2942 msgid "" "Fixed broken federation import on big imports due to missing transaction " "logic (#397)" msgstr "" -#: ../../../CHANGELOG:3102 +#: ../../../CHANGELOG.md:2944 msgid "Fixed crash on artist pages when no cover is available (#457)" msgstr "" -#: ../../../CHANGELOG:3103 +#: ../../../CHANGELOG.md:2945 msgid "Fixed favorited status of tracks not appearing in interface (#398)" msgstr "" -#: ../../../CHANGELOG:3104 +#: ../../../CHANGELOG.md:2946 msgid "" "Fixed invitation code not prefilled in form when accessing invitation " "link (#476)" msgstr "" -#: ../../../CHANGELOG:3106 +#: ../../../CHANGELOG.md:2948 msgid "Fixed typos in scheduled tasks configuration (#487)" msgstr "" -#: ../../../CHANGELOG:3107 +#: ../../../CHANGELOG.md:2949 msgid "Removed release date error in case of empty date (#478)" msgstr "" -#: ../../../CHANGELOG:3108 +#: ../../../CHANGELOG.md:2950 msgid "Removed white on white artist button on hover, on Album page (#393)" msgstr "" -#: ../../../CHANGELOG:3109 +#: ../../../CHANGELOG.md:2951 msgid "Smarter date parsing during import by replacing arrow with pendulum (#376)" msgstr "" -#: ../../../CHANGELOG:3110 +#: ../../../CHANGELOG.md:2952 msgid "Display public playlists properly for anonymous users (#488)" msgstr "" -#: ../../../CHANGELOG:3113 ../../../CHANGELOG:3205 +#: ../../../CHANGELOG.md:2954 ../../../CHANGELOG.md:3042 msgid "i18n:" msgstr "" -#: ../../../CHANGELOG:3115 +#: ../../../CHANGELOG.md:2956 msgid "Added portuguese, spanish and german translations" msgstr "" -#: ../../../CHANGELOG:3119 +#: ../../../CHANGELOG.md:2958 msgid "Custom themes for Funkwhale" msgstr "" -#: ../../../CHANGELOG:3121 +#: ../../../CHANGELOG.md:2960 msgid "" "If you ever wanted to give a custom look and feel to your instance, this " "is now possible." msgstr "" -#: ../../../CHANGELOG:3123 +#: ../../../CHANGELOG.md:2962 msgid "" "Check https://docs.funkwhale.audio/configuration.html#theming if you want" " to know more!" msgstr "" -#: ../../../CHANGELOG:3127 +#: ../../../CHANGELOG.md:2964 msgid "Fix Apache2 configuration file for media block [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3129 +#: ../../../CHANGELOG.md:2966 msgid "" "The permission scope on the current Apache2 configuration file is too " "narrow, preventing thumbnails from being served." msgstr "" -#: ../../../CHANGELOG:3131 -msgid "On Apache2 setups, you have to replace the following line::" +#: ../../../CHANGELOG.md:2968 +msgid "On Apache2 setups, you have to replace the following line:" msgstr "" -#: ../../../CHANGELOG:3135 -msgid "with::" +#: ../../../CHANGELOG.md:2974 +msgid "with:" msgstr "" -#: ../../../CHANGELOG:3139 -msgid "You can now restart your server::" +#: ../../../CHANGELOG.md:2980 +msgid "You can now restart your server:" msgstr "" -#: ../../../CHANGELOG:3145 +#: ../../../CHANGELOG.md:2986 msgid "0.16 (2018-07-22)" msgstr "" -#: ../../../CHANGELOG:3152 +#: ../../../CHANGELOG.md:2993 msgid "Complete redesign of the library home and playlist pages (#284)" msgstr "" -#: ../../../CHANGELOG:3153 +#: ../../../CHANGELOG.md:2994 msgid "Expose ActivityPub actors for users (#317)" msgstr "" -#: ../../../CHANGELOG:3154 +#: ../../../CHANGELOG.md:2995 msgid "" "Implemented a basic but functional Github-like search on federated tracks" " list (#344)" msgstr "" -#: ../../../CHANGELOG:3156 +#: ../../../CHANGELOG.md:2997 msgid "" "Internationalized interface as well as translations for Arabic, French, " "Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167)" msgstr "" -#: ../../../CHANGELOG:3158 +#: ../../../CHANGELOG.md:2999 msgid "Users can now upload an avatar in their settings page (#257)" msgstr "" -#: ../../../CHANGELOG:3163 +#: ../../../CHANGELOG.md:3003 msgid "Added feedback when creating/updating radio (#302)" msgstr "" -#: ../../../CHANGELOG:3164 +#: ../../../CHANGELOG.md:3004 msgid "Apply restrictions to username characters during signup" msgstr "" -#: ../../../CHANGELOG:3165 +#: ../../../CHANGELOG.md:3005 msgid "Autoselect best language based on browser configuration (#386)" msgstr "" -#: ../../../CHANGELOG:3166 +#: ../../../CHANGELOG.md:3006 msgid "Can now order tracks on federated track list (#326)" msgstr "" -#: ../../../CHANGELOG:3167 +#: ../../../CHANGELOG.md:3007 msgid "Can now relaunch pending import jobs from the web interface (#323)" msgstr "" -#: ../../../CHANGELOG:3168 +#: ../../../CHANGELOG.md:3008 msgid "Ensure we do not display pagination on single pages (#334)" msgstr "" -#: ../../../CHANGELOG:3169 +#: ../../../CHANGELOG.md:3009 msgid "" "Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and " "MUSIC_DIRECTORY_PATH in the deployment .env file (#350)" msgstr "" -#: ../../../CHANGELOG:3171 +#: ../../../CHANGELOG.md:3011 msgid "Make some space for the volume slider to allow precise control (#318)" msgstr "" -#: ../../../CHANGELOG:3172 +#: ../../../CHANGELOG.md:3012 msgid "Removed django-cacheops dependency" msgstr "" -#: ../../../CHANGELOG:3173 +#: ../../../CHANGELOG.md:3013 msgid "" "Store track artist and album artist separately (#237) Better handling of " "tracks with a different artist than the album artist" msgstr "" -#: ../../../CHANGELOG:3175 +#: ../../../CHANGELOG.md:3015 msgid "The navigation bar of Library is now fixed (#375)" msgstr "" -#: ../../../CHANGELOG:3176 +#: ../../../CHANGELOG.md:3016 msgid "Use thumbnails for avatars and covers to reduce bandwidth" msgstr "" -#: ../../../CHANGELOG:3181 +#: ../../../CHANGELOG.md:3020 msgid "Ensure 750 permissions on CI artifacts (#332)" msgstr "" -#: ../../../CHANGELOG:3182 +#: ../../../CHANGELOG.md:3021 msgid "Ensure images are not cropped in queue (#337)" msgstr "" -#: ../../../CHANGELOG:3183 +#: ../../../CHANGELOG.md:3022 msgid "Ensure we do not import artists with empty names (#351)" msgstr "" -#: ../../../CHANGELOG:3184 +#: ../../../CHANGELOG.md:3023 msgid "Fix notifications not closing when clicking on the cross (#366)" msgstr "" -#: ../../../CHANGELOG:3185 +#: ../../../CHANGELOG.md:3024 msgid "Fix the most annoying offset in the whole fediverse (#369)" msgstr "" -#: ../../../CHANGELOG:3186 +#: ../../../CHANGELOG.md:3025 msgid "Fixed persistent message in playlist modal (#304)" msgstr "" -#: ../../../CHANGELOG:3187 +#: ../../../CHANGELOG.md:3026 msgid "Fixed unfiltered results in favorites API (#384)" msgstr "" -#: ../../../CHANGELOG:3188 +#: ../../../CHANGELOG.md:3027 msgid "" "Raise a warning instead of crashing when getting a broken path in file " "import (#138)" msgstr "" -#: ../../../CHANGELOG:3190 +#: ../../../CHANGELOG.md:3029 msgid "" "Remove parallelization of uploads during import to avoid crashing small " "servers (#382)" msgstr "" -#: ../../../CHANGELOG:3192 +#: ../../../CHANGELOG.md:3031 msgid "Subsonic API login is now case insensitive (#339)" msgstr "" -#: ../../../CHANGELOG:3193 +#: ../../../CHANGELOG.md:3032 msgid "Validate Date header in HTTP Signatures (#328)" msgstr "" -#: ../../../CHANGELOG:3198 +#: ../../../CHANGELOG.md:3036 msgid "Added troubleshotting and technical overview documentation (#256)" msgstr "" -#: ../../../CHANGELOG:3199 +#: ../../../CHANGELOG.md:3037 msgid "Arch Linux installation steps" msgstr "" -#: ../../../CHANGELOG:3200 +#: ../../../CHANGELOG.md:3038 msgid "Document that users can use Ultrasonic on Android (#316)" msgstr "" -#: ../../../CHANGELOG:3201 +#: ../../../CHANGELOG.md:3039 msgid "Fixed a couple of typos" msgstr "" -#: ../../../CHANGELOG:3202 +#: ../../../CHANGELOG.md:3040 msgid "Some cosmetic improvements to the doc" msgstr "" -#: ../../../CHANGELOG:3207 +#: ../../../CHANGELOG.md:3044 msgid "Arabic translation (!302)" msgstr "" -#: ../../../CHANGELOG:3208 +#: ../../../CHANGELOG.md:3045 msgid "Polish translation (!304)" msgstr "" -#: ../../../CHANGELOG:3212 +#: ../../../CHANGELOG.md:3047 msgid "Library home and playlist page overhaul" msgstr "" -#: ../../../CHANGELOG:3214 +#: ../../../CHANGELOG.md:3049 msgid "The library home page have been completely redesigned to include:" msgstr "" -#: ../../../CHANGELOG:3216 +#: ../../../CHANGELOG.md:3051 msgid "other users activity (listenings, playlists and favorites)" msgstr "" -#: ../../../CHANGELOG:3217 +#: ../../../CHANGELOG.md:3052 msgid "recently imported albums" msgstr "" -#: ../../../CHANGELOG:3219 +#: ../../../CHANGELOG.md:3054 msgid "" "We think this new version showcases more music in a more useful way, let " "us know what you think about it!" msgstr "" -#: ../../../CHANGELOG:3222 +#: ../../../CHANGELOG.md:3057 msgid "The playlist page have been updated as well." msgstr "" -#: ../../../CHANGELOG:3226 +#: ../../../CHANGELOG.md:3059 msgid "Internationalized interface" msgstr "" -#: ../../../CHANGELOG:3228 +#: ../../../CHANGELOG.md:3061 msgid "" "After months of work, we're proud to announce our interface is now ready " "for internationalization." msgstr "" -#: ../../../CHANGELOG:3231 +#: ../../../CHANGELOG.md:3064 msgid "" "Translators have already started the work of translating Funkwhale in 8 " "different languages, and we're ready to add more as needed." msgstr "" -#: ../../../CHANGELOG:3234 +#: ../../../CHANGELOG.md:3067 msgid "" "You can easily get involved at " "https://translate.funkwhale.audio/engage/funkwhale/" msgstr "" -#: ../../../CHANGELOG:3238 +#: ../../../CHANGELOG.md:3069 msgid "Better handling of tracks with a different artist than the album artist" msgstr "" -#: ../../../CHANGELOG:3240 +#: ../../../CHANGELOG.md:3071 msgid "" "Some tracks involve a different artist than the album artist (e.g. a " "featuring) and Funkwhale has been known to do weird things when importing" @@ -6320,47 +6664,47 @@ msgid "" "instance." msgstr "" -#: ../../../CHANGELOG:3244 +#: ../../../CHANGELOG.md:3075 msgid "" "The situation should be improved with this release, as Funkwhale is now " "able to store separately the track and album artist, and display it " "properly in the interface." msgstr "" -#: ../../../CHANGELOG:3249 +#: ../../../CHANGELOG.md:3078 msgid "Users now have an ActivityPub Actor [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3251 +#: ../../../CHANGELOG.md:3080 msgid "" "In the process of implementing federation for user activity such as " "listening history, we are now making user profiles (a.k.a. ActivityPub " "actors) available through federation." msgstr "" -#: ../../../CHANGELOG:3254 +#: ../../../CHANGELOG.md:3083 msgid "" "This does not means the federation is working, but this is a needed step " "to implement it." msgstr "" -#: ../../../CHANGELOG:3256 +#: ../../../CHANGELOG.md:3085 msgid "" "Those profiles will be created automatically for new users, but you have " "to run a command to create them for existing users." msgstr "" -#: ../../../CHANGELOG:3267 +#: ../../../CHANGELOG.md:3100 msgid "" "This should only take a few seconds to run. It is safe to interrupt the " "process or rerun it multiple times." msgstr "" -#: ../../../CHANGELOG:3271 +#: ../../../CHANGELOG.md:3102 msgid "Image thumbnails [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3273 +#: ../../../CHANGELOG.md:3104 msgid "" "To reduce bandwidth usage on slow or limited connexions and improve " "performance in general, we now use smaller images in the front-end. For " @@ -6370,38 +6714,38 @@ msgid "" "image." msgstr "" -#: ../../../CHANGELOG:3279 +#: ../../../CHANGELOG.md:3110 msgid "" "Thumbnail will be created automatically for new objects, however, you " "have to launch a manual command to deal with existing ones." msgstr "" -#: ../../../CHANGELOG:3290 +#: ../../../CHANGELOG.md:3125 msgid "" "This should be quite fast but may take up to a few minutes depending on " "the number of albums you have in database. It is safe to interrupt the " "process or rerun it multiple times." msgstr "" -#: ../../../CHANGELOG:3295 +#: ../../../CHANGELOG.md:3128 msgid "Improved search on federated tracks list" msgstr "" -#: ../../../CHANGELOG:3297 +#: ../../../CHANGELOG.md:3130 msgid "" "Having a powerful but easy-to-use search is important but difficult to " "achieve, especially if you do not want to have a real complex search " "interface." msgstr "" -#: ../../../CHANGELOG:3300 +#: ../../../CHANGELOG.md:3133 msgid "" "Github does a pretty good job with that, using a structured but simple " "query system (See https://help.github.com/articles/searching-issues-and-" "pull-requests/#search-only-issues-or-pull-requests)." msgstr "" -#: ../../../CHANGELOG:3303 +#: ../../../CHANGELOG.md:3136 msgid "" "This release implements a limited but working subset of this query " "system. You can use it only on the federated tracks list " @@ -6409,51 +6753,51 @@ msgid "" "will be rolled-out on other pages as well." msgstr "" -#: ../../../CHANGELOG:3306 +#: ../../../CHANGELOG.md:3139 msgid "This is the type of query you can run:" msgstr "" -#: ../../../CHANGELOG:3308 +#: ../../../CHANGELOG.md:3141 msgid "" -"``hello world``: search for \"hello\" and \"world\" in all the available " +"`hello world`: search for \"hello\" and \"world\" in all the available " "fields" msgstr "" -#: ../../../CHANGELOG:3309 -msgid "``hello in:artist`` search for results where artist name is \"hello\"" +#: ../../../CHANGELOG.md:3142 +msgid "`hello in:artist` search for results where artist name is \"hello\"" msgstr "" -#: ../../../CHANGELOG:3310 +#: ../../../CHANGELOG.md:3143 msgid "" -"``spring in:artist,album`` search for results where artist name or album " +"`spring in:artist,album` search for results where artist name or album " "title contain \"spring\"" msgstr "" -#: ../../../CHANGELOG:3311 -msgid "``artist:hello`` search for results where artist name equals \"hello\"" +#: ../../../CHANGELOG.md:3144 +msgid "`artist:hello` search for results where artist name equals \"hello\"" msgstr "" -#: ../../../CHANGELOG:3312 +#: ../../../CHANGELOG.md:3145 msgid "" -"``artist:\"System of a Down\" domain:instance.funkwhale`` search for " +"`artist:\"System of a Down\" domain:instance.funkwhale` search for " "results where artist name equals \"System of a Down\" and inside " "\"instance.funkwhale\" library" msgstr "" -#: ../../../CHANGELOG:3316 +#: ../../../CHANGELOG.md:3147 msgid "" -"Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitly " -"[Manual action required]" +"Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set " +"explicitly [Manual action required]" msgstr "" -#: ../../../CHANGELOG:3318 +#: ../../../CHANGELOG.md:3149 msgid "" "In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by " "default, causing some deployment issues on non-docker setups when people " "forgot to uncomment them." msgstr "" -#: ../../../CHANGELOG:3321 +#: ../../../CHANGELOG.md:3152 msgid "" "From now on, those variables are uncommented, and will also be used on " "docker setups to mount the volumes automatically in the docker-" @@ -6462,180 +6806,180 @@ msgid "" "file." msgstr "" -#: ../../../CHANGELOG:3326 +#: ../../../CHANGELOG.md:3157 msgid "" "This also applies to in-place paths (MUSIC_DIRECTORY_PATH and " "MUSIC_DIRECTORY_SERVE_PATH), whose values are now used directly to set up" " the proper Docker volumes." msgstr "" -#: ../../../CHANGELOG:3329 +#: ../../../CHANGELOG.md:3160 msgid "" "This will only affect new deployments though. If you want to benefit from" -" this on an existing instance, do a backup of your ``.env`` and ``docker-" -"compose.yml`` files and apply the following changes:" +" this on an existing instance, do a backup of your `.env` and `docker-" +"compose.yml` files and apply the following changes:" msgstr "" -#: ../../../CHANGELOG:3332 +#: ../../../CHANGELOG.md:3163 msgid "" -"Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the " +"Ensure `MEDIA_ROOT` is uncommented in your .env file and match the " "absolute path where media files are stored on your host " -"(``/srv/funkwhale/data/media`` by default)" +"(`/srv/funkwhale/data/media` by default)" msgstr "" -#: ../../../CHANGELOG:3334 +#: ../../../CHANGELOG.md:3165 msgid "" -"Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the " +"Ensure `STATIC_ROOT` is uncommented in your .env file and match the " "absolute path where static files are stored on your host " -"(``/srv/funkwhale/data/static`` by default)" +"(`/srv/funkwhale/data/static` by default)" msgstr "" -#: ../../../CHANGELOG:3338 +#: ../../../CHANGELOG.md:3167 msgid "If you use in-place import:" msgstr "" -#: ../../../CHANGELOG:3337 -msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``" +#: ../../../CHANGELOG.md:3168 +msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music`" msgstr "" -#: ../../../CHANGELOG:3338 +#: ../../../CHANGELOG.md:3169 msgid "" "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute " "path on your host were your music files are stored " -"(``/srv/funkwhale/data/music`` by default)" +"(`/srv/funkwhale/data/music` by default)" msgstr "" -#: ../../../CHANGELOG:3346 +#: ../../../CHANGELOG.md:3171 msgid "Edit your docker-compose.yml file to reflect the changes:" msgstr "" -#: ../../../CHANGELOG:3341 +#: ../../../CHANGELOG.md:3172 msgid "" "Search for volumes (there should be two occurrences) that contains " -"``/app/funkwhale_api/media`` on the right side, and replace the whole " -"line with ``- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"``" +"`/app/funkwhale_api/media` on the right side, and replace the whole line " +"with `- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"`" msgstr "" -#: ../../../CHANGELOG:3343 +#: ../../../CHANGELOG.md:3174 msgid "" -"Search for a volume that contains ``/app/staticfiles`` on the right side," -" and replace the whole line with ``- \"${STATIC_ROOT}:${STATIC_ROOT}\"``" +"Search for a volume that contains `/app/staticfiles` on the right side, " +"and replace the whole line with `- \"${STATIC_ROOT}:${STATIC_ROOT}\"`" msgstr "" -#: ../../../CHANGELOG:3345 +#: ../../../CHANGELOG.md:3176 msgid "" "If you use in-place import, search for volumes (there should be two " -"occurrences) that contains ``/music:ro`` on the right side, and replace " -"the whole line with ``- " -"\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"``" +"occurrences) that contains `/music:ro` on the right side, and replace the" +" whole line with `- " +"\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"`" msgstr "" -#: ../../../CHANGELOG:3348 +#: ../../../CHANGELOG.md:3179 msgid "" -"In the end, the ``volumes`` directives of your containers should look " -"like that::" +"In the end, the `volumes` directives of your containers should look like " +"that:" msgstr "" -#: ../../../CHANGELOG:3366 +#: ../../../CHANGELOG.md:3198 msgid "Removed Cacheops dependency" msgstr "" -#: ../../../CHANGELOG:3368 +#: ../../../CHANGELOG.md:3200 msgid "" "We removed one of our dependency named django-cacheops. It was unly used " "in a few places, and not playing nice with other dependencies." msgstr "" -#: ../../../CHANGELOG:3371 +#: ../../../CHANGELOG.md:3203 msgid "" -"You can safely remove this dependency in your environment with ``pip " -"uninstall django-cacheops`` if you're not using docker." +"You can safely remove this dependency in your environment with `pip " +"uninstall django-cacheops` if you're not using docker." msgstr "" -#: ../../../CHANGELOG:3374 +#: ../../../CHANGELOG.md:3206 msgid "" -"You can also safely remove any ``CACHEOPS_ENABLED`` setting from your " +"You can also safely remove any `CACHEOPS_ENABLED` setting from your " "environment file." msgstr "" -#: ../../../CHANGELOG:3378 +#: ../../../CHANGELOG.md:3208 msgid "0.15 (2018-06-24)" msgstr "" -#: ../../../CHANGELOG:3385 +#: ../../../CHANGELOG.md:3215 msgid "Added admin interface to manage import requests (#190)" msgstr "" -#: ../../../CHANGELOG:3386 +#: ../../../CHANGELOG.md:3216 msgid "" "Added replace flag during import to replace already present tracks with a" " new version of their track file (#222)" msgstr "" -#: ../../../CHANGELOG:3388 +#: ../../../CHANGELOG.md:3218 msgid "" "Funkwhale's front-end can now point to any instance (#327) Removed front-" "end and back-end coupling" msgstr "" -#: ../../../CHANGELOG:3390 +#: ../../../CHANGELOG.md:3220 msgid "Management interface for users (#212)" msgstr "" -#: ../../../CHANGELOG:3391 +#: ../../../CHANGELOG.md:3221 msgid "New invite system (#248) New invite system" msgstr "" -#: ../../../CHANGELOG:3396 +#: ../../../CHANGELOG.md:3225 msgid "Added \"TV\" to the list of highlighted words during YouTube import (#154)" msgstr "" -#: ../../../CHANGELOG:3397 +#: ../../../CHANGELOG.md:3226 msgid "Command line import now accepts unlimited args (#242)" msgstr "" -#: ../../../CHANGELOG:3402 +#: ../../../CHANGELOG.md:3230 msgid "Expose track files date in manage API (#307)" msgstr "" -#: ../../../CHANGELOG:3403 +#: ../../../CHANGELOG.md:3231 msgid "" "Fixed current track restart/hiccup when shuffling queue, deleting track " "from queue or reordering (#310)" msgstr "" -#: ../../../CHANGELOG:3405 +#: ../../../CHANGELOG.md:3233 msgid "Include user's current private playlists on playlist list (#302)" msgstr "" -#: ../../../CHANGELOG:3406 +#: ../../../CHANGELOG.md:3234 msgid "Remove link to generic radios, since they don't have detail pages (#324)" msgstr "" -#: ../../../CHANGELOG:3411 +#: ../../../CHANGELOG.md:3238 msgid "Document that Funkwhale may be installed with YunoHost (#325)" msgstr "" -#: ../../../CHANGELOG:3412 +#: ../../../CHANGELOG.md:3239 msgid "Documented a saner layout with symlinks for in-place imports (#254)" msgstr "" -#: ../../../CHANGELOG:3413 +#: ../../../CHANGELOG.md:3240 msgid "Upgrade documentation now use the correct user on non-docker setups (#265)" msgstr "" -#: ../../../CHANGELOG:3417 +#: ../../../CHANGELOG.md:3242 msgid "Invite system" msgstr "" -#: ../../../CHANGELOG:3419 +#: ../../../CHANGELOG.md:3244 msgid "" "On closed instances, it has always been a little bit painful to create " "accounts by hand for new users. This release solve that by adding " "invitations." msgstr "" -#: ../../../CHANGELOG:3422 +#: ../../../CHANGELOG.md:3247 msgid "" "You can generate invitation codes via the \"users\" admin interface " "(you'll find a link in the sidebar). Those codes are valid for 14 days, " @@ -6643,56 +6987,56 @@ msgid "" "registrations are closed." msgstr "" -#: ../../../CHANGELOG:3426 +#: ../../../CHANGELOG.md:3251 msgid "" "By default, we generate a random code for invitations, but you can also " "use custom codes if you need to print them or make them fancier ;)" msgstr "" -#: ../../../CHANGELOG:3429 +#: ../../../CHANGELOG.md:3254 msgid "" "Invitations generation and management requires the \"settings\" " "permission." msgstr "" -#: ../../../CHANGELOG:3433 +#: ../../../CHANGELOG.md:3256 msgid "Removed front-end and back-end coupling" msgstr "" -#: ../../../CHANGELOG:3435 +#: ../../../CHANGELOG.md:3258 msgid "" "Even though Funkwhale's front-end has always been a Single Page " "Application, talking to an API, it was only able to talk to an API on the" " same domain." msgstr "" -#: ../../../CHANGELOG:3438 +#: ../../../CHANGELOG.md:3261 msgid "" "There was no real technical justification behind this (only laziness), " "and it was also blocking interesting use cases:" msgstr "" -#: ../../../CHANGELOG:3441 +#: ../../../CHANGELOG.md:3264 msgid "Use multiple customized versions of the front-end with the same instance" msgstr "" -#: ../../../CHANGELOG:3442 +#: ../../../CHANGELOG.md:3265 msgid "Use a customized version of the front-end with multiple instances" msgstr "" -#: ../../../CHANGELOG:3443 +#: ../../../CHANGELOG.md:3266 msgid "" "Use a locally hosted front-end with a remote API, which is especially " "useful in development" msgstr "" -#: ../../../CHANGELOG:3445 +#: ../../../CHANGELOG.md:3268 msgid "" "From now on, Funkwhale's front-end can connect to any Funkwhale server. " "You can change the server you are connecting to in the footer." msgstr "" -#: ../../../CHANGELOG:3448 +#: ../../../CHANGELOG.md:3271 msgid "" "Fixing this also unlocked a really interesting feature in our " "development/review workflow: by leveraging Gitlab CI and review apps, we " @@ -6701,96 +7045,96 @@ msgid "" " the need to install a local environment." msgstr "" -#: ../../../CHANGELOG:3455 +#: ../../../CHANGELOG.md:3276 msgid "0.14.2 (2018-06-16)" msgstr "" -#: ../../../CHANGELOG:3459 +#: ../../../CHANGELOG.md:3279 msgid "" "This release contains a fix for a permission issue. You should upgrade as" " soon as possible. Read the changelog below for more details." msgstr "" -#: ../../../CHANGELOG:3467 +#: ../../../CHANGELOG.md:3288 msgid "Added feedback on shuffle button (#262)" msgstr "" -#: ../../../CHANGELOG:3468 +#: ../../../CHANGELOG.md:3289 msgid "" "Added multiple warnings in the documentation that you should never run " "makemigrations yourself (#291)" msgstr "" -#: ../../../CHANGELOG:3470 +#: ../../../CHANGELOG.md:3291 msgid "Album cover served in http (#264)" msgstr "" -#: ../../../CHANGELOG:3471 +#: ../../../CHANGELOG.md:3292 msgid "" "Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25)" " (!252)" msgstr "" -#: ../../../CHANGELOG:3473 +#: ../../../CHANGELOG.md:3294 msgid "Display file size in human format during file upload (#289)" msgstr "" -#: ../../../CHANGELOG:3474 +#: ../../../CHANGELOG.md:3295 msgid "Switch from BSD-3 licence to AGPL-3 licence (#280)" msgstr "" -#: ../../../CHANGELOG:3478 +#: ../../../CHANGELOG.md:3299 msgid "Ensure radios can only be edited and deleted by their owners (#311)" msgstr "" -#: ../../../CHANGELOG:3479 +#: ../../../CHANGELOG.md:3300 msgid "Fixed admin menu not showing after login (#245)" msgstr "" -#: ../../../CHANGELOG:3480 +#: ../../../CHANGELOG.md:3301 msgid "Fixed broken pagination in Subsonic API (#295)" msgstr "" -#: ../../../CHANGELOG:3481 +#: ../../../CHANGELOG.md:3302 msgid "Fixed duplicated websocket connection on timeline (#287)" msgstr "" -#: ../../../CHANGELOG:3486 +#: ../../../CHANGELOG.md:3306 msgid "Improved documentation about in-place imports setup (#298)" msgstr "" -#: ../../../CHANGELOG:3491 +#: ../../../CHANGELOG.md:3310 msgid "" "Added Black and flake8 checks in CI to ensure consistent code styling and" " formatting (#297)" msgstr "" -#: ../../../CHANGELOG:3493 +#: ../../../CHANGELOG.md:3312 msgid "Added bug and feature issue templates (#299)" msgstr "" -#: ../../../CHANGELOG:3497 +#: ../../../CHANGELOG.md:3314 msgid "Permission issues on radios" msgstr "" -#: ../../../CHANGELOG:3499 +#: ../../../CHANGELOG.md:3316 msgid "" "Because of an error in the way we checked user permissions on radios, " "public radios could be deleted by any logged-in user, even if they were " "not the owner of the radio." msgstr "" -#: ../../../CHANGELOG:3503 +#: ../../../CHANGELOG.md:3320 msgid "" "We recommend instances owners to upgrade as fast as possible to avoid any" " abuse and data loss." msgstr "" -#: ../../../CHANGELOG:3508 +#: ../../../CHANGELOG.md:3323 msgid "Funkwhale is now licenced under AGPL-3" msgstr "" -#: ../../../CHANGELOG:3510 +#: ../../../CHANGELOG.md:3325 msgid "" "Following the recent switch made by PixelFed " "(https://github.com/dansup/pixelfed/issues/143), we decided along with " @@ -6798,48 +7142,48 @@ msgid "" "this switch for various reasons:" msgstr "" -#: ../../../CHANGELOG:3515 +#: ../../../CHANGELOG.md:3330 msgid "This is better aligned with other fediverse software" msgstr "" -#: ../../../CHANGELOG:3516 +#: ../../../CHANGELOG.md:3331 msgid "" "It prohibits anyone to distribute closed-source and proprietary forks of " "Funkwhale" msgstr "" -#: ../../../CHANGELOG:3518 +#: ../../../CHANGELOG.md:3333 msgid "" "As end users and instance owners, this does not change anything. You can " "continue to use Funkwhale exactly as you did before :)" msgstr "" -#: ../../../CHANGELOG:3523 +#: ../../../CHANGELOG.md:3336 msgid "Apache support for websocket" msgstr "" -#: ../../../CHANGELOG:3525 +#: ../../../CHANGELOG.md:3338 msgid "" "Up until now, our Apache2 configuration was not working with websockets. " "This is now solved by adding this at the beginning of your Apache2 " -"configuration file::" +"configuration file:" msgstr "" -#: ../../../CHANGELOG:3530 -msgid "And this, before the \"/api\" block::" +#: ../../../CHANGELOG.md:3345 +msgid "And this, before the \"/api\" block:" msgstr "" -#: ../../../CHANGELOG:3535 +#: ../../../CHANGELOG.md:3352 msgid "" "Websockets may not be supported in older versions of Apache2. Be sure to " "upgrade to the latest version available." msgstr "" -#: ../../../CHANGELOG:3539 +#: ../../../CHANGELOG.md:3354 msgid "Serving album covers in https (Apache2 proxy)" msgstr "" -#: ../../../CHANGELOG:3541 +#: ../../../CHANGELOG.md:3356 msgid "" "Two issues are addressed here. The first one was about Django replying " "with mixed content (http) when queried for covers. Setting up the `X" @@ -6847,100 +7191,100 @@ msgid "" "and that the reply must be https as well." msgstr "" -#: ../../../CHANGELOG:3546 +#: ../../../CHANGELOG.md:3361 msgid "" "Second issue was a problem of permission causing Apache a denied access " "to album cover folder. It is solved by adding another block for this path" " in the Apache configuration file for funkwhale." msgstr "" -#: ../../../CHANGELOG:3550 -msgid "Here is how to modify your `funkwhale.conf` apache2 configuration::" +#: ../../../CHANGELOG.md:3365 +msgid "Here is how to modify your `funkwhale.conf` apache2 configuration:" msgstr "" -#: ../../../CHANGELOG:3571 +#: ../../../CHANGELOG.md:3385 msgid "About the makemigrations warning" msgstr "" -#: ../../../CHANGELOG:3573 -msgid "You may sometimes get the following warning while applying migrations::" +#: ../../../CHANGELOG.md:3387 +msgid "You may sometimes get the following warning while applying migrations:" msgstr "" -#: ../../../CHANGELOG:3577 +#: ../../../CHANGELOG.md:3393 msgid "" "This is a warning, not an error, and it can be safely ignored. Never run " -"the ``makemigrations`` command yourself." +"the `makemigrations` command yourself." msgstr "" -#: ../../../CHANGELOG:3582 +#: ../../../CHANGELOG.md:3396 msgid "0.14.1 (2018-06-06)" msgstr "" -#: ../../../CHANGELOG:3588 +#: ../../../CHANGELOG.md:3402 msgid "Display server version in the footer (#270)" msgstr "" -#: ../../../CHANGELOG:3589 +#: ../../../CHANGELOG.md:3403 msgid "" "fix_track_files will now update files with bad mimetype (and not only the" " one with no mimetype) (#273)" msgstr "" -#: ../../../CHANGELOG:3591 +#: ../../../CHANGELOG.md:3405 msgid "" "Huge performance boost (~x5 to x7) during CLI import that queries " "MusicBrainz (#288)" msgstr "" -#: ../../../CHANGELOG:3593 +#: ../../../CHANGELOG.md:3407 msgid "Removed alpha-state transcoding support (#271)" msgstr "" -#: ../../../CHANGELOG:3597 +#: ../../../CHANGELOG.md:3411 msgid "Broken logging statement during import error (#274)" msgstr "" -#: ../../../CHANGELOG:3598 +#: ../../../CHANGELOG.md:3412 msgid "Broken search bar on library home (#278)" msgstr "" -#: ../../../CHANGELOG:3599 +#: ../../../CHANGELOG.md:3413 msgid "" "Do not crash when importing track with an artist that do not match the " "release artist (#237)" msgstr "" -#: ../../../CHANGELOG:3601 +#: ../../../CHANGELOG.md:3415 msgid "Do not crash when tag contains multiple uuids with a / separator (#267)" msgstr "" -#: ../../../CHANGELOG:3602 +#: ../../../CHANGELOG.md:3416 msgid "Ensure we do not store bad mimetypes (such as application/x-empty) (#266)" msgstr "" -#: ../../../CHANGELOG:3603 +#: ../../../CHANGELOG.md:3417 msgid "Fix broken \"play all\" button that played only 25 tracks (#281)" msgstr "" -#: ../../../CHANGELOG:3604 +#: ../../../CHANGELOG.md:3418 msgid "Fixed broken track download modal (overflow and wrong URL) (#239)" msgstr "" -#: ../../../CHANGELOG:3605 +#: ../../../CHANGELOG.md:3419 msgid "Removed hardcoded size limit in file upload widget (#275)" msgstr "" -#: ../../../CHANGELOG:3610 +#: ../../../CHANGELOG.md:3423 msgid "" -"Added warning about _protected/music location in nginx configuration " +"Added warning about \\_protected/music location in nginx configuration " "(#247)" msgstr "" -#: ../../../CHANGELOG:3614 +#: ../../../CHANGELOG.md:3425 msgid "Removed alpha-state transcoding (#271)" msgstr "" -#: ../../../CHANGELOG:3616 +#: ../../../CHANGELOG.md:3427 msgid "" "A few months ago, a basic transcoding feature was implemented. Due to the" " way this feature was designed, it was slow, CPU intensive on the server " @@ -6949,170 +7293,161 @@ msgid "" "with Subsonic clients." msgstr "" -#: ../../../CHANGELOG:3621 +#: ../../../CHANGELOG.md:3432 msgid "" "Based on that, we're currently removing support for transcoding **in its " "current state**. The work on a better designed transcoding feature can be" " tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272." msgstr "" -#: ../../../CHANGELOG:3625 +#: ../../../CHANGELOG.md:3436 msgid "" "You don't have to do anything on your side, but you may want to remove " -"the now obsolete configuration from your reverse proxy file (nginx " -"only)::" +"the now obsolete configuration from your reverse proxy file (nginx only):" msgstr "" -#: ../../../CHANGELOG:3670 +#: ../../../CHANGELOG.md:3481 msgid "0.14 (2018-06-02)" msgstr "" -#: ../../../CHANGELOG:3673 ../../../CHANGELOG:3877 ../../../CHANGELOG:3998 -msgid "Upgrade instructions are available at" -msgstr "" - -#: ../../../CHANGELOG:3673 ../../../CHANGELOG:3877 ../../../CHANGELOG:3998 -msgid "https://docs.funkwhale.audio/upgrading.html" -msgstr "" - -#: ../../../CHANGELOG:3677 +#: ../../../CHANGELOG.md:3488 msgid "" "Admins can now configure default permissions that will be granted to all " "registered users (#236)" msgstr "" -#: ../../../CHANGELOG:3679 +#: ../../../CHANGELOG.md:3490 msgid "Files management interface for users with \"library\" permission (#223)" msgstr "" -#: ../../../CHANGELOG:3680 +#: ../../../CHANGELOG.md:3491 msgid "" "New action table component for quick and efficient batch actions (#228) " "This is implemented on the federated tracks pages, but will be included " "in other pages as well depending on the feedback." msgstr "" -#: ../../../CHANGELOG:3687 +#: ../../../CHANGELOG.md:3497 msgid "" "Added a new \"upload\" permission that allows user to launch import and " "view their own imports (#230)" msgstr "" -#: ../../../CHANGELOG:3689 +#: ../../../CHANGELOG.md:3499 msgid "Added Support for OggTheora in import." msgstr "" -#: ../../../CHANGELOG:3690 +#: ../../../CHANGELOG.md:3500 msgid "Autoremove media files on model instance deletion (#241)" msgstr "" -#: ../../../CHANGELOG:3691 +#: ../../../CHANGELOG.md:3501 msgid "" "Can now import a whole remote library at once thanks to new Action Table " "component (#164)" msgstr "" -#: ../../../CHANGELOG:3693 +#: ../../../CHANGELOG.md:3503 msgid "" "Can now use album covers from flac/mp3 metadata and separate file in " "track directory (#219)" msgstr "" -#: ../../../CHANGELOG:3695 +#: ../../../CHANGELOG.md:3505 msgid "Implemented getCovertArt in Subsonic API to serve album covers (#258)" msgstr "" -#: ../../../CHANGELOG:3696 +#: ../../../CHANGELOG.md:3506 msgid "" "Implemented scrobble endpoint of subsonic API, listenings are now tracked" " correctly from third party apps that use this endpoint (#260)" msgstr "" -#: ../../../CHANGELOG:3698 +#: ../../../CHANGELOG.md:3508 msgid "" "Retructured music API to increase performance and remove useless " "endpoints (#224)" msgstr "" -#: ../../../CHANGELOG:3704 +#: ../../../CHANGELOG.md:3513 msgid "Consistent constraints/checks for URL size (#207)" msgstr "" -#: ../../../CHANGELOG:3705 +#: ../../../CHANGELOG.md:3514 msgid "Display proper total number of tracks on radio detail (#225)" msgstr "" -#: ../../../CHANGELOG:3706 +#: ../../../CHANGELOG.md:3515 msgid "Do not crash on flac import if musicbrainz tags are missing (#214)" msgstr "" -#: ../../../CHANGELOG:3707 +#: ../../../CHANGELOG.md:3516 msgid "Empty save button in radio builder (#226)" msgstr "" -#: ../../../CHANGELOG:3708 +#: ../../../CHANGELOG.md:3517 msgid "" "Ensure anonymous users can use the app if the instance is configured " "accordingly (#229)" msgstr "" -#: ../../../CHANGELOG:3710 +#: ../../../CHANGELOG.md:3519 msgid "" "Ensure inactive users cannot get auth tokens (#218) This was already the " "case bug we missed some checks" msgstr "" -#: ../../../CHANGELOG:3712 +#: ../../../CHANGELOG.md:3521 msgid "File-upload import now supports Flac files (#213)" msgstr "" -#: ../../../CHANGELOG:3713 +#: ../../../CHANGELOG.md:3522 msgid "" "File-upload importer should now work properly, assuming files are tagged " "(#106)" msgstr "" -#: ../../../CHANGELOG:3715 +#: ../../../CHANGELOG.md:3524 msgid "Fixed a few broken translations strings (#227)" msgstr "" -#: ../../../CHANGELOG:3716 +#: ../../../CHANGELOG.md:3525 msgid "Fixed broken ordering in front-end lists (#179)" msgstr "" -#: ../../../CHANGELOG:3717 +#: ../../../CHANGELOG.md:3526 msgid "Fixed ignored page_size parameter on artist and favorites list (#240)" msgstr "" -#: ../../../CHANGELOG:3718 +#: ../../../CHANGELOG.md:3527 msgid "Read ID3Tag Tracknumber from TRCK (#220)" msgstr "" -#: ../../../CHANGELOG:3719 +#: ../../../CHANGELOG.md:3528 msgid "We now fetch album covers regardless of the import methods (#231)" msgstr "" -#: ../../../CHANGELOG:3723 +#: ../../../CHANGELOG.md:3532 msgid "" "Added missing subsonic configuration block in deployment vhost files " "(#249)" msgstr "" -#: ../../../CHANGELOG:3724 +#: ../../../CHANGELOG.md:3533 msgid "Moved upgrade doc under install doc in TOC (#251)" msgstr "" -#: ../../../CHANGELOG:3729 +#: ../../../CHANGELOG.md:3537 msgid "" "Removed acoustid support, as the integration was buggy and error-prone " "(#106)" msgstr "" -#: ../../../CHANGELOG:3733 +#: ../../../CHANGELOG.md:3539 msgid "Files management interface" msgstr "" -#: ../../../CHANGELOG:3735 +#: ../../../CHANGELOG.md:3541 msgid "" "This is the first bit of an ongoing work that will span several releases," " to bring more powerful library management features to Funkwhale. This " @@ -7121,11 +7456,11 @@ msgid "" "using various criteria (size, bitrate, duration...) and delete them." msgstr "" -#: ../../../CHANGELOG:3742 +#: ../../../CHANGELOG.md:3547 msgid "New \"upload\" permission" msgstr "" -#: ../../../CHANGELOG:3744 +#: ../../../CHANGELOG.md:3549 msgid "" "This new permission is helpful if you want to give upload/import rights " "to some users, but don't want them to be able to manage the library as a " @@ -7134,7 +7469,7 @@ msgid "" "artists, files, etc." msgstr "" -#: ../../../CHANGELOG:3750 +#: ../../../CHANGELOG.md:3555 msgid "" "Because of that, users with the \"library\" permission will have much " "more power, and will also be able to remove content from the platform. On" @@ -7142,7 +7477,7 @@ msgid "" "ability to add new content." msgstr "" -#: ../../../CHANGELOG:3755 +#: ../../../CHANGELOG.md:3560 msgid "" "Also, this release also includes a new feature called \"default " "permissions\": those are permissions that are granted to every users on " @@ -7152,11 +7487,11 @@ msgid "" "user." msgstr "" -#: ../../../CHANGELOG:3762 +#: ../../../CHANGELOG.md:3566 msgid "Smarter album cover importer" msgstr "" -#: ../../../CHANGELOG:3764 +#: ../../../CHANGELOG.md:3568 msgid "" "In earlier versions, covers where only imported when launching a YouTube " "import. Starting from this release, covers will be imported regardless of" @@ -7164,43 +7499,43 @@ msgid "" "will look for covers in the following order:" msgstr "" -#: ../../../CHANGELOG:3769 +#: ../../../CHANGELOG.md:3573 msgid "In the imported file itself (FLAC/MP3 only)" msgstr "" -#: ../../../CHANGELOG:3770 +#: ../../../CHANGELOG.md:3574 msgid "In a cover.jpg or cover.png in the file directory" msgstr "" -#: ../../../CHANGELOG:3771 +#: ../../../CHANGELOG.md:3575 msgid "" "By fetching cover art from Musibrainz, assuming the file is tagged " "correctly" msgstr "" -#: ../../../CHANGELOG:3773 +#: ../../../CHANGELOG.md:3577 msgid "" "This will only work for newly imported tracks and albums though. In the " "future, we may offer an option to refetch album covers from the " "interface, but in the meantime, you can use the following snippet:" msgstr "" -#: ../../../CHANGELOG:3791 -msgid "Then launch it::" +#: ../../../CHANGELOG.md:3595 +msgid "Then launch it:" msgstr "" -#: ../../../CHANGELOG:3806 +#: ../../../CHANGELOG.md:3611 msgid "" "Depending on your number of albums, the previous snippet may take some " "time to execute. You can interrupt it at any time using ctrl-c and " "relaunch it later, as it's idempotent." msgstr "" -#: ../../../CHANGELOG:3811 +#: ../../../CHANGELOG.md:3616 msgid "Music API changes" msgstr "" -#: ../../../CHANGELOG:3813 +#: ../../../CHANGELOG.md:3618 msgid "" "This release includes an API break. Even though the API is advertised as " "unstable, and not documented, here is a brief explanation of the change " @@ -7208,66 +7543,66 @@ msgid "" "changes:" msgstr "" -#: ../../../CHANGELOG:3817 +#: ../../../CHANGELOG.md:3622 msgid "" -"``/api/v1/artists`` does not includes a list of tracks anymore. It was to" -" heavy to return all of this data all the time. You can get all tracks " -"for an artist using ``/api/v1/tracks?artist=artist_id``" +"`/api/v1/artists` does not includes a list of tracks anymore. It was to " +"heavy to return all of this data all the time. You can get all tracks for" +" an artist using `/api/v1/tracks?artist=artist_id`" msgstr "" -#: ../../../CHANGELOG:3820 +#: ../../../CHANGELOG.md:3625 msgid "" -"Additionally, ``/api/v1/tracks`` now support an ``album`` filter to " -"filter tracks matching an album" +"Additionally, `/api/v1/tracks` now support an `album` filter to filter " +"tracks matching an album" msgstr "" -#: ../../../CHANGELOG:3822 +#: ../../../CHANGELOG.md:3627 msgid "" -"``/api/v1/artists/search``, ``/api/v1/albums/search`` and " -"``/api/v1/tracks/search`` endpoints are removed. Use " -"``/api/v1/{artists|albums|tracks}/?q=yourquery`` instead. It's also more " +"`/api/v1/artists/search`, `/api/v1/albums/search` and " +"`/api/v1/tracks/search` endpoints are removed. Use " +"`/api/v1/{artists|albums|tracks}/?q=yourquery` instead. It's also more " "powerful, since you can combine search with other filters and ordering " "options." msgstr "" -#: ../../../CHANGELOG:3826 +#: ../../../CHANGELOG.md:3631 msgid "" -"``/api/v1/requests/import-requests/search`` endpoint is removed as well. " -"Use ``/api/v1/requests/import-requests/?q=yourquery`` instead. It's also " +"`/api/v1/requests/import-requests/search` endpoint is removed as well. " +"Use `/api/v1/requests/import-requests/?q=yourquery` instead. It's also " "more powerful, since you can combine search with other filters and " "ordering options." msgstr "" -#: ../../../CHANGELOG:3831 +#: ../../../CHANGELOG.md:3636 msgid "" "Of course, the front-end was updated to work with the new API, so this " "should not impact end-users in any way, apart from slight performance " "gains." msgstr "" -#: ../../../CHANGELOG:3836 +#: ../../../CHANGELOG.md:3640 msgid "" "The API is still not stable and may evolve again in the future. API " "freeze will come at a later point." msgstr "" -#: ../../../CHANGELOG:3840 +#: ../../../CHANGELOG.md:3644 msgid "Flac files imports via upload" msgstr "" -#: ../../../CHANGELOG:3842 +#: ../../../CHANGELOG.md:3646 msgid "" "You have nothing to do to benefit from this, however, since Flac files " "tend to be a lot bigger than other files, you may want to increase the " -"``client_max_body_size`` value in your Nginx configuration if you plan to" -" upload flac files." +"`client_max_body_size` value in your Nginx configuration if you plan to " +"upload flac files." msgstr "" -#: ../../../CHANGELOG:3848 +#: ../../../CHANGELOG.md:3651 msgid "Missing subsonic configuration block in vhost files" msgstr "" -#: ../../../CHANGELOG:3850 +#: ../../../CHANGELOG.md:3653 msgid "" "Because of a missing block in the sample Nginx and Apache configurations," " instances that were deployed after the 0.13 release are likely to be " @@ -7275,85 +7610,85 @@ msgid "" "documented in the changelog)." msgstr "" -#: ../../../CHANGELOG:3855 +#: ../../../CHANGELOG.md:3658 msgid "" "Ensure you have the following snippets in your Nginx or Apache " "configuration if you plan to use the Subsonic API." msgstr "" -#: ../../../CHANGELOG:3858 -msgid "Nginx::" +#: ../../../CHANGELOG.md:3661 +msgid "Nginx:" msgstr "" -#: ../../../CHANGELOG:3865 -msgid "Apache2::" +#: ../../../CHANGELOG.md:3670 +msgid "Apache2:" msgstr "" -#: ../../../CHANGELOG:3874 +#: ../../../CHANGELOG.md:3679 msgid "0.13 (2018-05-19)" msgstr "" -#: ../../../CHANGELOG:3881 +#: ../../../CHANGELOG.md:3686 msgid "Can now import and play flac files (#157)" msgstr "" -#: ../../../CHANGELOG:3882 +#: ../../../CHANGELOG.md:3687 msgid "Simpler permission system (#152)" msgstr "" -#: ../../../CHANGELOG:3883 +#: ../../../CHANGELOG.md:3688 msgid "Store file length, size and bitrate (#195)" msgstr "" -#: ../../../CHANGELOG:3884 +#: ../../../CHANGELOG.md:3689 msgid "" "We now have a brand new instance settings interface in the front-end " "(#206)" msgstr "" -#: ../../../CHANGELOG:3889 +#: ../../../CHANGELOG.md:3693 msgid "Disabled browsable HTML API in production (#205)" msgstr "" -#: ../../../CHANGELOG:3890 +#: ../../../CHANGELOG.md:3694 msgid "" "Instances can now indicate on the nodeinfo endpoint if they want to " "remain private (#200)" msgstr "" -#: ../../../CHANGELOG:3896 +#: ../../../CHANGELOG.md:3699 msgid "" ".well-known/nodeinfo endpoint can now answer to request with Accept: " "application/json (#197)" msgstr "" -#: ../../../CHANGELOG:3898 +#: ../../../CHANGELOG.md:3701 msgid "Fixed escaping issue of track name in playlist modal (#201)" msgstr "" -#: ../../../CHANGELOG:3899 +#: ../../../CHANGELOG.md:3702 msgid "Fixed missing dot when downloading file (#204)" msgstr "" -#: ../../../CHANGELOG:3900 +#: ../../../CHANGELOG.md:3703 msgid "" "In-place imported tracks with non-ascii characters don't break reverse-" "proxy serving (#196)" msgstr "" -#: ../../../CHANGELOG:3902 +#: ../../../CHANGELOG.md:3705 msgid "Removed Python 3.6 dependency (secrets module) (#198)" msgstr "" -#: ../../../CHANGELOG:3903 +#: ../../../CHANGELOG.md:3706 msgid "Uplayable tracks are now properly disabled in the interface (#199)" msgstr "" -#: ../../../CHANGELOG:3907 +#: ../../../CHANGELOG.md:3708 msgid "Instance settings interface" msgstr "" -#: ../../../CHANGELOG:3909 +#: ../../../CHANGELOG.md:3710 msgid "" "Prior to this release, the only way to update instance settings (such as " "instance description, signup policy, federation configuration, etc.) was " @@ -7361,46 +7696,46 @@ msgid "" "which power the API)." msgstr "" -#: ../../../CHANGELOG:3913 +#: ../../../CHANGELOG.md:3714 msgid "This interface worked, but was not really-user friendly and intuitive." msgstr "" -#: ../../../CHANGELOG:3915 +#: ../../../CHANGELOG.md:3716 msgid "" "Starting from this release, we now offer a dedicated interface directly " "in the front-end. You can view and edit all your instance settings from " "here, assuming you have the required permissions." msgstr "" -#: ../../../CHANGELOG:3919 +#: ../../../CHANGELOG.md:3720 msgid "" -"This interface is available at ``/manage/settings`` and via link in the " +"This interface is available at `/manage/settings` and via link in the " "sidebar." msgstr "" -#: ../../../CHANGELOG:3923 +#: ../../../CHANGELOG.md:3722 msgid "Storage of bitrate, size and length in database" msgstr "" -#: ../../../CHANGELOG:3925 +#: ../../../CHANGELOG.md:3724 msgid "" "Starting with this release, when importing files, Funkwhale will store " "additional information about audio files:" msgstr "" -#: ../../../CHANGELOG:3928 +#: ../../../CHANGELOG.md:3727 msgid "Bitrate" msgstr "" -#: ../../../CHANGELOG:3929 +#: ../../../CHANGELOG.md:3728 msgid "Size (in bytes)" msgstr "" -#: ../../../CHANGELOG:3930 +#: ../../../CHANGELOG.md:3729 msgid "Duration" msgstr "" -#: ../../../CHANGELOG:3932 +#: ../../../CHANGELOG.md:3731 msgid "" "This change is not retroactive, meaning already imported files will lack " "those information. The interface and API should work as before in such " @@ -7408,15 +7743,7 @@ msgid "" "the missing values." msgstr "" -#: ../../../CHANGELOG:3936 ../../../CHANGELOG:3976 -msgid "On docker setups:" -msgstr "" - -#: ../../../CHANGELOG:3943 ../../../CHANGELOG:3982 -msgid "On non-docker setups:" -msgstr "" - -#: ../../../CHANGELOG:3952 +#: ../../../CHANGELOG.md:3749 msgid "" "The execution time for this command is proportional to the number of " "audio files stored on your instance. This is because we need to read the " @@ -7424,87 +7751,87 @@ msgid "" " Funkwhale is up." msgstr "" -#: ../../../CHANGELOG:3957 +#: ../../../CHANGELOG.md:3754 msgid "" "It's also safe to interrupt this command and rerun it at a later point, " "or run it multiple times." msgstr "" -#: ../../../CHANGELOG:3960 +#: ../../../CHANGELOG.md:3757 msgid "Use the --dry-run flag to check how many files would be impacted." msgstr "" -#: ../../../CHANGELOG:3964 +#: ../../../CHANGELOG.md:3760 msgid "Simpler permission system" msgstr "" -#: ../../../CHANGELOG:3966 +#: ../../../CHANGELOG.md:3762 msgid "" "Starting from this release, the permission system is much simpler. Up " "until now, we were using Django's built-in permission system, which was " "working, but also quite complex to deal with." msgstr "" -#: ../../../CHANGELOG:3970 +#: ../../../CHANGELOG.md:3766 msgid "" "The new implementation relies on simpler logic, which will make " "integration on the front-end in upcoming releases faster and easier." msgstr "" -#: ../../../CHANGELOG:3973 +#: ../../../CHANGELOG.md:3769 msgid "" "If you have manually given permissions to users on your instance, you can" " migrate those to the new system." msgstr "" -#: ../../../CHANGELOG:3989 +#: ../../../CHANGELOG.md:3785 msgid "" "There is still no dedicated interface to manage user permissions, but you" -" can use the admin interface at ``/api/admin/users/user/`` for that " -"purpose in the meantime." +" can use the admin interface at `/api/admin/users/user/` for that purpose" +" in the meantime." msgstr "" -#: ../../../CHANGELOG:3995 +#: ../../../CHANGELOG.md:3789 msgid "0.12 (2018-05-09)" msgstr "" -#: ../../../CHANGELOG:4002 +#: ../../../CHANGELOG.md:3796 msgid "" "Subsonic API implementation to offer compatibility with existing clients " "such as DSub (#75)" msgstr "" -#: ../../../CHANGELOG:4004 +#: ../../../CHANGELOG.md:3798 msgid "Use nodeinfo standard for publishing instance information (#192)" msgstr "" -#: ../../../CHANGELOG:4009 +#: ../../../CHANGELOG.md:3802 msgid "" "Play button now play tracks immediately instead of appending them to the " "queue (#99, #156)" msgstr "" -#: ../../../CHANGELOG:4015 +#: ../../../CHANGELOG.md:3807 msgid "Fix broken federated import (#193)" msgstr "" -#: ../../../CHANGELOG:4020 +#: ../../../CHANGELOG.md:3811 msgid "" "Up-to-date documentation for upgrading front-end files on docker setup " "(#132)" msgstr "" -#: ../../../CHANGELOG:4024 +#: ../../../CHANGELOG.md:3813 msgid "Subsonic API" msgstr "" -#: ../../../CHANGELOG:4026 +#: ../../../CHANGELOG.md:3815 msgid "" "This release implements some core parts of the Subsonic API, which is " "widely deployed in various projects and supported by numerous clients." msgstr "" -#: ../../../CHANGELOG:4029 +#: ../../../CHANGELOG.md:3818 msgid "" "By offering this API in Funkwhale, we make it possible to access the " "instance library and listen to the music without from existing Subsonic " @@ -7512,40 +7839,40 @@ msgid "" " every platform." msgstr "" -#: ../../../CHANGELOG:4033 +#: ../../../CHANGELOG.md:3822 msgid "" "Most advanced Subsonic clients support offline caching of music files, " "playlist management and search, which makes them well-suited for nomadic " "use." msgstr "" -#: ../../../CHANGELOG:4036 +#: ../../../CHANGELOG.md:3825 msgid "" -"Please see `our list of supported apps " -"<https://funkwhale.audio/en_US/apps>`_ for more information about " +"Please see [our list of supported " +"apps](https://funkwhale.audio/en_US/apps) for more information about " "supported clients and user instructions." msgstr "" -#: ../../../CHANGELOG:4039 +#: ../../../CHANGELOG.md:3828 msgid "" "At the instance-level, the Subsonic API is enabled by default, but " "require and additional endpoint to be added in you reverse-proxy " "configuration." msgstr "" -#: ../../../CHANGELOG:4042 -msgid "On nginx, add the following block::" +#: ../../../CHANGELOG.md:3831 +msgid "On nginx, add the following block:" msgstr "" -#: ../../../CHANGELOG:4049 -msgid "On Apache, add the following block::" +#: ../../../CHANGELOG.md:3840 +msgid "On Apache, add the following block:" msgstr "" -#: ../../../CHANGELOG:4056 +#: ../../../CHANGELOG.md:3849 msgid "The Subsonic can be disabled at the instance level from the django admin." msgstr "" -#: ../../../CHANGELOG:4060 +#: ../../../CHANGELOG.md:3852 msgid "" "Because of Subsonic's API design which assumes cleartext storing of user " "passwords, we chose to have a dedicated, separate password for that " @@ -7553,25 +7880,25 @@ msgid "" " web client." msgstr "" -#: ../../../CHANGELOG:4067 +#: ../../../CHANGELOG.md:3858 msgid "Nodeinfo standard for instance information and stats" msgstr "" -#: ../../../CHANGELOG:4071 +#: ../../../CHANGELOG.md:3861 msgid "" "The ``/api/v1/instance/stats/`` endpoint which was used to display " "instance data in the about page is removed in favor of the new " "``/api/v1/instance/nodeinfo/2.0/`` endpoint." msgstr "" -#: ../../../CHANGELOG:4075 +#: ../../../CHANGELOG.md:3866 msgid "" "In earlier version, we where using a custom endpoint and format for our " "instance information and statistics. While this was working, this was not" " compatible with anything else on the fediverse." msgstr "" -#: ../../../CHANGELOG:4079 +#: ../../../CHANGELOG.md:3870 msgid "" "We now offer a nodeinfo 2.0 endpoint which provides, in a single place, " "all the instance information such as library and user activity " @@ -7579,18 +7906,18 @@ msgid "" "federation status, etc.)." msgstr "" -#: ../../../CHANGELOG:4083 +#: ../../../CHANGELOG.md:3874 msgid "We offer two settings to manage nodeinfo in your Funkwhale instance:" msgstr "" -#: ../../../CHANGELOG:4085 +#: ../../../CHANGELOG.md:3876 msgid "" "One setting to completely disable nodeinfo, but this is not recommended " "as the exposed data may be needed to make some parts of the front-end " "work (especially the about page)." msgstr "" -#: ../../../CHANGELOG:4088 +#: ../../../CHANGELOG.md:3879 msgid "" "One setting to disable only usage and library statistics in the nodeinfo " "endpoint. This is useful if you want the nodeinfo endpoint to work, but " @@ -7598,42 +7925,42 @@ msgid "" "and user activity." msgstr "" -#: ../../../CHANGELOG:4093 +#: ../../../CHANGELOG.md:3884 msgid "" "To make your instance fully compatible with the nodeinfo protocol, you " -"need to to edit your nginx configuration file::" +"need to to edit your nginx configuration file:" msgstr "" -#: ../../../CHANGELOG:4112 -msgid "You can do the same if you use apache::" +#: ../../../CHANGELOG.md:3905 +msgid "You can do the same if you use apache:" msgstr "" -#: ../../../CHANGELOG:4130 +#: ../../../CHANGELOG.md:3925 msgid "" "This will ensure all well-known endpoints are proxied to funkwhale, and " "not just webfinger one." msgstr "" -#: ../../../CHANGELOG:4133 +#: ../../../CHANGELOG.md:3928 msgid "Links:" msgstr "" -#: ../../../CHANGELOG:4135 +#: ../../../CHANGELOG.md:3930 msgid "About nodeinfo: https://github.com/jhass/nodeinfo" msgstr "" -#: ../../../CHANGELOG:4139 +#: ../../../CHANGELOG.md:3932 msgid "0.11 (2018-05-06)" msgstr "" -#: ../../../CHANGELOG:4143 +#: ../../../CHANGELOG.md:3936 msgid "" "Special thanks for this release go to @renon:matrix.org (@Hazmo on " "Gitlab) for bringing Apache2 support to Funkwhale and contributing on " "other issues. Thank you!" msgstr "" -#: ../../../CHANGELOG:4149 +#: ../../../CHANGELOG.md:3942 msgid "" "Funkwhale now works behind an Apache2 reverse proxy (!165) check out the " "brand new documentation at " @@ -7641,270 +7968,269 @@ msgid "" "to try it!" msgstr "" -#: ../../../CHANGELOG:4152 +#: ../../../CHANGELOG.md:3945 msgid "" "Users can now request password reset by email, assuming a SMTP server was" " correctly configured (#187)" msgstr "" -#: ../../../CHANGELOG:4157 +#: ../../../CHANGELOG.md:3950 msgid "" "Added a fix_track_files command to run checks and fixes against library " "(#183)" msgstr "" -#: ../../../CHANGELOG:4159 +#: ../../../CHANGELOG.md:3952 msgid "Avoid fetching Actor object on every request authentication" msgstr "" -#: ../../../CHANGELOG:4160 +#: ../../../CHANGELOG.md:3953 msgid "Can now relaunch errored jobs and batches (#176)" msgstr "" -#: ../../../CHANGELOG:4161 +#: ../../../CHANGELOG.md:3954 msgid "" "List pending requests by default, added a status filter for requests " "(#109)" msgstr "" -#: ../../../CHANGELOG:4162 +#: ../../../CHANGELOG.md:3955 msgid "More structured menus in sidebar, added labels with notifications" msgstr "" -#: ../../../CHANGELOG:4163 +#: ../../../CHANGELOG.md:3956 msgid "Sample virtual-host file for Apache2 reverse-proxy (!165)" msgstr "" -#: ../../../CHANGELOG:4164 +#: ../../../CHANGELOG.md:3957 msgid "" "Store high-level settings (such as federation or auth-related ones) in " "database (#186)" msgstr "" -#: ../../../CHANGELOG:4170 +#: ../../../CHANGELOG.md:3962 msgid "Ensure in place imported files get a proper mimetype (#183)" msgstr "" -#: ../../../CHANGELOG:4171 +#: ../../../CHANGELOG.md:3963 msgid "" "Federation cache suppression is now simpler and also deletes orphaned " "files (#189)" msgstr "" -#: ../../../CHANGELOG:4173 +#: ../../../CHANGELOG.md:3965 msgid "Fixed small UI glitches/bugs in federation tabs (#184)" msgstr "" -#: ../../../CHANGELOG:4174 +#: ../../../CHANGELOG.md:3966 msgid "X-sendfile not working with in place import (#182)" msgstr "" -#: ../../../CHANGELOG:4179 +#: ../../../CHANGELOG.md:3970 msgid "Added a documentation area for third-party projects (#180)" msgstr "" -#: ../../../CHANGELOG:4180 +#: ../../../CHANGELOG.md:3971 msgid "" "Added documentation for optimizing Funkwhale and reduce its memory " "footprint." msgstr "" -#: ../../../CHANGELOG:4181 +#: ../../../CHANGELOG.md:3972 msgid "Document that the database should use an utf-8 encoding (#185)" msgstr "" -#: ../../../CHANGELOG:4182 +#: ../../../CHANGELOG.md:3973 msgid "Foundations for API documentation with Swagger (#178)" msgstr "" -#: ../../../CHANGELOG:4186 +#: ../../../CHANGELOG.md:3975 msgid "Database storage for high-level settings" msgstr "" -#: ../../../CHANGELOG:4188 +#: ../../../CHANGELOG.md:3977 msgid "" "Due to the work done in #186, the following environment variables have " "been deprecated:" msgstr "" -#: ../../../CHANGELOG:4191 +#: ../../../CHANGELOG.md:3980 msgid "FEDERATION_ENABLED" msgstr "" -#: ../../../CHANGELOG:4192 +#: ../../../CHANGELOG.md:3981 msgid "FEDERATION_COLLECTION_PAGE_SIZE" msgstr "" -#: ../../../CHANGELOG:4193 +#: ../../../CHANGELOG.md:3982 msgid "FEDERATION_MUSIC_NEEDS_APPROVAL" msgstr "" -#: ../../../CHANGELOG:4194 +#: ../../../CHANGELOG.md:3983 msgid "FEDERATION_ACTOR_FETCH_DELAY" msgstr "" -#: ../../../CHANGELOG:4195 +#: ../../../CHANGELOG.md:3984 msgid "PLAYLISTS_MAX_TRACKS" msgstr "" -#: ../../../CHANGELOG:4196 +#: ../../../CHANGELOG.md:3985 msgid "API_AUTHENTICATION_REQUIRED" msgstr "" -#: ../../../CHANGELOG:4198 +#: ../../../CHANGELOG.md:3987 msgid "" "Configuration for this settings has been moved to database, as it will " "provide a better user-experience, by allowing you to edit these values " "on-the-fly, without restarting Funkwhale processes." msgstr "" -#: ../../../CHANGELOG:4202 +#: ../../../CHANGELOG.md:3991 msgid "" "You can leave those environment variables in your .env file for now, as " "the values will be used to populate the database entries. We'll make a " "proper announcement when the variables won't be used anymore." msgstr "" -#: ../../../CHANGELOG:4206 +#: ../../../CHANGELOG.md:3995 msgid "" "Please browse https://docs.funkwhale.audio/configuration.html#instance-" "settings for more information about instance configuration using the web " "interface." msgstr "" -#: ../../../CHANGELOG:4211 +#: ../../../CHANGELOG.md:3998 msgid "System emails" msgstr "" -#: ../../../CHANGELOG:4213 +#: ../../../CHANGELOG.md:4000 msgid "Starting from this release, Funkwhale will send two types of emails:" msgstr "" -#: ../../../CHANGELOG:4216 +#: ../../../CHANGELOG.md:4003 msgid "Email confirmation emails, to ensure a user's email is valid" msgstr "" -#: ../../../CHANGELOG:4217 +#: ../../../CHANGELOG.md:4004 msgid "" "Password reset emails, enabling user to reset their password without an " "admin's intervention" msgstr "" -#: ../../../CHANGELOG:4219 +#: ../../../CHANGELOG.md:4006 msgid "" "Email sending is disabled by default, as it requires additional " "configuration. In this mode, emails are simply outputted on stdout." msgstr "" -#: ../../../CHANGELOG:4222 +#: ../../../CHANGELOG.md:4009 msgid "" "If you want to actually send those emails to your users, you should edit " -"your .env file and tweak the ``EMAIL_CONFIG`` variable. See " +"your .env file and tweak the `EMAIL_CONFIG` variable. See " ":data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` for more " "details." msgstr "" -#: ../../../CHANGELOG:4228 +#: ../../../CHANGELOG.md:4014 msgid "" "As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, " "which was not documented, has no effect anymore. You can safely remove it" " from your .env file if it is set." msgstr "" -#: ../../../CHANGELOG:4234 +#: ../../../CHANGELOG.md:4019 msgid "Proxy headers for non-docker deployments" msgstr "" -#: ../../../CHANGELOG:4236 +#: ../../../CHANGELOG.md:4021 msgid "" -"For non-docker deployments, add ``--proxy-headers`` at the end of the " -"``daphne`` command in :file:`/etc/systemd/system/funkwhale-" -"server.service`." +"For non-docker deployments, add `--proxy-headers` at the end of the " +"`daphne` command in :file:`/etc/systemd/system/funkwhale-server.service`." msgstr "" -#: ../../../CHANGELOG:4239 +#: ../../../CHANGELOG.md:4024 msgid "" "This will ensure the application receive the correct IP address from the " "client and not the proxy's one." msgstr "" -#: ../../../CHANGELOG:4244 +#: ../../../CHANGELOG.md:4027 msgid "0.10 (2018-04-23)" msgstr "" -#: ../../../CHANGELOG:4248 +#: ../../../CHANGELOG.md:4031 msgid "Can now import files in-place from the CLI importer (#155)" msgstr "" -#: ../../../CHANGELOG:4253 +#: ../../../CHANGELOG.md:4035 msgid "Avoid downloading audio files multiple times from remote libraries (#163)" msgstr "" -#: ../../../CHANGELOG:4254 +#: ../../../CHANGELOG.md:4036 msgid "Better file import performance and error handling (#144)" msgstr "" -#: ../../../CHANGELOG:4255 +#: ../../../CHANGELOG.md:4037 msgid "" "Import job and batch API and front-end have been improved with better " "performance, pagination and additional filters (#171)" msgstr "" -#: ../../../CHANGELOG:4257 +#: ../../../CHANGELOG.md:4039 msgid "" "Increased max_length on TrackFile.source, this will help when importing " "files with a really long path (#142)" msgstr "" -#: ../../../CHANGELOG:4259 +#: ../../../CHANGELOG.md:4041 msgid "Player is back in Queue tab (#150)" msgstr "" -#: ../../../CHANGELOG:4264 +#: ../../../CHANGELOG.md:4045 msgid "Fail graciously when AP representation includes a null_value for mediaType" msgstr "" -#: ../../../CHANGELOG:4265 +#: ../../../CHANGELOG.md:4046 msgid "Fix sidebar tabs not showing under small resolution under Chrome (#173)" msgstr "" -#: ../../../CHANGELOG:4266 +#: ../../../CHANGELOG.md:4047 msgid "Fixed broken login due to badly configured Axios (#172)" msgstr "" -#: ../../../CHANGELOG:4267 +#: ../../../CHANGELOG.md:4048 msgid "Fixed broken playlist modal after login (#155)" msgstr "" -#: ../../../CHANGELOG:4268 +#: ../../../CHANGELOG.md:4049 msgid "" "Fixed queue reorder or track deletion restarting currently playing track " "(#151)" msgstr "" -#: ../../../CHANGELOG:4270 +#: ../../../CHANGELOG.md:4051 msgid "" "Radio will now append new track if you delete the last track in queue " "(#145)" msgstr "" -#: ../../../CHANGELOG:4271 +#: ../../../CHANGELOG.md:4052 msgid "Reset all sensitive front-end data on logout (#124)" msgstr "" -#: ../../../CHANGELOG:4272 +#: ../../../CHANGELOG.md:4053 msgid "Typos/not showing text due to i18n work (#175)" msgstr "" -#: ../../../CHANGELOG:4277 +#: ../../../CHANGELOG.md:4057 msgid "Better documentation for hardware requirements and memory usage (#165)" msgstr "" -#: ../../../CHANGELOG:4281 +#: ../../../CHANGELOG.md:4059 msgid "In-place import" msgstr "" -#: ../../../CHANGELOG:4283 +#: ../../../CHANGELOG.md:4061 msgid "" "This release includes in-place imports for the CLI import. This means you" " can load gigabytes of music into funkwhale without worrying about about " @@ -7912,120 +8238,119 @@ msgid "" "your disk space." msgstr "" -#: ../../../CHANGELOG:4287 +#: ../../../CHANGELOG.md:4065 msgid "" -"`This new feature is documented here <https://docs.funkwhale.audio" -"/importing-music.html#in-place-import>`_ and require additional " +"[This new feature is documented here](https://docs.funkwhale.audio" +"/importing-music.html#in-place-import) and require additional " "configuration to ensure funkwhale and your webserver can serve those " "files properly." msgstr "" -#: ../../../CHANGELOG:4291 +#: ../../../CHANGELOG.md:4069 msgid "**Non-docker users:**" msgstr "" -#: ../../../CHANGELOG:4293 ../../../CHANGELOG:4307 +#: ../../../CHANGELOG.md:4071 ../../../CHANGELOG.md:4089 msgid "" -"Assuming your music is stored in ``/srv/funkwhale/data/music``, add the " -"following block to your nginx configuration::" +"Assuming your music is stored in `/srv/funkwhale/data/music`, add the " +"following block to your nginx configuration:" msgstr "" -#: ../../../CHANGELOG:4301 -msgid "And the following to your .env file::" +#: ../../../CHANGELOG.md:4081 +msgid "And the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4305 +#: ../../../CHANGELOG.md:4087 msgid "**Docker users:**" msgstr "" -#: ../../../CHANGELOG:4315 +#: ../../../CHANGELOG.md:4099 msgid "" -"Assuming you have the following volume directive in your ``docker-" -"compose.yml`` (it's the default): " -"``/srv/funkwhale/data/music:/music:ro``, then add the following to your " -".env file::" +"Assuming you have the following volume directive in your `docker-" +"compose.yml` (it's the default): `/srv/funkwhale/data/music:/music:ro`, " +"then add the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4326 +#: ../../../CHANGELOG.md:4110 msgid "0.9.1 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4330 +#: ../../../CHANGELOG.md:4114 msgid "Allow null values for musicbrainz_id in Audio ActivityPub representation" msgstr "" -#: ../../../CHANGELOG:4331 +#: ../../../CHANGELOG.md:4115 msgid "" "Fixed broken permission check on library scanning and too aggressive page" " validation" msgstr "" -#: ../../../CHANGELOG:4336 +#: ../../../CHANGELOG.md:4118 msgid "0.9 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4340 +#: ../../../CHANGELOG.md:4122 msgid "Add internationalization support (#5)" msgstr "" -#: ../../../CHANGELOG:4341 +#: ../../../CHANGELOG.md:4123 msgid "Can now follow and import music from remote libraries (#136, #137)" msgstr "" -#: ../../../CHANGELOG:4346 +#: ../../../CHANGELOG.md:4127 msgid "Added a i18n-extract yarn script to extract strings to PO files (#162)" msgstr "" -#: ../../../CHANGELOG:4347 +#: ../../../CHANGELOG.md:4128 msgid "User admin now includes signup and last login dates (#148)" msgstr "" -#: ../../../CHANGELOG:4348 +#: ../../../CHANGELOG.md:4129 msgid "" "We now use a proper user agent including instance version and url during " "outgoing requests" msgstr "" -#: ../../../CHANGELOG:4353 +#: ../../../CHANGELOG.md:4132 msgid "Federation is here!" msgstr "" -#: ../../../CHANGELOG:4355 +#: ../../../CHANGELOG.md:4134 msgid "This is for real this time, and includes:" msgstr "" -#: ../../../CHANGELOG:4357 +#: ../../../CHANGELOG.md:4136 msgid "Following other Funkwhale libraries" msgstr "" -#: ../../../CHANGELOG:4358 +#: ../../../CHANGELOG.md:4137 msgid "" "Importing tracks from remote libraries (tracks are hotlinked, and only " "cached for a short amount of time)" msgstr "" -#: ../../../CHANGELOG:4359 +#: ../../../CHANGELOG.md:4138 msgid "Searching across federated catalogs" msgstr "" -#: ../../../CHANGELOG:4361 +#: ../../../CHANGELOG.md:4140 msgid "" "Note that by default, federation is opt-in, on a per-instance basis: " "instances will request access to your catalog, and you can accept or " "refuse those requests. You can also revoke the access at any time." msgstr "" -#: ../../../CHANGELOG:4365 +#: ../../../CHANGELOG.md:4144 msgid "" "Documentation was updated with relevant instructions to use and benefit " "from this new feature: https://docs.funkwhale.audio/federation.html" msgstr "" -#: ../../../CHANGELOG:4369 +#: ../../../CHANGELOG.md:4147 msgid "Preparing internationalization" msgstr "" -#: ../../../CHANGELOG:4371 +#: ../../../CHANGELOG.md:4149 msgid "" "Funkwhale's front-end as always been english-only, and this is a barrier " "to new users. The work make Funkwhale's interface translatable was " @@ -8034,24 +8359,24 @@ msgid "" " in the near future." msgstr "" -#: ../../../CHANGELOG:4377 +#: ../../../CHANGELOG.md:4155 msgid "" "Many thank to Baptiste for the hard work and for figuring out a proper " "solution to this difficult problem." msgstr "" -#: ../../../CHANGELOG:4381 +#: ../../../CHANGELOG.md:4158 msgid "Upgrade path" msgstr "" -#: ../../../CHANGELOG:4383 +#: ../../../CHANGELOG.md:4160 msgid "" "In addition to the usual instructions from " "https://docs.funkwhale.audio/upgrading.html, non-docker users will have " "to setup an additional systemd unit file for recurrent tasks." msgstr "" -#: ../../../CHANGELOG:4387 +#: ../../../CHANGELOG.md:4164 msgid "" "This was forgotten in the deployment documentation, but recurrent tasks, " "managed by the celery beat process, will be needed more and more in " @@ -8059,97 +8384,97 @@ msgid "" "federated music files and keep disk usage to a minimum." msgstr "" -#: ../../../CHANGELOG:4392 +#: ../../../CHANGELOG.md:4169 msgid "" "In the future, they will also be needed to refetch music metadata or " "federated information periodically." msgstr "" -#: ../../../CHANGELOG:4395 -msgid "Celery beat can be enabled easily::" +#: ../../../CHANGELOG.md:4172 +msgid "Celery beat can be enabled easily:" msgstr "" -#: ../../../CHANGELOG:4405 +#: ../../../CHANGELOG.md:4184 msgid "Docker users already have celerybeat enabled." msgstr "" -#: ../../../CHANGELOG:4409 +#: ../../../CHANGELOG.md:4186 msgid "0.8 (2018-04-02)" msgstr "" -#: ../../../CHANGELOG:4413 +#: ../../../CHANGELOG.md:4190 msgid "Add a detail page for radios (#64)" msgstr "" -#: ../../../CHANGELOG:4414 +#: ../../../CHANGELOG.md:4191 msgid "Implemented page title binding (#1)" msgstr "" -#: ../../../CHANGELOG:4415 +#: ../../../CHANGELOG.md:4192 msgid "Previous Track button restart playback after 3 seconds (#146)" msgstr "" -#: ../../../CHANGELOG:4420 +#: ../../../CHANGELOG.md:4196 msgid "Added credits to Francis Gading for the logotype (#101)" msgstr "" -#: ../../../CHANGELOG:4421 +#: ../../../CHANGELOG.md:4197 msgid "" "API endpoint for fetching instance activity and updated timeline to use " "this new endpoint (#141)" msgstr "" -#: ../../../CHANGELOG:4423 +#: ../../../CHANGELOG.md:4199 msgid "Better error messages in case of missing environment variables (#140)" msgstr "" -#: ../../../CHANGELOG:4424 +#: ../../../CHANGELOG.md:4200 msgid "" "Implemented a @test@yourfunkwhaledomain bot to ensure federation works " "properly. Send it \"/ping\" and it will answer back :)" msgstr "" -#: ../../../CHANGELOG:4426 +#: ../../../CHANGELOG.md:4202 msgid "Queue shuffle now apply only to tracks after the current one (#97)" msgstr "" -#: ../../../CHANGELOG:4427 +#: ../../../CHANGELOG.md:4203 msgid "" "Removed player from queue tab and consistently show current track in " "queue (#131)" msgstr "" -#: ../../../CHANGELOG:4429 +#: ../../../CHANGELOG.md:4205 msgid "We now restrict some usernames from being used during signup (#139)" msgstr "" -#: ../../../CHANGELOG:4434 +#: ../../../CHANGELOG.md:4209 msgid "Better error handling during file import (#120)" msgstr "" -#: ../../../CHANGELOG:4435 +#: ../../../CHANGELOG.md:4210 msgid "Better handling of utf-8 filenames during file import (#138)" msgstr "" -#: ../../../CHANGELOG:4436 +#: ../../../CHANGELOG.md:4211 msgid "Converted favicon from .ico to .png (#130)" msgstr "" -#: ../../../CHANGELOG:4437 +#: ../../../CHANGELOG.md:4212 msgid "" "Upgraded to Python 3.6 to fix weird but harmless weakref error on django " "task (#121)" msgstr "" -#: ../../../CHANGELOG:4443 +#: ../../../CHANGELOG.md:4217 msgid "Documented the upgrade process (#127)" msgstr "" -#: ../../../CHANGELOG:4447 +#: ../../../CHANGELOG.md:4219 msgid "Preparing for federation" msgstr "" -#: ../../../CHANGELOG:4449 +#: ../../../CHANGELOG.md:4221 msgid "" "Federation of music libraries is one of the most asked feature. While " "there is still a lot of work to do, this version includes the foundation " @@ -8157,162 +8482,162 @@ msgid "" "and with other federated software, such as Mastodon." msgstr "" -#: ../../../CHANGELOG:4455 +#: ../../../CHANGELOG.md:4227 msgid "Funkwhale will use ActivityPub as it's federation protocol." msgstr "" -#: ../../../CHANGELOG:4457 +#: ../../../CHANGELOG.md:4229 msgid "" "In order to prepare for federation (see #136 and #137), new API endpoints" " have been added under /federation and /.well-known/webfinger." msgstr "" -#: ../../../CHANGELOG:4460 +#: ../../../CHANGELOG.md:4232 msgid "" "For these endpoints to work, you will need to update your nginx " -"configuration, and add the following snippets::" +"configuration, and add the following snippets:" msgstr "" -#: ../../../CHANGELOG:4473 +#: ../../../CHANGELOG.md:4246 msgid "" "This will ensure federation endpoints will be reachable in the future. " "You can of course skip this part if you know you will not federate your " "instance." msgstr "" -#: ../../../CHANGELOG:4476 +#: ../../../CHANGELOG.md:4249 msgid "" -"A new ``FEDERATION_ENABLED`` env var have also been added to control " +"A new `FEDERATION_ENABLED` env var have also been added to control " "whether federation is enabled or not on the application side. This " "settings defaults to True, which should have no consequences at the " "moment, since actual federation is not implemented and the only available" " endpoints are for testing purposes." msgstr "" -#: ../../../CHANGELOG:4482 +#: ../../../CHANGELOG.md:4255 msgid "" -"Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation " -"on the application side." +"Add `FEDERATION_ENABLED=false` to your .env file to disable federation on" +" the application side." msgstr "" -#: ../../../CHANGELOG:4485 +#: ../../../CHANGELOG.md:4258 msgid "" "To test and troubleshoot federation, we've added a bot account. This bot " "is available at @test@yourinstancedomain, and sending it \"/ping\", for " "example, via Mastodon, should trigger a response." msgstr "" -#: ../../../CHANGELOG:4492 +#: ../../../CHANGELOG.md:4262 msgid "0.7 (2018-03-21)" msgstr "" -#: ../../../CHANGELOG:4496 +#: ../../../CHANGELOG.md:4266 msgid "Can now filter artists and albums with no listenable tracks (#114)" msgstr "" -#: ../../../CHANGELOG:4497 +#: ../../../CHANGELOG.md:4267 msgid "" "Improve the style of the sidebar to make it easier to understand which " "tab is selected (#118)" msgstr "" -#: ../../../CHANGELOG:4499 +#: ../../../CHANGELOG.md:4269 msgid "On artist page, albums are not sorted by release date, if any (#116)" msgstr "" -#: ../../../CHANGELOG:4500 +#: ../../../CHANGELOG.md:4270 msgid "Playlists are here \\o/ :tada: (#3, #93, #94)" msgstr "" -#: ../../../CHANGELOG:4501 +#: ../../../CHANGELOG.md:4271 msgid "Use django-cacheops to cache common ORM requests (#117)" msgstr "" -#: ../../../CHANGELOG:4506 +#: ../../../CHANGELOG.md:4275 msgid "Fixed broken import request admin (#115)" msgstr "" -#: ../../../CHANGELOG:4507 +#: ../../../CHANGELOG.md:4276 msgid "" "Fixed forced redirection to login event with " "API_AUTHENTICATION_REQUIRED=False (#119)" msgstr "" -#: ../../../CHANGELOG:4509 +#: ../../../CHANGELOG.md:4278 msgid "" "Fixed position not being reset properly when playing the same track " "multiple times in a row" msgstr "" -#: ../../../CHANGELOG:4511 +#: ../../../CHANGELOG.md:4280 msgid "Fixed synchronized start/stop radio buttons for all custom radios (#103)" msgstr "" -#: ../../../CHANGELOG:4512 +#: ../../../CHANGELOG.md:4281 msgid "Fixed typo and missing icon on homepage (#96)" msgstr "" -#: ../../../CHANGELOG:4517 +#: ../../../CHANGELOG.md:4285 msgid "" "Up-to-date and complete development and contribution instructions in " "README.rst (#123)" msgstr "" -#: ../../../CHANGELOG:4522 +#: ../../../CHANGELOG.md:4288 msgid "0.6.1 (2018-03-06)" msgstr "" -#: ../../../CHANGELOG:4526 +#: ../../../CHANGELOG.md:4292 msgid "Can now skip acoustid on file import with the --no-acoustid flag (#111)" msgstr "" -#: ../../../CHANGELOG:4531 +#: ../../../CHANGELOG.md:4296 msgid "Added missing batch id in output during import (#112)" msgstr "" -#: ../../../CHANGELOG:4532 +#: ../../../CHANGELOG.md:4297 msgid "Added some feedback on the play button (#100)" msgstr "" -#: ../../../CHANGELOG:4533 +#: ../../../CHANGELOG.md:4298 msgid "Smarter pagination which takes a fixed size (#84)" msgstr "" -#: ../../../CHANGELOG:4538 +#: ../../../CHANGELOG.md:4302 msgid "" "Completely removed django-cachalot from the codebase (#110). You can " "safely remove the CACHALOT_ENABLED setting from your .env file" msgstr "" -#: ../../../CHANGELOG:4543 +#: ../../../CHANGELOG.md:4305 msgid "0.6 (2018-03-04)" msgstr "" -#: ../../../CHANGELOG:4547 +#: ../../../CHANGELOG.md:4309 msgid "Basic activity stream for listening and favorites (#23)" msgstr "" -#: ../../../CHANGELOG:4548 +#: ../../../CHANGELOG.md:4310 msgid "" "Switched to django-channels and daphne for serving HTTP and websocket " "(#34)" msgstr "" -#: ../../../CHANGELOG:4551 +#: ../../../CHANGELOG.md:4312 msgid "Upgrades notes" msgstr "" -#: ../../../CHANGELOG:4553 +#: ../../../CHANGELOG.md:4314 msgid "" "This version contains breaking changes in the way funkwhale is deployed, " "please read the notes carefully." msgstr "" -#: ../../../CHANGELOG:4557 +#: ../../../CHANGELOG.md:4317 msgid "Instance timeline" msgstr "" -#: ../../../CHANGELOG:4559 +#: ../../../CHANGELOG.md:4319 msgid "" "A new \"Activity\" page is now available from the sidebar, where you can " "browse your instance activity. At the moment, this includes other users " @@ -8320,14 +8645,14 @@ msgid "" "the future." msgstr "" -#: ../../../CHANGELOG:4564 +#: ../../../CHANGELOG.md:4324 msgid "" "Internally, we implemented those events by following the Activity Stream " "specification, which will help us to be compatible with other networks in" " the long-term." msgstr "" -#: ../../../CHANGELOG:4568 +#: ../../../CHANGELOG.md:4328 msgid "" "A new settings page has been added to control the visibility of your " "activity. By default, your activity will be browsable by anyone on your " @@ -8335,15 +8660,15 @@ msgid "" "shared." msgstr "" -#: ../../../CHANGELOG:4572 +#: ../../../CHANGELOG.md:4332 msgid "The setting form is available in your profile." msgstr "" -#: ../../../CHANGELOG:4575 +#: ../../../CHANGELOG.md:4334 msgid "Switch from gunicorn to daphne" msgstr "" -#: ../../../CHANGELOG:4577 +#: ../../../CHANGELOG.md:4336 msgid "" "This release include an important change in the way we serve the HTTP " "API. To prepare for new realtime features and enable websocket support in" @@ -8351,190 +8676,190 @@ msgid "" " websocket traffic." msgstr "" -#: ../../../CHANGELOG:4581 +#: ../../../CHANGELOG.md:4340 msgid "" "This replaces gunicorn and the switch should be easy assuming you follow " "the upgrade process described below." msgstr "" -#: ../../../CHANGELOG:4584 +#: ../../../CHANGELOG.md:4343 msgid "" "If you are using docker, please remove the command instruction inside the" " api service, as the up-to-date command is now included directly in the " "image as the default entry point:" msgstr "" -#: ../../../CHANGELOG:4595 +#: ../../../CHANGELOG.md:4355 msgid "" -"On non docker setups, you'll have to update the [Service] block of your " -"funkwhale-server systemd unit file to launch the application server using" -" daphne instead of gunicorn." +"On non docker setups, you'll have to update the `[Service]` block of your" +" funkwhale-server systemd unit file to launch the application server " +"using daphne instead of gunicorn." msgstr "" -#: ../../../CHANGELOG:4598 +#: ../../../CHANGELOG.md:4358 msgid "The new configuration should be similar to this:" msgstr "" -#: ../../../CHANGELOG:4609 +#: ../../../CHANGELOG.md:4369 msgid "" "Ensure you update funkwhale's dependencies as usual to install the " "required packages." msgstr "" -#: ../../../CHANGELOG:4612 +#: ../../../CHANGELOG.md:4372 msgid "" "On both docker and non-docker setup, you'll also have to update your " "nginx configuration for websocket support. Ensure you have the following " "blocks included in your virtualhost file:" msgstr "" -#: ../../../CHANGELOG:4630 +#: ../../../CHANGELOG.md:4390 msgid "Remember to reload your nginx server after the edit." msgstr "" -#: ../../../CHANGELOG:4634 +#: ../../../CHANGELOG.md:4392 msgid "0.5.4 (2018-02-28)" msgstr "" -#: ../../../CHANGELOG:4638 +#: ../../../CHANGELOG.md:4396 msgid "Now stop running radio when clearing queue (#98)" msgstr "" -#: ../../../CHANGELOG:4642 +#: ../../../CHANGELOG.md:4400 msgid "Fixed queue skipping tracks (#91)" msgstr "" -#: ../../../CHANGELOG:4643 +#: ../../../CHANGELOG.md:4401 msgid "Now loop properly on queue when we only have one track (#95)" msgstr "" -#: ../../../CHANGELOG:4647 +#: ../../../CHANGELOG.md:4403 msgid "0.5.3 (2018-02-27)" msgstr "" -#: ../../../CHANGELOG:4651 +#: ../../../CHANGELOG.md:4407 msgid "" "Added admin interface for radios, track files, favorites and import " "requests (#80)" msgstr "" -#: ../../../CHANGELOG:4652 +#: ../../../CHANGELOG.md:4408 msgid "Added basic instance stats on /about (#82)" msgstr "" -#: ../../../CHANGELOG:4653 +#: ../../../CHANGELOG.md:4409 msgid "" "Search now unaccent letters for queries like \"The Dø\" or \"Björk\" " "yielding more results (#81)" msgstr "" -#: ../../../CHANGELOG:4658 +#: ../../../CHANGELOG.md:4413 msgid "Always use username in sidebar (#89)" msgstr "" -#: ../../../CHANGELOG:4659 +#: ../../../CHANGELOG.md:4414 msgid "Click event outside of player icons (#83)" msgstr "" -#: ../../../CHANGELOG:4660 +#: ../../../CHANGELOG.md:4415 msgid "Fixed broken import because of missing transaction" msgstr "" -#: ../../../CHANGELOG:4661 +#: ../../../CHANGELOG.md:4416 msgid "Now always load next radio track on last queue track ended (#87)" msgstr "" -#: ../../../CHANGELOG:4662 +#: ../../../CHANGELOG.md:4417 msgid "Now exclude tracks without file from radio candidates (#88)" msgstr "" -#: ../../../CHANGELOG:4663 +#: ../../../CHANGELOG.md:4418 msgid "skip to next track properly on 40X errors (#86)" msgstr "" -#: ../../../CHANGELOG:4668 +#: ../../../CHANGELOG.md:4422 msgid "Switched to towncrier for changelog management and compilation" msgstr "" -#: ../../../CHANGELOG:4672 +#: ../../../CHANGELOG.md:4424 msgid "0.5.2 (2018-02-26)" msgstr "" -#: ../../../CHANGELOG:4674 +#: ../../../CHANGELOG.md:4426 msgid "Fixed broken file import due to wrong url (#73)" msgstr "" -#: ../../../CHANGELOG:4675 +#: ../../../CHANGELOG.md:4427 msgid "More accurate mimetype detection" msgstr "" -#: ../../../CHANGELOG:4676 +#: ../../../CHANGELOG.md:4428 msgid "Fixed really small size on small screens" msgstr "" -#: ../../../CHANGELOG:4677 +#: ../../../CHANGELOG.md:4429 msgid "Added masonry layout for artists, requests and radios (#68)" msgstr "" -#: ../../../CHANGELOG:4678 +#: ../../../CHANGELOG.md:4430 msgid "We now have a favicon!" msgstr "" -#: ../../../CHANGELOG:4679 +#: ../../../CHANGELOG.md:4431 msgid "Fixed truncated play icon (#65)" msgstr "" -#: ../../../CHANGELOG:4683 +#: ../../../CHANGELOG.md:4433 msgid "0.5.1 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4685 +#: ../../../CHANGELOG.md:4435 msgid "Front: Fixed broken ajax call on radio builder (#69)" msgstr "" -#: ../../../CHANGELOG:4686 +#: ../../../CHANGELOG.md:4436 msgid "Front: Shuffle now restart next track from beginning (#70)" msgstr "" -#: ../../../CHANGELOG:4687 +#: ../../../CHANGELOG.md:4437 msgid "Front: volume slider should now have the same style everywhere (#72)" msgstr "" -#: ../../../CHANGELOG:4691 +#: ../../../CHANGELOG.md:4439 msgid "0.5 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4693 +#: ../../../CHANGELOG.md:4441 msgid "Front: Now reset player colors when track has no cover (#46)" msgstr "" -#: ../../../CHANGELOG:4694 +#: ../../../CHANGELOG.md:4442 msgid "Front: play button now disabled for unplayable tracks" msgstr "" -#: ../../../CHANGELOG:4695 +#: ../../../CHANGELOG.md:4443 msgid "" "API: You can now enable or disable registration on the fly, via a " "preference (#58)" msgstr "" -#: ../../../CHANGELOG:4696 +#: ../../../CHANGELOG.md:4444 msgid "Front: can now signup via the web interface (#35)" msgstr "" -#: ../../../CHANGELOG:4697 +#: ../../../CHANGELOG.md:4445 msgid "Front: Fixed broken redirection on login" msgstr "" -#: ../../../CHANGELOG:4698 +#: ../../../CHANGELOG.md:4446 msgid "Front: Fixed broken error handling on settings and login form" msgstr "" -#: ../../../CHANGELOG:4700 +#: ../../../CHANGELOG.md:4448 msgid "About page:" msgstr "" -#: ../../../CHANGELOG:4702 +#: ../../../CHANGELOG.md:4450 msgid "" "There is a brand new about page on instances (/about), and instance owner" " can now provide a name, a short and a long description for their " @@ -8542,21 +8867,21 @@ msgid "" "(/api/admin/dynamic_preferences/globalpreferencemodel/)." msgstr "" -#: ../../../CHANGELOG:4705 +#: ../../../CHANGELOG.md:4453 msgid "Transcoding:" msgstr "" -#: ../../../CHANGELOG:4707 +#: ../../../CHANGELOG.md:4455 msgid "" "Basic transcoding is now available to/from the following formats : ogg " "and mp3." msgstr "" -#: ../../../CHANGELOG:4709 -msgid "*This is still an alpha feature at the moment, please report any bug.*" +#: ../../../CHANGELOG.md:4457 +msgid "_This is still an alpha feature at the moment, please report any bug._" msgstr "" -#: ../../../CHANGELOG:4711 +#: ../../../CHANGELOG.md:4459 msgid "" "This relies internally on FFMPEG and can put some load on your server. " "It's definitely recommended you setup some caching for the transcoded " @@ -8564,251 +8889,1200 @@ msgid "" "deploy/nginx.conf for an implementation." msgstr "" -#: ../../../CHANGELOG:4716 +#: ../../../CHANGELOG.md:4464 msgid "On the frontend, usage of transcoding should be transparent in the player." msgstr "" -#: ../../../CHANGELOG:4718 +#: ../../../CHANGELOG.md:4466 msgid "Music Requests:" msgstr "" -#: ../../../CHANGELOG:4720 +#: ../../../CHANGELOG.md:4468 msgid "" "This release includes a new feature, music requests, which allows users " "to request music they'd like to see imported. Admins can browse those " "requests and mark them as completed when an import is made." msgstr "" -#: ../../../CHANGELOG:4726 +#: ../../../CHANGELOG.md:4473 msgid "0.4 (2018-02-18)" msgstr "" -#: ../../../CHANGELOG:4728 +#: ../../../CHANGELOG.md:4475 msgid "Front: ambiant colors in player based on current track cover (#59)" msgstr "" -#: ../../../CHANGELOG:4729 +#: ../../../CHANGELOG.md:4476 msgid "Front: simplified front dev setup thanks to webpack proxy (#59)" msgstr "" -#: ../../../CHANGELOG:4730 +#: ../../../CHANGELOG.md:4477 msgid "Front: added some unittests for the store (#55)" msgstr "" -#: ../../../CHANGELOG:4731 +#: ../../../CHANGELOG.md:4478 msgid "Front: fixed broken login redirection when 401" msgstr "" -#: ../../../CHANGELOG:4732 +#: ../../../CHANGELOG.md:4479 msgid "Front: Removed autoplay on page reload" msgstr "" -#: ../../../CHANGELOG:4733 +#: ../../../CHANGELOG.md:4480 msgid "API: Added a /instance/settings endpoint" msgstr "" -#: ../../../CHANGELOG:4734 +#: ../../../CHANGELOG.md:4481 msgid "Front: load /instance/settings on page load" msgstr "" -#: ../../../CHANGELOG:4735 +#: ../../../CHANGELOG.md:4482 msgid "" "Added settings to report JS and Python error to a Sentry instance This is" " disabled by default, but feel free to enable it if you want to help us " "by sending your error reports :) (#8)" msgstr "" -#: ../../../CHANGELOG:4741 +#: ../../../CHANGELOG.md:4486 msgid "0.3.5 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4743 +#: ../../../CHANGELOG.md:4488 msgid "Smarter BACKEND_URL in frontend" msgstr "" -#: ../../../CHANGELOG:4747 +#: ../../../CHANGELOG.md:4490 msgid "0.3.4 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4749 +#: ../../../CHANGELOG.md:4492 msgid "Fixed wrong URL construction in ajax call" msgstr "" -#: ../../../CHANGELOG:4753 +#: ../../../CHANGELOG.md:4494 msgid "0.3.3 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4755 +#: ../../../CHANGELOG.md:4496 msgid "Users can now create their own dynamic radios (#51)" msgstr "" -#: ../../../CHANGELOG:4759 +#: ../../../CHANGELOG.md:4498 msgid "0.3.2" msgstr "" -#: ../../../CHANGELOG:4761 +#: ../../../CHANGELOG.md:4500 msgid "Fixed an issue in the main dockerfile" msgstr "" -#: ../../../CHANGELOG:4765 +#: ../../../CHANGELOG.md:4502 msgid "0.3.1" msgstr "" -#: ../../../CHANGELOG:4767 +#: ../../../CHANGELOG.md:4504 msgid "Revamped all import logic, everything is more tested and consistent" msgstr "" -#: ../../../CHANGELOG:4768 +#: ../../../CHANGELOG.md:4505 msgid "" "Can now use Acoustid in file imports to automatically grab metadata from " "musicbrainz" msgstr "" -#: ../../../CHANGELOG:4769 +#: ../../../CHANGELOG.md:4506 msgid "Brand new file import wizard" msgstr "" -#: ../../../CHANGELOG:4773 +#: ../../../CHANGELOG.md:4508 msgid "0.2.7" msgstr "" -#: ../../../CHANGELOG:4775 +#: ../../../CHANGELOG.md:4510 msgid "" -"Shortcuts: can now use the ``f`` shortcut to toggle the currently playing" -" track as a favorite (#53)" +"Shortcuts: can now use the `f` shortcut to toggle the currently playing " +"track as a favorite (#53)" msgstr "" -#: ../../../CHANGELOG:4777 +#: ../../../CHANGELOG.md:4512 msgid "" "Shortcuts: avoid collisions between shortcuts by using the exact modifier" " (#53)" msgstr "" -#: ../../../CHANGELOG:4778 +#: ../../../CHANGELOG.md:4513 msgid "Player: Added looping controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4779 +#: ../../../CHANGELOG.md:4514 msgid "Player: Added shuffling controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4780 +#: ../../../CHANGELOG.md:4515 msgid "Favorites: can now modify the ordering of track list (#50)" msgstr "" -#: ../../../CHANGELOG:4781 +#: ../../../CHANGELOG.md:4516 msgid "Library: can now search/reorder results on artist browsing view (#50)" msgstr "" -#: ../../../CHANGELOG:4782 +#: ../../../CHANGELOG.md:4517 msgid "" "Upgraded celery to 4.1, added endpoint logic for fingerprinting audio " "files" msgstr "" -#: ../../../CHANGELOG:4783 +#: ../../../CHANGELOG.md:4518 msgid "" "Fixed #56: invalidate tokens on password change, also added change " "password form" msgstr "" -#: ../../../CHANGELOG:4784 +#: ../../../CHANGELOG.md:4519 msgid "Fixed #57: now refresh jwt token on page refresh" msgstr "" -#: ../../../CHANGELOG:4785 +#: ../../../CHANGELOG.md:4520 msgid "removed ugly dividers in batch import list" msgstr "" -#: ../../../CHANGELOG:4786 +#: ../../../CHANGELOG.md:4521 msgid "Fixed a few padding issues" msgstr "" -#: ../../../CHANGELOG:4787 +#: ../../../CHANGELOG.md:4522 msgid "Now persist/restore queue/radio/player state automatically" msgstr "" -#: ../../../CHANGELOG:4788 +#: ../../../CHANGELOG.md:4523 msgid "Removed old broken imports" msgstr "" -#: ../../../CHANGELOG:4789 +#: ../../../CHANGELOG.md:4524 msgid "Now force tests paths" msgstr "" -#: ../../../CHANGELOG:4790 +#: ../../../CHANGELOG.md:4525 msgid "Fixed #54: Now use pytest everywhere \\o/" msgstr "" -#: ../../../CHANGELOG:4791 +#: ../../../CHANGELOG.md:4526 msgid "Now use vuex to manage state for favorites" msgstr "" -#: ../../../CHANGELOG:4792 +#: ../../../CHANGELOG.md:4527 msgid "Now use vuex to manage state for authentication" msgstr "" -#: ../../../CHANGELOG:4793 +#: ../../../CHANGELOG.md:4528 msgid "Now use vuex to manage state for player/queue/radios" msgstr "" -#: ../../../CHANGELOG:4797 +#: ../../../CHANGELOG.md:4530 msgid "0.2.6 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4799 +#: ../../../CHANGELOG.md:4532 msgid "Fixed broken Dockerfile" msgstr "" -#: ../../../CHANGELOG:4803 +#: ../../../CHANGELOG.md:4534 msgid "0.2.5 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4807 +#: ../../../CHANGELOG.md:4538 msgid "Import: can now specify search template when querying import sources (#45)" msgstr "" -#: ../../../CHANGELOG:4808 +#: ../../../CHANGELOG.md:4539 msgid "Login form: now redirect to previous page after login (#2)" msgstr "" -#: ../../../CHANGELOG:4809 +#: ../../../CHANGELOG.md:4540 msgid "404: a decent 404 template, at least (#48)" msgstr "" -#: ../../../CHANGELOG:4813 +#: ../../../CHANGELOG.md:4544 msgid "Player: better handling of errors when fetching the audio file (#46)" msgstr "" -#: ../../../CHANGELOG:4814 +#: ../../../CHANGELOG.md:4545 msgid "" "Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues " "on admin (#49)" msgstr "" -#: ../../../CHANGELOG:4816 +#: ../../../CHANGELOG.md:4547 msgid "Tech:" msgstr "" -#: ../../../CHANGELOG:4818 +#: ../../../CHANGELOG.md:4549 msgid "Django 2 compatibility, lot of packages upgrades (#47)" msgstr "" -#: ../../../CHANGELOG:4822 +#: ../../../CHANGELOG.md:4551 msgid "0.2.4 (2017-12-14)" msgstr "" -#: ../../../CHANGELOG:4826 +#: ../../../CHANGELOG.md:4555 msgid "Models: now store release group mbid on Album model (#7)" msgstr "" -#: ../../../CHANGELOG:4827 +#: ../../../CHANGELOG.md:4556 msgid "Models: now bind import job to track files (#44)" msgstr "" -#: ../../../CHANGELOG:4831 +#: ../../../CHANGELOG.md:4560 msgid "" "Library: fixen broken \"play all albums\" button on artist cards in " "Artist browsing view (#43)" msgstr "" +#~ msgid "" +#~ "Following `@funkwhale@fosstodon.org " +#~ "<https://fosstodon.org/@funkwhale>`_ on Mastodon" +#~ msgstr "" + +#~ msgid "" +#~ "``` export FUNKWHALE_VERSION=\"1.3.0\" cd " +#~ "/srv/funkwhale docker-compose down mv " +#~ "docker-compose.yml docker-compose.bak curl " +#~ "-L -o /srv/funkwhale/docker-compose.yml " +#~ "\"https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy" +#~ "/docker-compose.yml\" ```" +#~ msgstr "" + +#~ msgid "" +#~ "If you need to customize your " +#~ "nginx template, e.g. to work around " +#~ "`problems with Docker's resolver " +#~ "<https://docs.funkwhale.audio/admin/external-storages.html" +#~ "#no-resolver-found>`_, you can mount " +#~ "your custom nginx configuration into the" +#~ " container. Uncomment the commented volumes" +#~ " in the `nginx` section of your " +#~ "`docker-compose.yml`. Additionally you need" +#~ " to update the paths in " +#~ "`nginx/funkwhale.template`. Replace all occurrences" +#~ " of `/funkwhale` by `/usr/share/nginx/html`. " +#~ "This loads the templates from your " +#~ "`nginx` folder and overrides the " +#~ "template files in the Docker container." +#~ msgstr "" + +#~ msgid "``` docker-compose up -d ```" +#~ msgstr "" + +#~ msgid "" +#~ "Download the `Docker compose plugin " +#~ "<https://docs.docker.com/compose/install/linux/#install-" +#~ "using-the-repository>`_" +#~ msgstr "" + +#~ msgid "```sh sudo docker-compose down ```" +#~ msgstr "" + +#~ msgid "```sh sudo docker compose up -d ```" +#~ msgstr "" + +#~ msgid "" +#~ "Update dependency vue-template-compiler " +#~ "to 2.6.14 Update dependency vue to " +#~ "^2.6.14 Update dependency vuex-persistedstate" +#~ " to ^2.7.1 Update dependency vuedraggable" +#~ " to ^2.24.3 Update dependency vue-" +#~ "lazyload to ^1.3.3 Update dependency " +#~ "vue-plyr to ^5.1.3 Update dependency " +#~ "vue-upload-component to ^2.8.22 Update " +#~ "dependency vue-gettext to ^2.1.12 Update" +#~ " dependency showdown to ^1.9.1 Update " +#~ "dependency js-logger to ^1.6.1 Update" +#~ " dependency register-service-worker to " +#~ "^1.7.2 Update dependency howler to " +#~ "^2.2.3 Update dependency fomantic-ui-css" +#~ " to ^2.8.8 Update dependency diff to" +#~ " ^4.0.2 Update dependency axios-auth-" +#~ "refresh to ^2.2.8" +#~ msgstr "" + +#~ msgid "" +#~ "Ciarán Ainsworth Georg Krause Jakob " +#~ "Schürz Mathieu Jourdan Micha Gläß-Stöcker " +#~ "petitminion" +#~ msgstr "" + +#~ msgid "Committers: Dignified Silence Georg Krause JuniorJPDJ nztvar" +#~ msgstr "" + +#~ msgid "" +#~ "`DETAIL: The data directory was " +#~ "initialized by PostgreSQL version 11, " +#~ "which is not compatible with this " +#~ "version 13.5.`" +#~ msgstr "" + +#~ msgid "" +#~ "Alexandra Parker Alyssa Ross appzer0 " +#~ "Arthur Brugière Asier Iturralde Sarasola " +#~ "bittin Blopware Brian McMillen Christoph " +#~ "Pomaska Ciaran Ainsworth Ciarán Ainsworth " +#~ "Classified Connor Hay Damian Szetela " +#~ "David Marzal Deleted User Dignified " +#~ "Silence Dominik Danelski egon0 Erik " +#~ "Präntare Georg Abenthung Georgios B " +#~ "Georgios Brellas Georg Krause ghose " +#~ "greengekota heyarne ian Vatega Janek " +#~ "jovuit JuniorJPDJ Konstantinos G manuelviens" +#~ " Manuel Viens Marcos Marcos Peña " +#~ "Martin Giger Matthew J Micha " +#~ "Gläß-Stöcker petitminion Petitminion Philipp " +#~ "Wolfer Porrumentzio Quentin PAGÈS Raphael " +#~ "Lullis Riccardo Sacchetto Romain Failliot " +#~ "Rubén Cabrera Ryan Harg Sergio Varela" +#~ " SpcCw Stefano Pigozzi Thomas Tony " +#~ "Simoes Tony Wasserka vachan-maker " +#~ "Virgile Robles" +#~ msgstr "" + +#~ msgid "" +#~ "AMoonRabbit Agate Antoine POPINEAU Arthur " +#~ "Brugière Ciarán Ainsworth Connor Hay " +#~ "Creak David Marzal Georg Krause Gerhard" +#~ " Beck Greg Poole JuniorJPDJ Kuba " +#~ "Orlik Lunar Control Marcos Peña Mateusz" +#~ " Korzeniewski Mathieu Jourdan Micha " +#~ "Gläß-Stöcker Philipp Wolfer Porrumentzio " +#~ "Thomas Tony Wasserka Ville Ranki arkhi" +#~ " heyarne interfect jovuit mal petitminion" +#~ " vachan-maker" +#~ msgstr "" + +#~ msgid "" +#~ "Agate Arthur Brugière Ciarán Ainsworth " +#~ "Connor Hay David Marzal Distopico Fanyx" +#~ " Georg Abenthung Georg Krause Janek " +#~ "JuniorJPDJ Kasper Seweryn Marcos Peña " +#~ "Mathieu Jourdan Matthew J. Micha " +#~ "Gläß-Stöcker Philipp Wolfer Thomas Tony " +#~ "Wasserka heyarne jovuit petitminion thanksd" +#~ msgstr "" + +#~ msgid "" +#~ "Adam Novak Agate alemairebe Alicia " +#~ "Blasco Leon anonymous Amaranthe appzer0 " +#~ "Arne Asier Iturralde Sarasola Christian " +#~ "Paul Ciarán Ainsworth Daniel David " +#~ "Dominik Danelski Eorn le goéland Eleos" +#~ " Erik Duxstad Esteban Fred Uggla " +#~ "Freyja Wildes Georg Krause ghose " +#~ "hellekin heyarne interfect Jess Jing " +#~ "Johannes H. jovuit marzzzello Meliurwen " +#~ "Mehdi Nitai Bezerra da Silva Philipp " +#~ "Wolfer Pierre Couy Porrumentzio Reg " +#~ "Robert Kaye Rubén Cabrera Silver Fox " +#~ "Snack Capt SpcCw Strom Lin vicdorke " +#~ "x" +#~ msgstr "" + +#~ msgid "" +#~ "With Funkwhale 1.0, we're dropping " +#~ "support for Python 3.5. Before " +#~ "upgrading, ensure ``python3 --version`` " +#~ "returns ``3.6`` or higher." +#~ msgstr "" + +#~ msgid "If it returns ``3.6`` or higher, you have nothing to do." +#~ msgstr "" + +#~ msgid "" +#~ "If it returns ``3.5``, you will " +#~ "need to upgrade your Python " +#~ "version/Host, then recreate your virtual " +#~ "environment::" +#~ msgstr "" + +#~ msgid "delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory" +#~ msgstr "" + +#~ msgid "" +#~ "run ``python manage.py fw media " +#~ "generate-thumbnails`` to regenerate thumbnails" +#~ " with the enhanced quality" +#~ msgstr "" + +#~ msgid "" +#~ "If you don't want to regenerate " +#~ "thumbnails, you can keep the old " +#~ "ones by adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70``" +#~ " to your .env file." +#~ msgstr "" + +#~ msgid "Small API breaking change in ``/api/v1/libraries``" +#~ msgstr "" + +#~ msgid "" +#~ "To allow easier crawling of public " +#~ "libraries on a pod,we had to make" +#~ " a slight breaking change to the " +#~ "behaviour of ``GET /api/v1/libraries``." +#~ msgstr "" + +#~ msgid "" +#~ "If you are consuming the API via" +#~ " a third-party client and need " +#~ "to retrieve your libraries, use the " +#~ "``scope`` parameter, like this: ``GET " +#~ "/api/v1/libraries?scope=me``" +#~ msgstr "" + +#~ msgid "API breaking change in ``/api/v1/albums``" +#~ msgstr "" + +#~ msgid "" +#~ "To increase performance, querying " +#~ "``/api/v1/albums`` doesn't return album tracks" +#~ " anymore. This caused some performance " +#~ "issues, especially as some albums and" +#~ " series have dozens or even hundreds" +#~ " of tracks." +#~ msgstr "" + +#~ msgid "" +#~ "If you want to retrieve tracks for" +#~ " an album, you can query " +#~ "``/api/v1/tracks/?album=<albumid>``." +#~ msgstr "" + +#~ msgid "" +#~ "Support a --watch mode with " +#~ "``import_files`` to automatically add, update" +#~ " and remove files when filesystem is" +#~ " updated (#721)" +#~ msgstr "" + +#~ msgid "" +#~ "Fixed mimetype detection issue that " +#~ "broke transcoding on some tracks " +#~ "(#1093). Run ``python manage.py fix_uploads" +#~ " --mimetype`` to set proper mimetypes " +#~ "on existing uploads." +#~ msgstr "" + +#~ msgid "" +#~ "We plan to remove the old engine" +#~ " in an upcoming release. In the " +#~ "meantime, if anything goes wrong, you" +#~ " can switch back by setting " +#~ "``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` " +#~ "file." +#~ msgstr "" + +#~ msgid "" +#~ "The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE``" +#~ " setting can be used to make " +#~ "email verification mandatory for your " +#~ "users. It defaults to ``false``, and " +#~ "doesn't apply to superuser accounts " +#~ "created through the CLI." +#~ msgstr "" + +#~ msgid "" +#~ "If you use the ``import_files`` command," +#~ " this means you should replace " +#~ "scripts that look like this::" +#~ msgstr "" + +#~ msgid "By this::" +#~ msgstr "" + +#~ msgid "" +#~ "All user-related commands are available" +#~ " under the ``python manage.py fw " +#~ "users`` namespace. Please refer to the" +#~ " `Admin documentation " +#~ "<https://docs.funkwhale.audio/admin/commands.html#user-" +#~ "management>`_ for more information and " +#~ "instructions." +#~ msgstr "" + +#~ msgid "" +#~ "Progressive web app [Manual action " +#~ "sugFull list of changes " +#~ "^^^^^^^^^^^^^^^^^^^^gested, non-docker only] " +#~ "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" +#~ msgstr "" + +#~ msgid "" +#~ "In order to fully benefit from " +#~ "this change, if your pod isn't " +#~ "deployed using Docker, ensure the " +#~ "following instruction is present in your" +#~ " nginx configuration::" +#~ msgstr "" + +#~ msgid "" +#~ "You need to add this to your " +#~ ".env file: ``POSTGRES_HOST_AUTH_METHOD=trust``" +#~ msgstr "" + +#~ msgid "" +#~ "With our upgrade to Alpine 3.10, " +#~ "the ``funkwhale/all-in-one`` image now" +#~ " includes PostgreSQL 11." +#~ msgstr "" + +#~ msgid "" +#~ "In order to update to Funkwhale " +#~ "0.21, you will first need to " +#~ "upgrade Funkwhale's PostgreSQL database, " +#~ "following the steps below::" +#~ msgstr "" + +#~ msgid "" +#~ "Once you have completed the Funkwhale" +#~ " upgrade with our regular instructions " +#~ "and everything works properly, you can" +#~ " remove the backups/old files::" +#~ msgstr "" + +#~ msgid "" +#~ "Make media and static files serving " +#~ "more reliable when reverse proxy " +#~ "X_FORWARDED_* headers are incorrect (#947)" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to try it now, " +#~ "add ``MUSIC_USE_DENORMALIZATION=True`` to your " +#~ "``.env`` file, restart Funkwhale, and " +#~ "run the following command::" +#~ msgstr "" + +#~ msgid "" +#~ "Starting with Funkwhale 0.20, Funkwhale " +#~ "will automatically extract genre information" +#~ " from uploaded files and associate it" +#~ " with the corresponding tracks in the" +#~ " form of tags (similar to Mastodon" +#~ " or Twitter hashtags). Please refer " +#~ "to `our tagging documentation " +#~ "<https://docs.funkwhale.audio/users/upload.html#tagging-files>`_" +#~ " for more information regarding the " +#~ "tagging process." +#~ msgstr "" + +#~ msgid "" +#~ "If you are a pod admin and " +#~ "want to extract tags from already " +#~ "uploaded content, you run `this snippet" +#~ " <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__" +#~ " and `this snippet " +#~ "<https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ " +#~ "in a ``python manage.py shell``." +#~ msgstr "" + +#~ msgid "" +#~ "`User documentation " +#~ "<https://docs.funkwhale.audio/moderator/reports.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "`Moderator documentation " +#~ "<https://docs.funkwhale.audio/users/reports.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "`User documentation " +#~ "<https://docs.funkwhale.audio/users/account.html>`__" +#~ msgstr "" + +#~ msgid "" +#~ "We recommend taking a few moments " +#~ "to fill these accordingly to your " +#~ "needs, by visiting ``/manage/settings``." +#~ msgstr "" + +#~ msgid "" +#~ "If you want to enable this feature" +#~ " on your pod, or learn more, " +#~ "please refer to `our documentation " +#~ "<https://docs.funkwhale.audio/moderator/listing.html>`_!" +#~ msgstr "" + +#~ msgid "" +#~ "To benefit from this enhancement on " +#~ "existing instances, you need to add " +#~ "``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` " +#~ "file (use a higher number if you" +#~ " want to have more web worker " +#~ "processes)." +#~ msgstr "" + +#~ msgid "" +#~ "Then, edit your ``/etc/systemd/system/funkwhale-" +#~ "server.service`` and replace the " +#~ "``ExecStart=`` line with " +#~ "``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn " +#~ "config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} " +#~ "-k uvicorn.workers.UvicornWorker -b " +#~ "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}``" +#~ msgstr "" + +#~ msgid "" +#~ "Then reload the configuration change " +#~ "with ``sudo systemctl daemon-reload`` " +#~ "and ``sudo systemctl restart funkwhale-" +#~ "server``." +#~ msgstr "" + +#~ msgid "..note::" +#~ msgstr "" + +#~ msgid "" +#~ "**On non-docker setups**, in " +#~ "``/etc/nginx/sites-available/funkwhale.conf``::" +#~ msgstr "" + +#~ msgid "Then reload nginx with ``systemctl reload nginx``." +#~ msgstr "" + +#~ msgid "**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``::" +#~ msgstr "" + +#~ msgid "Then reload nginx with ``docker-compose restart nginx``." +#~ msgstr "" + +#~ msgid "" +#~ "You can disable the rate-limiting " +#~ "feature by adding `THROTTLING_ENABLED=false` " +#~ "to your ``.env`` file and restarting " +#~ "the services. If you are using the" +#~ " Funkwhale API in your project or " +#~ "app and want to know more about" +#~ " the limits, please consult " +#~ "https://docs.funkwhale.audio/swagger/." +#~ msgstr "" + +#~ msgid "" +#~ "Some Subsonic clients, such as DSub, " +#~ "are sending an Authorization headers " +#~ "which was forwarded to the S3 " +#~ "storage when streaming, causing some " +#~ "issues. If you are using S3 or " +#~ "a compatible storage such as Minio, " +#~ "please add the following in your " +#~ "nginx ``~ /_protected/media/(.+)`` location::" +#~ msgstr "" + +#~ msgid "" +#~ "To help with that, we now offer" +#~ " a ``prune_library`` management command you" +#~ " can run to purge your database " +#~ "from obsolete entries. `Please refer to" +#~ " our documentation for usage instructions" +#~ " <https://docs.funkwhale.audio/admin/commands.html#pruning-" +#~ "library>`__." +#~ msgstr "" + +#~ msgid "" +#~ "To help with that, we now offer" +#~ " a ``check_inplace_files`` management command " +#~ "you can run to purge your database" +#~ " from obsolete files. `Please refer " +#~ "to our documentation for usage " +#~ "instructions <https://docs.funkwhale.audio/admin/commands.html" +#~ "#remove-obsolete-files-from-database>`__." +#~ msgstr "" + +#~ msgid "" +#~ "Added twitter:* meta tags to detect " +#~ "tracks and albums players automatically " +#~ "on more sites (#578) Improved " +#~ "responsiveness of embedded player" +#~ msgstr "" + +#~ msgid "" +#~ "*You are only concerned if you use" +#~ " the mono-container docker deployment " +#~ "behind a reverse proxy*" +#~ msgstr "" + +#~ msgid "" +#~ "Because of `an issue in our " +#~ "mono-container configuration " +#~ "<https://github.com/thetarkus/docker-funkwhale/issues/19>`_, " +#~ "users deploying Funkwhale via docker " +#~ "using our `funkwhale/all-in-one` image" +#~ " could face some mixed content " +#~ "warnings (and possibly other troubles) " +#~ "when browsing the Web UI." +#~ msgstr "" + +#~ msgid "" +#~ "This is fixed in this release, but" +#~ " on existing deployments, you'll need " +#~ "to add ``NESTED_PROXY=1`` in your " +#~ "container environment (either in your " +#~ "``.env`` file, or via your container " +#~ "management tool), then recreate your " +#~ "funkwhale container." +#~ msgstr "" + +#~ msgid "" +#~ "We've removed the risky content-types" +#~ " from our nginx template files, to" +#~ " ensure new instances are safe, " +#~ "however, if you already have an " +#~ "instance, you need to double check " +#~ "that your host nginx virtualhost do " +#~ "not include the following values for " +#~ "the ``gzip_types`` settings::" +#~ msgstr "" + +#~ msgid "" +#~ "For convenience, you can also replace" +#~ " the whole setting with the following" +#~ " snippet::" +#~ msgstr "" + +#~ msgid "" +#~ "If you are on an Apache setup, " +#~ "you will have to replace the " +#~ "`<Location \"/api\">` block with the " +#~ "following::" +#~ msgstr "" + +#~ msgid "" +#~ "And add some more `ProxyPass` directives" +#~ " so that the `Alias` part of " +#~ "your configuration file looks this way::" +#~ msgstr "" + +#~ msgid "" +#~ "In case you are using custom css" +#~ " and theming, you also need to " +#~ "match this block::" +#~ msgstr "" + +#~ msgid "" +#~ "Upgrade instructions are available at " +#~ "https://docs.funkwhale.audio/admin/upgrading.html, ensure " +#~ "you also execute the instructions marked" +#~ " with ``[manual action required]`` and " +#~ "``[manual action suggested]``." +#~ msgstr "" + +#~ msgid "See ``Full changelog`` below for an exhaustive list of changes!" +#~ msgstr "" + +#~ msgid "" +#~ "License matching is done on the " +#~ "content of the ``License`` tag in " +#~ "the files, with a fallback on the" +#~ " ``Copyright`` tag." +#~ msgstr "" + +#~ msgid "" +#~ "**On docker setups**, edit your " +#~ "``/srv/funkwhale/nginx/funkwhale.template`` and replace" +#~ " the ``location /api/`` and `location " +#~ "/` blocks by the following snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "**On non-docker setups**, edit your " +#~ "``/etc/nginx/sites-available/funkwhale.conf`` file, " +#~ "and replace the ``location /api/`` and" +#~ " `location /` blocks by the following" +#~ " snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the " +#~ "corresponding variable from your .env " +#~ "file, which should be " +#~ "``/srv/funkwhale/front/dist`` by default, then " +#~ "reload your nginx process with ``sudo" +#~ " systemctl reload nginx``." +#~ msgstr "" + +#~ msgid "" +#~ "On non-docker deployments, earlier " +#~ "versions required you to source the " +#~ "config/.env file before launching any " +#~ "Funkwhale command, with ``export $(cat " +#~ "config/.env | grep -v ^# | " +#~ "xargs)`` This led to more complex " +#~ "and error prone deployment / setup." +#~ msgstr "" + +#~ msgid "On docker setups::" +#~ msgstr "" + +#~ msgid "On non-docker setups::" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to benefit from gzip" +#~ " compression on your instance, edit " +#~ "your reverse proxy virtualhost file " +#~ "(located at ``/etc/nginx/sites-" +#~ "available/funkwhale.conf``) and add the " +#~ "following snippet in the server block," +#~ " then reload your nginx server::" +#~ msgstr "" + +#~ msgid "First, tweak your .env file::" +#~ msgstr "" + +#~ msgid "" +#~ "Then, add the following block at " +#~ "the end of your docker-compose.yml " +#~ "file::" +#~ msgstr "" + +#~ msgid "" +#~ "Update the funkwhale.conf configuration of " +#~ "your server's reverse-proxy::" +#~ msgstr "" + +#~ msgid "sudo nginx -t sudo systemctl reload nginx" +#~ msgstr "" + +#~ msgid "On Apache2 setups, you have to replace the following line::" +#~ msgstr "" + +#~ msgid "with::" +#~ msgstr "" + +#~ msgid "You can now restart your server::" +#~ msgstr "" + +#~ msgid "" +#~ "``hello world``: search for \"hello\" " +#~ "and \"world\" in all the available " +#~ "fields" +#~ msgstr "" + +#~ msgid "``hello in:artist`` search for results where artist name is \"hello\"" +#~ msgstr "" + +#~ msgid "" +#~ "``spring in:artist,album`` search for results" +#~ " where artist name or album title " +#~ "contain \"spring\"" +#~ msgstr "" + +#~ msgid "``artist:hello`` search for results where artist name equals \"hello\"" +#~ msgstr "" + +#~ msgid "" +#~ "``artist:\"System of a Down\" " +#~ "domain:instance.funkwhale`` search for results " +#~ "where artist name equals \"System of " +#~ "a Down\" and inside \"instance.funkwhale\" " +#~ "library" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure MEDIA_ROOT, STATIC_ROOT and " +#~ "MUSIC_DIRECTORY_* are set explicitly [Manual" +#~ " action required]" +#~ msgstr "" + +#~ msgid "" +#~ "This will only affect new deployments" +#~ " though. If you want to benefit " +#~ "from this on an existing instance, " +#~ "do a backup of your ``.env`` and" +#~ " ``docker-compose.yml`` files and apply " +#~ "the following changes:" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure ``MEDIA_ROOT`` is uncommented in " +#~ "your .env file and match the " +#~ "absolute path where media files are " +#~ "stored on your host " +#~ "(``/srv/funkwhale/data/media`` by default)" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure ``STATIC_ROOT`` is uncommented in " +#~ "your .env file and match the " +#~ "absolute path where static files are " +#~ "stored on your host " +#~ "(``/srv/funkwhale/data/static`` by default)" +#~ msgstr "" + +#~ msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``" +#~ msgstr "" + +#~ msgid "" +#~ "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented " +#~ "and set to the absolute path on" +#~ " your host were your music files " +#~ "are stored (``/srv/funkwhale/data/music`` by " +#~ "default)" +#~ msgstr "" + +#~ msgid "" +#~ "Search for volumes (there should be " +#~ "two occurrences) that contains " +#~ "``/app/funkwhale_api/media`` on the right " +#~ "side, and replace the whole line " +#~ "with ``- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"``" +#~ msgstr "" + +#~ msgid "" +#~ "Search for a volume that contains " +#~ "``/app/staticfiles`` on the right side, " +#~ "and replace the whole line with " +#~ "``- \"${STATIC_ROOT}:${STATIC_ROOT}\"``" +#~ msgstr "" + +#~ msgid "" +#~ "If you use in-place import, search" +#~ " for volumes (there should be two " +#~ "occurrences) that contains ``/music:ro`` on" +#~ " the right side, and replace the " +#~ "whole line with ``- " +#~ "\"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"``" +#~ msgstr "" + +#~ msgid "" +#~ "In the end, the ``volumes`` directives" +#~ " of your containers should look like" +#~ " that::" +#~ msgstr "" + +#~ msgid "" +#~ "You can safely remove this dependency" +#~ " in your environment with ``pip " +#~ "uninstall django-cacheops`` if you're " +#~ "not using docker." +#~ msgstr "" + +#~ msgid "" +#~ "You can also safely remove any " +#~ "``CACHEOPS_ENABLED`` setting from your " +#~ "environment file." +#~ msgstr "" + +#~ msgid "" +#~ "Up until now, our Apache2 configuration" +#~ " was not working with websockets. " +#~ "This is now solved by adding this" +#~ " at the beginning of your Apache2 " +#~ "configuration file::" +#~ msgstr "" + +#~ msgid "And this, before the \"/api\" block::" +#~ msgstr "" + +#~ msgid "Here is how to modify your `funkwhale.conf` apache2 configuration::" +#~ msgstr "" + +#~ msgid "You may sometimes get the following warning while applying migrations::" +#~ msgstr "" + +#~ msgid "" +#~ "This is a warning, not an error," +#~ " and it can be safely ignored. " +#~ "Never run the ``makemigrations`` command " +#~ "yourself." +#~ msgstr "" + +#~ msgid "" +#~ "Added warning about _protected/music location" +#~ " in nginx configuration (#247)" +#~ msgstr "" + +#~ msgid "" +#~ "You don't have to do anything on" +#~ " your side, but you may want to" +#~ " remove the now obsolete configuration " +#~ "from your reverse proxy file (nginx " +#~ "only)::" +#~ msgstr "" + +#~ msgid "Upgrade instructions are available at" +#~ msgstr "" + +#~ msgid "https://docs.funkwhale.audio/upgrading.html" +#~ msgstr "" + +#~ msgid "Then launch it::" +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/artists`` does not includes a " +#~ "list of tracks anymore. It was to" +#~ " heavy to return all of this " +#~ "data all the time. You can get " +#~ "all tracks for an artist using " +#~ "``/api/v1/tracks?artist=artist_id``" +#~ msgstr "" + +#~ msgid "" +#~ "Additionally, ``/api/v1/tracks`` now support " +#~ "an ``album`` filter to filter tracks " +#~ "matching an album" +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/artists/search``, ``/api/v1/albums/search`` and" +#~ " ``/api/v1/tracks/search`` endpoints are removed." +#~ " Use ``/api/v1/{artists|albums|tracks}/?q=yourquery`` " +#~ "instead. It's also more powerful, since" +#~ " you can combine search with other" +#~ " filters and ordering options." +#~ msgstr "" + +#~ msgid "" +#~ "``/api/v1/requests/import-requests/search`` endpoint " +#~ "is removed as well. Use " +#~ "``/api/v1/requests/import-requests/?q=yourquery`` instead." +#~ " It's also more powerful, since you" +#~ " can combine search with other " +#~ "filters and ordering options." +#~ msgstr "" + +#~ msgid "" +#~ "You have nothing to do to benefit" +#~ " from this, however, since Flac files" +#~ " tend to be a lot bigger than" +#~ " other files, you may want to " +#~ "increase the ``client_max_body_size`` value in" +#~ " your Nginx configuration if you plan" +#~ " to upload flac files." +#~ msgstr "" + +#~ msgid "Nginx::" +#~ msgstr "" + +#~ msgid "Apache2::" +#~ msgstr "" + +#~ msgid "" +#~ "This interface is available at " +#~ "``/manage/settings`` and via link in the" +#~ " sidebar." +#~ msgstr "" + +#~ msgid "" +#~ "There is still no dedicated interface" +#~ " to manage user permissions, but you" +#~ " can use the admin interface at " +#~ "``/api/admin/users/user/`` for that purpose in" +#~ " the meantime." +#~ msgstr "" + +#~ msgid "" +#~ "Please see `our list of supported " +#~ "apps <https://funkwhale.audio/en_US/apps>`_ for more" +#~ " information about supported clients and" +#~ " user instructions." +#~ msgstr "" + +#~ msgid "On nginx, add the following block::" +#~ msgstr "" + +#~ msgid "On Apache, add the following block::" +#~ msgstr "" + +#~ msgid "" +#~ "To make your instance fully compatible" +#~ " with the nodeinfo protocol, you need" +#~ " to to edit your nginx configuration" +#~ " file::" +#~ msgstr "" + +#~ msgid "You can do the same if you use apache::" +#~ msgstr "" + +#~ msgid "" +#~ "If you want to actually send those" +#~ " emails to your users, you should " +#~ "edit your .env file and tweak the" +#~ " ``EMAIL_CONFIG`` variable. See " +#~ ":data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` " +#~ "for more details." +#~ msgstr "" + +#~ msgid "" +#~ "For non-docker deployments, add " +#~ "``--proxy-headers`` at the end of the" +#~ " ``daphne`` command in :file:`/etc/systemd/system" +#~ "/funkwhale-server.service`." +#~ msgstr "" + +#~ msgid "" +#~ "`This new feature is documented here " +#~ "<https://docs.funkwhale.audio/importing-music.html#in-" +#~ "place-import>`_ and require additional " +#~ "configuration to ensure funkwhale and " +#~ "your webserver can serve those files " +#~ "properly." +#~ msgstr "" + +#~ msgid "" +#~ "Assuming your music is stored in " +#~ "``/srv/funkwhale/data/music``, add the following " +#~ "block to your nginx configuration::" +#~ msgstr "" + +#~ msgid "And the following to your .env file::" +#~ msgstr "" + +#~ msgid "" +#~ "Assuming you have the following volume" +#~ " directive in your ``docker-compose.yml``" +#~ " (it's the default): " +#~ "``/srv/funkwhale/data/music:/music:ro``, then add " +#~ "the following to your .env file::" +#~ msgstr "" + +#~ msgid "Celery beat can be enabled easily::" +#~ msgstr "" + +#~ msgid "" +#~ "For these endpoints to work, you " +#~ "will need to update your nginx " +#~ "configuration, and add the following " +#~ "snippets::" +#~ msgstr "" + +#~ msgid "" +#~ "A new ``FEDERATION_ENABLED`` env var " +#~ "have also been added to control " +#~ "whether federation is enabled or not " +#~ "on the application side. This settings" +#~ " defaults to True, which should have" +#~ " no consequences at the moment, since" +#~ " actual federation is not implemented " +#~ "and the only available endpoints are " +#~ "for testing purposes." +#~ msgstr "" + +#~ msgid "" +#~ "Add ``FEDERATION_ENABLED=false`` to your .env" +#~ " file to disable federation on the" +#~ " application side." +#~ msgstr "" + +#~ msgid "" +#~ "On non docker setups, you'll have " +#~ "to update the [Service] block of " +#~ "your funkwhale-server systemd unit file" +#~ " to launch the application server " +#~ "using daphne instead of gunicorn." +#~ msgstr "" + +#~ msgid "*This is still an alpha feature at the moment, please report any bug.*" +#~ msgstr "" + +#~ msgid "" +#~ "Shortcuts: can now use the ``f`` " +#~ "shortcut to toggle the currently playing" +#~ " track as a favorite (#53)" +#~ msgstr "" diff --git a/docs/locales/fr/LC_MESSAGES/contributor/index.po b/docs/locales/fr/LC_MESSAGES/contributor/index.po index 09f70b3ce..6827942b0 100644 --- a/docs/locales/fr/LC_MESSAGES/contributor/index.po +++ b/docs/locales/fr/LC_MESSAGES/contributor/index.po @@ -3,29 +3,35 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-24 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/contributor-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../contributor/index.md:1 msgid "Get started" -msgstr "" +msgstr "Commencer" #: ../../contributor/index.md:4 msgid "" "Are you a software developer? Check out our [developer " "documentation](../developer/index.md) to contribute to our codebase." msgstr "" +"Êtes-vous un développeur de logiciels ? Jetez un œil à notre [documentation " +"des développeurs](../developer/index.md) pour contribuer à notre base de " +"code." #: ../../contributor/index.md:7 msgid "" @@ -34,10 +40,15 @@ msgid "" " specific field or just starting out, we welcome any contributions and " "will support you with any task you take on." msgstr "" +"Funkwhale est un projet de logiciel dirigé par la communauté, nous dépendons " +"donc de notre communauté pour donner leur temps et compétence. Que vous ayez " +"de l’expérience dans un domaine particulier ou débutez seulement, nous " +"accueillons toutes les contributions et vous assisterons pour toutes les " +"tâches que vous entreprendrez." #: ../../contributor/index.md:9 msgid "Contribute to Funkwhale's documentation" -msgstr "" +msgstr "Contribuer à la documentation de Funkwhale" #: ../../contributor/index.md:11 msgid "" @@ -45,10 +56,14 @@ msgid "" "[documentation guide](documentation.md) takes you through everything you " "need to know to contribute to the Funkwhale documentation hub." msgstr "" +"Vous avez un don pour l'écriture ? Vous voulez apprendre aux gens comment " +"les choses fonctionnent ? Notre [guide de documentation](documentation.md) " +"vous explique tout ce que vous devez savoir pour contribuer au pôle de " +"documentation de Funkwhale." #: ../../contributor/index.md:13 msgid "Translate Funkwhale" -msgstr "" +msgstr "Traduire Funkwhale" #: ../../contributor/index.md:15 msgid "" @@ -57,6 +72,10 @@ msgid "" " the [translation guide](translation.md) to start contributing " "translations in your language." msgstr "" +"Êtes-vous un linguiste confirmé ? Nous cherchons toujours à augmenter le " +"nombre de langues proposées dans nos applications, nos sites web et notre " +"documentation. Consultez le [guide de traduction](translation.md) pour " +"commencer à contribuer aux traductions dans votre langue." #~ msgid "" #~ "Are you a software developer? Check " @@ -64,4 +83,3 @@ msgstr "" #~ "documentation](../developer_documentation/index.md) to " #~ "contribute to our codebase." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/contributor/translation.po b/docs/locales/fr/LC_MESSAGES/contributor/translation.po index 776c0286f..dabbfbe0f 100644 --- a/docs/locales/fr/LC_MESSAGES/contributor/translation.po +++ b/docs/locales/fr/LC_MESSAGES/contributor/translation.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/contributor-translation/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../contributor_documentation/translation.md:1 msgid "Translate Funkwhale" -msgstr "" +msgstr "Traduire Funkwhale" #: ../../contributor_documentation/translation.md:3 msgid "" @@ -27,16 +30,22 @@ msgid "" "experience to all users. All of our UX copy and documentation is written " "in American English. This isn't accessible to all users." msgstr "" +"Funkwhale dépend de traductions de la communauté pour fournir une expérience " +"localisée pour tous les utilisateurs. Toutes nos copies d’expérience " +"utilisateur et documentation sont écrits en anglais américain. Ceci n’est " +"pas accessible à tous les utilisateurs." #: ../../contributor_documentation/translation.md:5 msgid "" "If you are interested in helping us reach more users, we welcome " "contributions in all languages!" msgstr "" +"Si vous êtes intéressé à nous aider à toucher plus d’utilisateurs, nous " +"accueillons les contributions dans toutes les langues !" #: ../../contributor_documentation/translation.md:7 msgid "Language coordination" -msgstr "" +msgstr "Coordination des langues" #: ../../contributor_documentation/translation.md:9 msgid "" @@ -46,6 +55,12 @@ msgid "" "your language isn't available in our platform yet, reach out on the forum" " and we'll set it up." msgstr "" +"Chaque équipe de langue requiert un responsable qui peut vérifier les " +"traductions. Vous pouvez voir une liste des langues et les équipes des " +"responsables [sur notre forum](https://forum.funkwhale.audio/d/107" +"-coordinate-translations). Si votre langue n’est pas encore disponible sur " +"notre plateforme, contactez-nous sur notre forum et nous mettrons cela en " +"place." #: ../../contributor_documentation/translation.md:11 msgid "" @@ -56,10 +71,17 @@ msgid "" "know [on the forum](https://forum.funkwhale.audio/d/18-language-specific-" "communities)." msgstr "" +"Nous pouvons aussi créer des sections du forum qui sont spécifiques à un " +"langage pour permettre aux utilisateurs de discuter de choses dans une autre " +"langue que l’anglais. Les sections spécifiques à une langue requièrent des " +"modérateurs qui peuvent faire respecter le Code de conduite. Si vous êtes " +"intéressé dans la modération des sections spécifiques à une langue, faites-" +"le nous savoir [sur le forum](https://forum.funkwhale.audio/d/18-language-" +"specific-communities)." #: ../../contributor_documentation/translation.md:13 msgid "Weblate" -msgstr "" +msgstr "Weblate" #: ../../contributor_documentation/translation.md:15 msgid "" @@ -67,6 +89,9 @@ msgid "" "platform. Weblate provides an easy-to-use web frontend for submitting " "localized strings." msgstr "" +"Funkwhale utilise [Weblate](https://weblate.org) comme plateforme de " +"traduction. Weblate fournit une interface web facile à utiliser pour " +"soumettre des chaînes localisées." #: ../../contributor_documentation/translation.md:17 msgid "" @@ -75,26 +100,29 @@ msgid "" "to set up your language preferences. The following projects are available" " for translation:" msgstr "" +"Pour débuter, créez un compte sur notre [instance Weblate](https://translate." +"funkwhale.audio) et suivez les instructions pour configurer vos préférences " +"de langage. Les projets suivants sont disponibles pour la traduction :" #: ../../contributor_documentation/translation.md:19 msgid "Funkwhale: The Funkwhale web app" -msgstr "" +msgstr "Funkwhale : L’application web de Funkwhale" #: ../../contributor_documentation/translation.md:20 msgid "Funkwhale for Android: Our official Android app" -msgstr "" +msgstr "Funkwhale pour Android : Notre application Android officielle" #: ../../contributor_documentation/translation.md:21 msgid "Funkwhale.audio: Our website" -msgstr "" +msgstr "Funkwhale.audio : Notre site web" #: ../../contributor_documentation/translation.md:22 msgid "Documentation: This documentation hub" -msgstr "" +msgstr "Documentation : Ce centre de documentation" #: ../../contributor_documentation/translation.md:24 msgid "Guidelines" -msgstr "" +msgstr "Directives" #: ../../contributor_documentation/translation.md:26 msgid "" @@ -102,18 +130,23 @@ msgid "" "consistent with the source language. Where applicable, follow these " "guidelines:" msgstr "" +"Nous faisons confiance à chaque équipe linguistique pour fournir des " +"traductions dont le ton est cohérent avec celui de la langue source. Le cas " +"échéant, suivez ces lignes directrices :" #: ../../contributor_documentation/translation.md:28 msgid "Use gender-neutral language" -msgstr "" +msgstr "Utilisez un langage non genré" #: ../../contributor_documentation/translation.md:29 msgid "Use informal speech patterns, including contractions" -msgstr "" +msgstr "Utilisez des modes d'expression informels, y compris des contractions" #: ../../contributor_documentation/translation.md:30 msgid "" "Use sentence case for all content, including titles. For example: " "\"Language coordination\" rather than \"Language Coordination\"" msgstr "" - +"Utilisez les casses de phrase pour tout le contenu, y compris les titres. " +"Par exemple : \"Coordination linguistique\" plutôt que \"Coordination " +"Linguistique\"" diff --git a/docs/locales/fr/LC_MESSAGES/developer/api/index.po b/docs/locales/fr/LC_MESSAGES/developer/api/index.po index 568fc7867..4729549e6 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/api/index.po +++ b/docs/locales/fr/LC_MESSAGES/developer/api/index.po @@ -3,31 +3,34 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-api-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/api/index.md:7 msgid "API explorer" -msgstr "" +msgstr "Explorateur API" #: ../../developer_documentation/api/index.md:7 msgid "Resources" -msgstr "" +msgstr "Ressources" #: ../../developer_documentation/api/index.md:1 msgid "Funkwhale API" -msgstr "" +msgstr "API Funkwhale" #: ../../developer_documentation/api/index.md:3 msgid "" @@ -37,6 +40,10 @@ msgid "" "is the central component of the project and houses the application's " "logic." msgstr "" +"l’API Funkwhale est un [API REST](https://developer.mozilla.org/en-US/docs/" +"Glossary/REST) écrit en [Python](https://www.python.org/) utilisant[Django " +"REST framework](https://www.django-rest-framework.org/). C’est le composant " +"central du projet et abrite la logique de l’application." #: ../../developer_documentation/api/index.md:5 msgid "" @@ -45,4 +52,8 @@ msgid "" "currently working on Funkwhale API v2, but this is a work in progress and" " not yet ready for production use." msgstr "" - +"L'API actuelle (v1) est **stable**, ce qui signifie que nous nous engageons " +"à ne pas introduire de changements radicaux et à maintenir la compatibilité. " +"Nous travaillons actuellement sur l'API Funkwhale v2, mais il s'agit d'un " +"travail en cours et il n'est pas encore prêt pour une utilisation en " +"production." diff --git a/docs/locales/fr/LC_MESSAGES/developer/contribute/index.po b/docs/locales/fr/LC_MESSAGES/developer/contribute/index.po index 550b1cbd9..2701e4e4d 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/contribute/index.po +++ b/docs/locales/fr/LC_MESSAGES/developer/contribute/index.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-contribute-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/contribute/index.md:1 msgid "Contribute to the Funkwhale codebase" -msgstr "" +msgstr "Contribuer à la base de code Funkwhale" #: ../../developer_documentation/contribute/index.md:3 msgid "" @@ -27,4 +30,7 @@ msgid "" " from anyone! If you want to get involved with Funkwhale development, " "check the guides in this section." msgstr "" - +"Funkwhale est un projet à code source ouvert, ce qui veut dire que nous " +"accueillons les contributions de tout un chacun ! Si vous désirez vous " +"impliquer dans le développement de Funkwhale, regardez les guides dans cette " +"section." diff --git a/docs/locales/fr/LC_MESSAGES/developer/federation/index.po b/docs/locales/fr/LC_MESSAGES/developer/federation/index.po index 6c33e8123..91aa93bb1 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/federation/index.po +++ b/docs/locales/fr/LC_MESSAGES/developer/federation/index.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-federation-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/federation/index.md:1 msgid "Funkwhale federation" -msgstr "" +msgstr "Fédération de Funkwhale" #: ../../developer_documentation/federation/index.md:4 msgid "" @@ -27,6 +30,10 @@ msgid "" "federation. If you notice an issue, please open a thread on [our " "forum](https://forum.funkwhale.audio/t/documentation)." msgstr "" +"Nous nous efforçons de maintenir ce document à jour afin qu'il reflète " +"l'état actuel de la fédération. Si vous constatez un problème, veuillez " +"ouvrir un fil de discussion sur [notre forum] (https://forum.funkwhale.audio/" +"t/documentation)." #: ../../developer_documentation/federation/index.md:7 msgid "" @@ -1002,4 +1009,3 @@ msgid "" "Funkwhale also attributes all objects on a domain with the domain's " "[Service actor](#service-actor)" msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/developer/index.po b/docs/locales/fr/LC_MESSAGES/developer/index.po index 6036f40bf..d1ce9ce82 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/index.po +++ b/docs/locales/fr/LC_MESSAGES/developer/index.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/index.md:1 msgid "Get started" -msgstr "" +msgstr "Commencer" #: ../../developer_documentation/index.md:3 msgid "" @@ -28,10 +31,14 @@ msgid "" " stuck in! The Funkwhale community will guide you through the process and" " help you grow your confidence." msgstr "" +"Funkwhale accueille les contributions de tous développeurs. Si c’est la " +"première fois que vous contribuez à un projet à code source ouvert, n’ayez " +"pas peur d’être bloqué ! La communauté Funkwhale va vous guider dans ce " +"processus et vous aider à gagner en confiance." #: ../../developer_documentation/index.md:5 msgid "Set up your development environment" -msgstr "" +msgstr "Configurez votre environnement de développement" #: ../../developer_documentation/index.md:7 msgid "" @@ -39,10 +46,13 @@ msgid "" "the [guides in the setup section](setup/index.md) to set up an " "environment that's right for you." msgstr "" +"Avance de commencer, vous devez configurer un environnement de " +"développement. Suivez les [guides dans la section de configuration](setup/" +"index.md) pour configurer un environnement qui vous correspond." #: ../../developer_documentation/index.md:9 msgid "Read up on our processes" -msgstr "" +msgstr "En savoir plus sur nos procédures" #: ../../developer_documentation/index.md:11 msgid "" @@ -51,14 +61,19 @@ msgid "" "the [guides in the workflows section](workflows/index.md) to get a better" " understanding of what you need to do." msgstr "" +"Le projet Funkwhale suit quelques procédures pour faciliter la gestion des " +"contributions. Si vous n’est pas certain de savoir comment commencer, jetez " +"un œil aux [guides dans la section des flux de travail](workflows/index.md) " +"pour avoir une meilleur compréhension de ce que vous devez faire." #: ../../developer_documentation/index.md:13 msgid "Contribute to the codebase" -msgstr "" +msgstr "Contribuer à la base de code" #: ../../developer_documentation/index.md:15 msgid "" "Ready to get stuck in? Take a look at the [contribution " "guides](contribute/index.md) and start making your changes!" msgstr "" - +"Prêt à vous lancer ? Consultez les [guides de contribution] (contribute/index" +".md) et commencez à apporter vos modifications !" diff --git a/docs/locales/fr/LC_MESSAGES/developer/plugins/create.po b/docs/locales/fr/LC_MESSAGES/developer/plugins/create.po index a2a85e811..86c91feec 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/plugins/create.po +++ b/docs/locales/fr/LC_MESSAGES/developer/plugins/create.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-plugins-create/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/plugins/create.md:1 @@ -30,7 +33,7 @@ msgstr "" #: ../../developer_documentation/plugins/create.md:10 msgid "Before you begin" -msgstr "" +msgstr "Avant de commencer" #: ../../developer_documentation/plugins/create.md:12 msgid "" @@ -334,4 +337,3 @@ msgstr "" #: ../../developer_documentation/plugins/create.md:200 msgid "The browser returns the message \"You're a wizard Harry\"" msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/developer/plugins/index.po b/docs/locales/fr/LC_MESSAGES/developer/plugins/index.po index a3491cd9d..09ec189e1 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/plugins/index.po +++ b/docs/locales/fr/LC_MESSAGES/developer/plugins/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-24 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-plugins-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/plugins/index.md:7 msgid "Resources" -msgstr "" +msgstr "Ressources" #: ../../developer_documentation/plugins/index.md:1 msgid "Funkwhale plugins" -msgstr "" +msgstr "Plugins Funkwhale" #: ../../developer_documentation/plugins/index.md:3 msgid "" @@ -32,10 +35,16 @@ msgid "" "support for third-party services, or introduce cosmetic changes to the " "Funkwhale webapp." msgstr "" +"Des plugins peuvent être utilisés pour étendre les fonctionnalités de " +"Funkwhale sans avoir à toucher le code sous-jacent. Les plugins peuvent " +"étendre les fonctionnalités existantes, ajouter le support pour des services " +"tiers ou inclure des changements cosmétiques à l’application web de " +"Funkwhale." #: ../../developer_documentation/plugins/index.md:5 msgid "" "Plugins have been supported since Funkwhale 1.0. Some core plugins, such " "as the standard Scrobbler plugin, are maintained by the Funkwhale team." msgstr "" - +"Les plugins sont supportés depuis Funkwhale 1.0. Certains plugins de base, " +"comme le plugin standard Scrobbler, sont maintenus par l’équipe de Funkwhale." diff --git a/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po b/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po index 217267660..2ba9f254a 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po +++ b/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-setup-gitpod/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/setup/gitpod.md:1 @@ -150,7 +153,7 @@ msgstr "" #: ../../developer_documentation/setup/gitpod.md:46 #: ../../developer_documentation/setup/gitpod.md:64 msgid "Environment variables" -msgstr "" +msgstr "Variables d’environnement" #: ../../developer_documentation/setup/gitpod.md:49 #: ../../developer_documentation/setup/gitpod.md:67 @@ -211,4 +214,3 @@ msgstr "" #: ../../developer_documentation/setup/gitpod.md:72 msgid "`funkwhale/funkwhale`" msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/developer/setup/index.po b/docs/locales/fr/LC_MESSAGES/developer/setup/index.po index dd5e99090..4d2b8de67 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/setup/index.po +++ b/docs/locales/fr/LC_MESSAGES/developer/setup/index.po @@ -3,31 +3,35 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-setup-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/setup/index.md:5 msgid "Choose your setup" -msgstr "" +msgstr "Choisissez votre configuration" #: ../../developer_documentation/setup/index.md:1 msgid "Set up your development environment" -msgstr "" +msgstr "Configurez votre environnement de développement" #: ../../developer_documentation/setup/index.md:3 msgid "" "Follow the instructions in these guides to set up your development " "environment." msgstr "" - +"Suivez les instructions dans ces guides pour configurer votre environnement " +"de développement." diff --git a/docs/locales/fr/LC_MESSAGES/developer/workflows/index.po b/docs/locales/fr/LC_MESSAGES/developer/workflows/index.po index 000fd7075..0d24eea54 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/workflows/index.po +++ b/docs/locales/fr/LC_MESSAGES/developer/workflows/index.po @@ -3,31 +3,36 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-workflows-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/workflows/index.md:5 msgid "Workflows" -msgstr "" +msgstr "Flux de travail" #: ../../developer_documentation/workflows/index.md:1 msgid "Development workflows" -msgstr "" +msgstr "Processus de développement" #: ../../developer_documentation/workflows/index.md:3 msgid "" "Funkwhale follows workflows for each area of development and release " "management. You can find a breakdown of these in this section." msgstr "" - +"Funkwhale suit des flux de travail pour chaque domaine du développement et " +"de la gestion des versions. Vous trouverez une description de ces flux dans " +"cette section." diff --git a/docs/locales/fr/LC_MESSAGES/developer/workflows/release.po b/docs/locales/fr/LC_MESSAGES/developer/workflows/release.po index 3787df5b8..88249b7f7 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/workflows/release.po +++ b/docs/locales/fr/LC_MESSAGES/developer/workflows/release.po @@ -8,80 +8,83 @@ msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:05+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" -#: ../../developer_documentation/workflows/release.md:1 +#: ../../developer/workflows/release.md:1 msgid "Make a release" msgstr "" -#: ../../developer_documentation/workflows/release.md:3 +#: ../../developer/workflows/release.md:3 msgid "" "Once we're ready to release a new version of the software, we can use the" " following process:" msgstr "" -#: ../../developer_documentation/workflows/release.md:5 +#: ../../developer/workflows/release.md:5 msgid "Export the new release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:11 +#: ../../developer/workflows/release.md:11 msgid "Export the previous release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:17 +#: ../../developer/workflows/release.md:17 msgid "" "Pull the latest version of the `develop` branch. Use `stable` if you're " "releasing a bugfix." msgstr "" -#: ../../developer_documentation/workflows/release.md +#: ../../developer/workflows/release.md msgid "Bugfix release" msgstr "" -#: ../../developer_documentation/workflows/release.md +#: ../../developer/workflows/release.md msgid "Feature release" msgstr "" -#: ../../developer_documentation/workflows/release.md:43 +#: ../../developer/workflows/release.md:43 msgid "Compile the changelog" msgstr "" -#: ../../developer_documentation/workflows/release.md:49 +#: ../../developer/workflows/release.md:49 msgid "Check the output and fix typos and mistakes" msgstr "" -#: ../../developer_documentation/workflows/release.md:50 +#: ../../developer/workflows/release.md:50 msgid "Add a list of contributors" msgstr "" -#: ../../developer_documentation/workflows/release.md:58 -msgid "Update the `__version__` variable to the next release version" +#: ../../developer/workflows/release.md:58 +msgid "Update the next release version" msgstr "" -#: ../../developer_documentation/workflows/release.md:64 +#: ../../developer/workflows/release.md:66 msgid "Commit all changes" msgstr "" -#: ../../developer_documentation/workflows/release.md:71 +#: ../../developer/workflows/release.md:73 msgid "Create a tag" msgstr "" -#: ../../developer_documentation/workflows/release.md:77 +#: ../../developer/workflows/release.md:79 msgid "Publish the new tag to GitLab" msgstr "" -#: ../../developer_documentation/workflows/release.md:83 +#: ../../developer/workflows/release.md:85 msgid "Merge your changes into the alternate branch" msgstr "" -#: ../../developer_documentation/workflows/release.md:107 +#: ../../developer/workflows/release.md:109 msgid "Don't forget to create a blog post to announce the new release!" msgstr "" +#~ msgid "Update the `__version__` variable to the next release version" +#~ msgstr "" + diff --git a/docs/locales/fr/LC_MESSAGES/developers/index.po b/docs/locales/fr/LC_MESSAGES/developers/index.po new file mode 100644 index 000000000..5719d970b --- /dev/null +++ b/docs/locales/fr/LC_MESSAGES/developers/index.po @@ -0,0 +1,35 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-01 10:35+0200\n" +"PO-Revision-Date: 2023-01-23 21:42+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developers-index/fr/>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.14.2\n" +"Generated-By: Babel 2.10.1\n" + +#: ../../developers/index.rst:2 +msgid "Developer documentation" +msgstr "Documentation pour les développeurs" + +#: ../../developers/index.rst:4 +msgid "" +"This documentation is targeted primarily at developers who want to " +"understand how Funkwhale works and how to build apps that integrate with " +"Funkwhale's ecosystem." +msgstr "" +"Cette documentation est destinée principalement aux développeurs qui veulent " +"comprendre comment fonctionne Funkwhale et comment créer des applications " +"qui s’intègrent à l’écosystème de Funkwhale." diff --git a/docs/locales/fr/LC_MESSAGES/glossary.po b/docs/locales/fr/LC_MESSAGES/glossary.po index 9d4402ffe..91e2e6988 100644 --- a/docs/locales/fr/LC_MESSAGES/glossary.po +++ b/docs/locales/fr/LC_MESSAGES/glossary.po @@ -3,71 +3,83 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-24 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/glossary-1/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../glossary.md:1 msgid "Glossary of terms" -msgstr "" +msgstr "Glossaire" #: ../../glossary.md:3 msgid "Funkwhale glossary" -msgstr "" +msgstr "Glossaire de Funkwhale" #: ../../glossary.md msgid "Pod" -msgstr "" +msgstr "Pod" #: ../../glossary.md:7 msgid "" "A pod is an instance of Funkwhale running on a server. Pods can " "communicate with one another across the {term}`Fediverse`." msgstr "" +"Un pod est une instance de Funkwhale exécutée sur un serveur. Les pods " +"peuvent communiquer entre eux à travers le {term}`Fediverse`." #: ../../glossary.md:3 msgid "Authenticated" -msgstr "" +msgstr "Authentifié" #: ../../glossary.md:10 msgid "" "Users who have an account on a Funkwhale pod. These users provide their " "authentication information when accessing content." msgstr "" +"Les utilisateurs qui ont un compte sur un pod de Funkwhale. Ces utilisateurs " +"fournissent leurs informations d’authentification en accédant au contenu." #: ../../glossary.md:6 msgid "Anonymous" -msgstr "" +msgstr "Anonyme" #: ../../glossary.md:13 msgid "" "Users who do not have an account on a Funkwhale pod. These users don't " "provide any authentication when accessing content." msgstr "" +"Les utilisateurs qui n’ont pas de compte sur un pod de Funkwhale. Ces " +"utilisateurs ne fournissent aucune authentification en accédant au contenu." #: ../../glossary.md:9 msgid "Permissions" -msgstr "" +msgstr "Permissions" #: ../../glossary.md:16 msgid "" "Additional rights that an administrator/moderator can grant to a user. " "Permissions grant access to menus and actions in Funkwhale." msgstr "" +"Droits additionnels qu’un·e administrateur·trice/modérateur·trice peut " +"accorder à un utilisateur. Les permissions accordent l’accès à des menus et " +"actions dans Funkwhale." #: ../../glossary.md:18 msgid "Available permissions:" -msgstr "" +msgstr "Permissions disponibles :" #: ../../glossary.md:20 msgid "" @@ -177,4 +189,3 @@ msgid "" "Scrobbling is the act of recording listen data. Services use this " "information to keep track of listening preferences and recommend music." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/index.po b/docs/locales/fr/LC_MESSAGES/index.po index 5ff8c56ed..2d7c9df23 100644 --- a/docs/locales/fr/LC_MESSAGES/index.po +++ b/docs/locales/fr/LC_MESSAGES/index.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../index.md:7 @@ -77,7 +80,7 @@ msgstr "" #: ../../index.md:132 ../../index.md:153 ../../index.md:174 ../../index.md:195 #: ../../index.md:220 msgid "Get started" -msgstr "" +msgstr "Commencer" #: ../../index.md:146 msgid "{fa}`wrench` Admins" @@ -118,4 +121,3 @@ msgid "" "Want to help make Funkwhale even better? Check out these guides for some " "ideas." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po b/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po index 3d8900b9e..b3f5c0821 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-content-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/content/delete_content.md:1 @@ -60,14 +63,14 @@ msgstr "" #: ../../moderator_documentation/content/delete_content.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator_documentation/content/delete_content.md:33 #: ../../moderator_documentation/content/delete_content.md:54 #: ../../moderator_documentation/content/delete_content.md:84 #: ../../moderator_documentation/content/delete_content.md:106 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../moderator_documentation/content/delete_content.md:34 #: ../../moderator_documentation/content/delete_content.md:85 @@ -161,11 +164,11 @@ msgstr "" #: ../../moderator_documentation/content/delete_content.md:47 #: ../../moderator_documentation/content/delete_content.md:68 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Supprimer`." #: ../../moderator_documentation/content/delete_content.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator_documentation/content/delete_content.md:55 #: ../../moderator_documentation/content/delete_content.md:107 @@ -213,4 +216,3 @@ msgstr "" #: ../../moderator_documentation/content/delete_content.md:125 msgid "You're done! You've deleted the selected objects from your pod." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/content/edits.po b/docs/locales/fr/LC_MESSAGES/moderator/content/edits.po index c76f15e27..259d4cd7f 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/content/edits.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/content/edits.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-content-edits/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/content/handle_edits.md:1 @@ -87,12 +91,12 @@ msgstr "" #: ../../moderator_documentation/content/handle_edits.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator_documentation/content/handle_edits.md:35 #: ../../moderator_documentation/content/handle_edits.md:48 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator_documentation/content/handle_edits.md:36 msgid "" @@ -133,7 +137,7 @@ msgstr "" #: ../../moderator_documentation/content/handle_edits.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator_documentation/content/handle_edits.md:49 msgid "" @@ -146,4 +150,3 @@ msgid "" "That's it! You've handled the edit request. You can use the filters on " "this page to search for historical requests." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/content/index.po b/docs/locales/fr/LC_MESSAGES/moderator/content/index.po index 393d13385..ddffbdc6a 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/content/index.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/content/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-content-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/content/index.md:5 msgid "Manage your pod's content" -msgstr "" +msgstr "Gérer le contenu de votre pod" #: ../../moderator_documentation/content/index.md:1 msgid "Moderate content on your pod" -msgstr "" +msgstr "Modérer le contenu de votre pod" #: ../../moderator_documentation/content/index.md:3 msgid "" @@ -31,4 +34,6 @@ msgid "" "pod. Use this permission to hide copyrighted content and remove offensive" " material." msgstr "" - +"Si vous avez la permission **Audiothèque**, vous pouvez changer le contenu " +"de votre pod. Utilisez cette permission pour cacher des contenus protégés " +"par le droit d’auteur et supprimer contenu offensant." diff --git a/docs/locales/fr/LC_MESSAGES/moderator/content/library.po b/docs/locales/fr/LC_MESSAGES/moderator/content/library.po index a8e8192e6..aa6d3fc3e 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/content/library.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/content/library.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-content-library/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/content/library_visibility.md:1 @@ -52,12 +56,12 @@ msgstr "" #: ../../moderator_documentation/content/library_visibility.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator_documentation/content/library_visibility.md:25 #: ../../moderator_documentation/content/library_visibility.md:40 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator_documentation/content/library_visibility.md:26 msgid "" @@ -112,7 +116,7 @@ msgstr "" #: ../../moderator_documentation/content/library_visibility.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator_documentation/content/library_visibility.md:41 msgid "" @@ -125,4 +129,3 @@ msgid "" "That's it! You've updated the library's visibility. You should contact " "the user informing them of the action." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/domains/add.po b/docs/locales/fr/LC_MESSAGES/moderator/domains/add.po index 58a41aa4b..6f124ba39 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/domains/add.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/domains/add.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-domains-add/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator/domains/add.md:1 @@ -46,11 +50,11 @@ msgstr "" #: ../../moderator/domains/add.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator/domains/add.md:20 ../../moderator/domains/add.md:32 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator/domains/add.md:21 msgid "" @@ -83,7 +87,7 @@ msgstr "" #: ../../moderator/domains/add.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator/domains/add.md:33 msgid "" @@ -104,4 +108,3 @@ msgstr "" #~ "is in your domains list, you can" #~ " [add moderation rules](add_rule.md) to it." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/domains/index.po b/docs/locales/fr/LC_MESSAGES/moderator/domains/index.po index 6fcaed6c5..3ac56c582 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/domains/index.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/domains/index.po @@ -3,31 +3,34 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-domains-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/domains/index.md:5 msgid "Manage external domains" -msgstr "" +msgstr "Gérer les domaines externes" #: ../../moderator_documentation/domains/index.md:16 msgid "Manage moderation rules" -msgstr "" +msgstr "Gérer les règles de modération" #: ../../moderator_documentation/domains/index.md:1 msgid "Moderate external domains" -msgstr "" +msgstr "Modérer les domaines externes" #: ../../moderator_documentation/domains/index.md:3 msgid "" @@ -35,4 +38,7 @@ msgid "" "with other domains. Use these rules to control access to content and " "interaction with users on other pods." msgstr "" - +"Vous pouvez ajouter des règles de modération pour contrôler comment votre " +"{term}`pod` interagit avec les autres domaines. Utilisez ces règles pour " +"contrôler l’accès au contenu et l’interaction avec les utilisateurs d’autres " +"pods." diff --git a/docs/locales/fr/LC_MESSAGES/moderator/domains/purge.po b/docs/locales/fr/LC_MESSAGES/moderator/domains/purge.po index 6142bbd3b..595f72a32 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/domains/purge.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/domains/purge.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-domains-purge/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/domains/purge_domain.md:1 @@ -51,12 +55,12 @@ msgstr "" #: ../../moderator_documentation/domains/purge_domain.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator_documentation/domains/purge_domain.md:24 #: ../../moderator_documentation/domains/purge_domain.md:38 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator_documentation/domains/purge_domain.md:25 msgid "" @@ -103,7 +107,7 @@ msgstr "" #: ../../moderator_documentation/domains/purge_domain.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator_documentation/domains/purge_domain.md:39 msgid "" @@ -116,4 +120,3 @@ msgid "" "You're done! Your pod clears all the content associated with the selected" " domains." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/add.po b/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/add.po index dda14c374..41af3407c 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/add.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/add.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-domains-rules-add/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/domains/add_rule.md:1 @@ -51,12 +55,12 @@ msgstr "" #: ../../moderator_documentation/domains/add_rule.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator_documentation/domains/add_rule.md:24 #: ../../moderator_documentation/domains/add_rule.md:41 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator_documentation/domains/add_rule.md:25 msgid "" @@ -124,7 +128,7 @@ msgstr "" #: ../../moderator_documentation/domains/add_rule.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator_documentation/domains/add_rule.md:42 msgid "" @@ -137,4 +141,3 @@ msgid "" "That's all there is to it! You've applied your moderation rule. The rule " "takes effect as soon as you create it." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/delete.po b/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/delete.po index f97ac630b..d65dacb8c 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/delete.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/delete.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-domains-rules-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/domains/delete_rule.md:1 @@ -43,12 +47,12 @@ msgstr "" #: ../../moderator_documentation/domains/delete_rule.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator_documentation/domains/delete_rule.md:20 #: ../../moderator_documentation/domains/delete_rule.md:34 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator_documentation/domains/delete_rule.md:21 msgid "" @@ -97,7 +101,7 @@ msgstr "" #: ../../moderator_documentation/domains/delete_rule.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator_documentation/domains/delete_rule.md:35 msgid "" @@ -110,4 +114,3 @@ msgid "" "That's it! You've deleted your moderation rule. Content from the domain " "will no longer get blocked." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/edit.po b/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/edit.po index e8c00462d..7edc4535d 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/edit.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/domains/rules/edit.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-domains-rules-edit/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/domains/edit_rule.md:1 @@ -48,12 +52,12 @@ msgstr "" #: ../../moderator_documentation/domains/edit_rule.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator_documentation/domains/edit_rule.md:24 #: ../../moderator_documentation/domains/edit_rule.md:43 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator_documentation/domains/edit_rule.md:25 msgid "" @@ -131,7 +135,7 @@ msgstr "" #: ../../moderator_documentation/domains/edit_rule.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator_documentation/domains/edit_rule.md:44 msgid "" @@ -142,4 +146,3 @@ msgstr "" #: ../../moderator_documentation/domains/edit_rule.md:59 msgid "You're done! The changes to the rule take effect as soon as you update it." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/index.po b/docs/locales/fr/LC_MESSAGES/moderator/index.po index b2a7872cf..0400c5e5a 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/index.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/index.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator/index.md:1 msgid "Get started" -msgstr "" +msgstr "Commencer" #: ../../moderator/index.md:3 msgid "" @@ -73,7 +76,7 @@ msgstr "" #: ../../moderator/index.md:22 msgid "Moderate content on your pod" -msgstr "" +msgstr "Modérer le contenu de votre pod" #: ../../moderator/index.md:24 msgid "" @@ -86,7 +89,7 @@ msgstr "" #: ../../moderator/index.md:26 msgid "Moderate external domains" -msgstr "" +msgstr "Modérer les domaines externes" #: ../../moderator/index.md:28 msgid "" @@ -145,4 +148,3 @@ msgstr "" #~ "listing](allow_listing/index.md) section to learn" #~ " how to handle your allow-list." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/reports/content.po b/docs/locales/fr/LC_MESSAGES/moderator/reports/content.po index c0d9ef58a..2014fed0b 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/reports/content.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/reports/content.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-reports-content/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator/reports/content.md:1 @@ -58,12 +62,12 @@ msgstr "" #: ../../moderator/reports/content.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator/reports/content.md:31 ../../moderator/reports/content.md:44 #: ../../moderator/reports/content.md:66 ../../moderator/reports/content.md:83 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator/reports/content.md:32 ../../moderator/reports/content.md:67 msgid "" @@ -98,7 +102,7 @@ msgstr "" #: ../../moderator/reports/content.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator/reports/content.md:45 ../../moderator/reports/content.md:84 msgid "" @@ -163,4 +167,3 @@ msgstr "" #~ "notes](internal_notes.md) to keep a record " #~ "of your changes." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/reports/notes.po b/docs/locales/fr/LC_MESSAGES/moderator/reports/notes.po index 6a9ce1db1..38bb5b3d3 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/reports/notes.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/reports/notes.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-reports-notes/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator/reports/notes.md:1 @@ -50,12 +54,12 @@ msgstr "" #: ../../moderator/reports/notes.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator/reports/notes.md:22 ../../moderator/reports/notes.md:34 #: ../../moderator/reports/notes.md:57 ../../moderator/reports/notes.md:69 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator/reports/notes.md:23 ../../moderator/reports/notes.md:58 msgid "" @@ -86,7 +90,7 @@ msgstr "" #: ../../moderator/reports/notes.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator/reports/notes.md:35 ../../moderator/reports/notes.md:70 msgid "" @@ -123,4 +127,3 @@ msgstr "" #~ msgid "[Search for the report](search_reports.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/reports/search.po b/docs/locales/fr/LC_MESSAGES/moderator/reports/search.po index 5c48c2f43..11f3808aa 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/reports/search.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/reports/search.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-reports-search/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator/reports/search.md:1 @@ -40,11 +44,11 @@ msgstr "" #: ../../moderator/reports/search.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator/reports/search.md:18 ../../moderator/reports/search.md:33 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator/reports/search.md:19 msgid "" @@ -85,7 +89,7 @@ msgstr "" #: ../../moderator/reports/search.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator/reports/search.md:34 msgid "" @@ -107,4 +111,3 @@ msgstr "" #~ " You can also update the [internal" #~ " notes](internal_notes.md) on the report." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/reports/users.po b/docs/locales/fr/LC_MESSAGES/moderator/reports/users.po index cf8832a9c..c11f2ee61 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/reports/users.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/reports/users.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-reports-users/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator/reports/users.md:1 @@ -44,11 +48,11 @@ msgstr "" #: ../../moderator/reports/users.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator/reports/users.md:20 ../../moderator/reports/users.md:30 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator/reports/users.md:21 msgid "" @@ -69,7 +73,7 @@ msgstr "" #: ../../moderator/reports/users.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator/reports/users.md:31 msgid "" @@ -124,4 +128,3 @@ msgstr "" #~ "notes](internal_notes.md) to keep a record " #~ "of your changes." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/reports/view.po b/docs/locales/fr/LC_MESSAGES/moderator/reports/view.po index fd11321cd..f0e312bcf 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/reports/view.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/reports/view.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/moderator-reports-view/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator/reports/view.md:1 @@ -50,11 +54,11 @@ msgstr "" #: ../../moderator/reports/view.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../moderator/reports/view.md:22 ../../moderator/reports/view.md:31 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../moderator/reports/view.md:23 msgid "" @@ -68,7 +72,7 @@ msgstr "" #: ../../moderator/reports/view.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../moderator/reports/view.md:32 msgid "" @@ -159,4 +163,3 @@ msgstr "" #~ "handle the reported [content](handle_content.md) " #~ "or [user](handle_users.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/activity.po b/docs/locales/fr/LC_MESSAGES/user/accounts/activity.po index d31520852..934c9146d 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/activity.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/activity.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-accounts-activity/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/activity_visibility.md:1 @@ -49,12 +53,12 @@ msgstr "" #: ../../user_documentation/accounts/activity_visibility.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/accounts/activity_visibility.md:17 #: ../../user_documentation/accounts/activity_visibility.md:29 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/accounts/activity_visibility.md:18 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -63,7 +67,7 @@ msgstr "" #: ../../user_documentation/accounts/activity_visibility.md:19 #: ../../user_documentation/accounts/activity_visibility.md:31 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/accounts/activity_visibility.md:20 #: ../../user_documentation/accounts/activity_visibility.md:32 @@ -84,7 +88,7 @@ msgstr "" #: ../../user_documentation/accounts/activity_visibility.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/accounts/activity_visibility.md:30 msgid "" @@ -97,4 +101,3 @@ msgid "" "That's it! You've updated your activity visibility. This change takes " "effect as soon as you update your settings." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/add.po b/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/add.po index 866a3096b..3812e1d41 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/add.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/add.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-accounts-avatar-add/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/add_avatar.md:1 @@ -29,12 +33,12 @@ msgstr "" #: ../../user_documentation/accounts/add_avatar.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/accounts/add_avatar.md:11 #: ../../user_documentation/accounts/add_avatar.md:23 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/accounts/add_avatar.md:12 msgid "" @@ -45,12 +49,12 @@ msgstr "" #: ../../user_documentation/accounts/add_avatar.md:13 #: ../../user_documentation/accounts/add_avatar.md:25 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/accounts/add_avatar.md:14 #: ../../user_documentation/accounts/add_avatar.md:26 msgid "Scroll down to the {guilabel}`Avatar` section." -msgstr "" +msgstr "Faire défiler jusqu'à la section {guilabel}`Avatar`." #: ../../user_documentation/accounts/add_avatar.md:15 msgid "Select {guilabel}`Browse…` to open the file picker." @@ -63,7 +67,7 @@ msgstr "" #: ../../user_documentation/accounts/add_avatar.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/accounts/add_avatar.md:24 msgid "" @@ -78,4 +82,3 @@ msgstr "" #: ../../user_documentation/accounts/add_avatar.md:32 msgid "Congratulations! You've updated your avatar." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/delete.po b/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/delete.po index 29139ca4e..baf132021 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/avatar/delete.po @@ -3,69 +3,77 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-accounts-avatar-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/delete_avatar.md:1 msgid "Remove your avatar" -msgstr "" +msgstr "Supprimer votre avatar" #: ../../user_documentation/accounts/delete_avatar.md:3 msgid "" "If you don't want to have an avatar any more, you can remove it. To do " "this:" msgstr "" +"Si vous ne souhaitez plus avoir d'avatar, vous pouvez le supprimer. Pour ce " +"faire :" #: ../../user_documentation/accounts/delete_avatar.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/accounts/delete_avatar.md:11 #: ../../user_documentation/accounts/delete_avatar.md:22 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/accounts/delete_avatar.md:12 msgid "Select your avatar to expand the user menu." -msgstr "" +msgstr "Sélectionnez votre avatar pour développer le menu utilisateur." #: ../../user_documentation/accounts/delete_avatar.md:13 #: ../../user_documentation/accounts/delete_avatar.md:24 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/accounts/delete_avatar.md:14 #: ../../user_documentation/accounts/delete_avatar.md:25 msgid "Scroll down to the {guilabel}`Avatar` section." -msgstr "" +msgstr "Faire défiler jusqu'à la section {guilabel}`Avatar`." #: ../../user_documentation/accounts/delete_avatar.md:15 #: ../../user_documentation/accounts/delete_avatar.md:26 msgid "Select {guilabel}`Remove`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Supprimer`." #: ../../user_documentation/accounts/delete_avatar.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/accounts/delete_avatar.md:23 msgid "Select your avatar to open the {guilabel}`Options` menu." -msgstr "" +msgstr "Sélectionnez votre avatar pour ouvrir le menu {guilabel}`Options`." #: ../../user_documentation/accounts/delete_avatar.md:30 msgid "" "That's it! You've removed your avatar from your account. Other users will" " only see the initials of your username when they visit your profile." msgstr "" - +"C'est fait ! Vous avez supprimé votre avatar de votre compte. Les autres " +"utilisateurs ne verront que les initiales de votre nom d'utilisateur " +"lorsqu'ils visiteront votre profil." diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/delete.po b/docs/locales/fr/LC_MESSAGES/user/accounts/delete.po index 974e45f51..dd5b4fa9e 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/delete.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-accounts-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/accounts/delete.md:1 @@ -77,11 +81,11 @@ msgstr "" #: ../../user/accounts/delete.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/accounts/delete.md:27 ../../user/accounts/delete.md:40 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user/accounts/delete.md:28 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -89,7 +93,7 @@ msgstr "" #: ../../user/accounts/delete.md:29 ../../user/accounts/delete.md:42 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user/accounts/delete.md:30 ../../user/accounts/delete.md:43 msgid "Scroll to the {guilabel}`Delete my account` section." @@ -109,7 +113,7 @@ msgstr "" #: ../../user/accounts/delete.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/accounts/delete.md:41 msgid "" @@ -128,4 +132,3 @@ msgstr "" #~ " You can [create another " #~ "account](create_account.md) at any time." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/email.po b/docs/locales/fr/LC_MESSAGES/user/accounts/email.po index 6f6a0e3f6..503e4cc30 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/email.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/email.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-accounts-email/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/change_email.md:1 @@ -27,12 +31,12 @@ msgstr "" #: ../../user_documentation/accounts/change_email.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/accounts/change_email.md:11 #: ../../user_documentation/accounts/change_email.md:24 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/accounts/change_email.md:12 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -41,7 +45,7 @@ msgstr "" #: ../../user_documentation/accounts/change_email.md:13 #: ../../user_documentation/accounts/change_email.md:26 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/accounts/change_email.md:14 #: ../../user_documentation/accounts/change_email.md:27 @@ -65,7 +69,7 @@ msgstr "" #: ../../user_documentation/accounts/change_email.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/accounts/change_email.md:25 msgid "" @@ -79,4 +83,3 @@ msgid "" "receive a confirmation email. Follow the instructions in this email to " "finish changing your email address." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/password.po b/docs/locales/fr/LC_MESSAGES/user/accounts/password.po index 3f075ee71..67aff6671 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/password.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/password.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-accounts-password/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/change_password.md:1 @@ -34,12 +38,12 @@ msgstr "" #: ../../user_documentation/accounts/change_password.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/accounts/change_password.md:15 #: ../../user_documentation/accounts/change_password.md:28 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/accounts/change_password.md:16 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -48,7 +52,7 @@ msgstr "" #: ../../user_documentation/accounts/change_password.md:17 #: ../../user_documentation/accounts/change_password.md:30 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/accounts/change_password.md:18 #: ../../user_documentation/accounts/change_password.md:31 @@ -72,7 +76,7 @@ msgstr "" #: ../../user_documentation/accounts/change_password.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/accounts/change_password.md:29 msgid "" @@ -85,4 +89,3 @@ msgid "" "That's it! Your password is reset. You need to use your new password to " "log in from now on." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po b/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po index 2fe02f4ab..169d1fa00 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-accounts-quota/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/check_quota.md:1 @@ -40,16 +43,18 @@ msgstr "" #: ../../user_documentation/accounts/check_quota.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/accounts/check_quota.md:15 #: ../../user_documentation/accounts/check_quota.md:26 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/accounts/check_quota.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/accounts/check_quota.md:17 #: ../../user_documentation/accounts/check_quota.md:28 @@ -57,6 +62,8 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Upload third-party " "content in a library`." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Téléverser du contenu " +"tiers dans une bibliothèque`." #: ../../user_documentation/accounts/check_quota.md:18 #: ../../user_documentation/accounts/check_quota.md:29 @@ -74,9 +81,8 @@ msgstr "" #: ../../user_documentation/accounts/check_quota.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/accounts/check_quota.md:27 msgid "Select the upload icon ({fa}`upload`) at the top of the screen" -msgstr "" - +msgstr "Sélectionnez l’icône de téléversement ({fa}`upload` en haut de l’écran" diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po index a291ed7d2..6b0866f92 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-artist-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/artist/delete.md:1 @@ -43,19 +46,21 @@ msgstr "" #: ../../user/channels/artist/delete.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/channels/artist/delete.md:23 #: ../../user/channels/artist/delete.md:38 #: ../../user/channels/artist/delete.md:66 #: ../../user/channels/artist/delete.md:80 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/artist/delete.md:24 #: ../../user/channels/artist/delete.md:67 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user/channels/artist/delete.md:25 #: ../../user/channels/artist/delete.md:40 @@ -106,12 +111,12 @@ msgstr "" #: ../../user/channels/artist/delete.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/channels/artist/delete.md:39 #: ../../user/channels/artist/delete.md:81 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user/channels/artist/delete.md:50 msgid "" @@ -177,4 +182,3 @@ msgstr "" #~ "[uploading it to your " #~ "channel](upload_artist.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po b/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po index 948fa8608..044342672 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-artist-upload/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/artist/upload.md:1 @@ -44,7 +47,7 @@ msgstr "" #: ../../user/channels/artist/upload.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/channels/artist/upload.md:21 #: ../../user/channels/artist/upload.md:34 @@ -53,13 +56,15 @@ msgstr "" #: ../../user/channels/artist/upload.md:129 #: ../../user/channels/artist/upload.md:147 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/artist/upload.md:22 #: ../../user/channels/artist/upload.md:71 #: ../../user/channels/artist/upload.md:130 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user/channels/artist/upload.md:23 #: ../../user/channels/artist/upload.md:36 @@ -100,13 +105,13 @@ msgstr "" #: ../../user/channels/artist/upload.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/channels/artist/upload.md:35 #: ../../user/channels/artist/upload.md:89 #: ../../user/channels/artist/upload.md:148 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user/channels/artist/upload.md:44 msgid "" @@ -350,4 +355,3 @@ msgstr "" #~ "play your content from their {term}`pods" #~ " <Pod>`." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/create.po b/docs/locales/fr/LC_MESSAGES/user/channels/create.po index 00a578db2..d8c9a3d67 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/create.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-create/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/create.md:1 @@ -49,16 +52,18 @@ msgstr "" #: ../../user/channels/create.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/channels/create.md:25 ../../user/channels/create.md:42 #: ../../user/channels/create.md:68 ../../user/channels/create.md:90 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/create.md:26 ../../user/channels/create.md:69 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user/channels/create.md:27 ../../user/channels/create.md:44 #: ../../user/channels/create.md:70 ../../user/channels/create.md:92 @@ -127,11 +132,11 @@ msgstr "" #: ../../user/channels/create.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/channels/create.md:43 ../../user/channels/create.md:91 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user/channels/create.md:56 msgid "" @@ -199,4 +204,3 @@ msgstr "" #~ " channel. Now you can [add some " #~ "episodes to it](upload_podcast.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/delete.po index 5fe9ac77f..4febbf7c1 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/delete.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/channels/delete_channel.md:1 @@ -35,16 +38,18 @@ msgstr "" #: ../../user_documentation/channels/delete_channel.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/channels/delete_channel.md:15 #: ../../user_documentation/channels/delete_channel.md:28 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../user_documentation/channels/delete_channel.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/channels/delete_channel.md:17 #: ../../user_documentation/channels/delete_channel.md:30 @@ -75,17 +80,16 @@ msgstr "" #: ../../user_documentation/channels/delete_channel.md:21 #: ../../user_documentation/channels/delete_channel.md:34 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Supprimer`." #: ../../user_documentation/channels/delete_channel.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/channels/delete_channel.md:29 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/channels/delete_channel.md:38 msgid "That's it! You deleted your channel." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/edit.po b/docs/locales/fr/LC_MESSAGES/user/channels/edit.po index 8d9b01a4d..937be8669 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/edit.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/edit.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-edit/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/channels/edit_channel.md:1 @@ -48,19 +52,21 @@ msgstr "" #: ../../user_documentation/channels/edit_channel.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/channels/edit_channel.md:25 #: ../../user_documentation/channels/edit_channel.md:43 #: ../../user_documentation/channels/edit_channel.md:70 #: ../../user_documentation/channels/edit_channel.md:93 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../user_documentation/channels/edit_channel.md:26 #: ../../user_documentation/channels/edit_channel.md:71 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/channels/edit_channel.md:27 #: ../../user_documentation/channels/edit_channel.md:45 @@ -138,12 +144,12 @@ msgstr "" #: ../../user_documentation/channels/edit_channel.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/channels/edit_channel.md:44 #: ../../user_documentation/channels/edit_channel.md:94 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/channels/edit_channel.md:58 msgid "" @@ -190,4 +196,3 @@ msgid "" " The changes also reflect on your podcast's {abbr}`RSS (Really Simple " "Syndication)` feed." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/follow.po b/docs/locales/fr/LC_MESSAGES/user/channels/follow.po index 3a860e5ea..b9c09f20c 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/follow.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/follow.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-follow/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/channels/follow_channel.md:1 @@ -73,7 +77,7 @@ msgstr "" #: ../../user_documentation/channels/follow_channel.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/channels/follow_channel.md:30 msgid "" @@ -114,7 +118,7 @@ msgstr "" #: ../../user_documentation/channels/follow_channel.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/channels/follow_channel.md:42 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -159,4 +163,3 @@ msgstr "" #: ../../user_documentation/channels/follow_channel.md:63 msgid "That's it! Your podcatcher fetches the podcast details from Funkwhale." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/index.po b/docs/locales/fr/LC_MESSAGES/user/channels/index.po index 81a22cf5e..7c646fb62 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/index.po @@ -3,35 +3,39 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/channels/index.md:12 msgid "Manage your channels" -msgstr "" +msgstr "Gérer vos chaînes" #: ../../user_documentation/channels/index.md:24 msgid "Manage channel content" -msgstr "" +msgstr "Gérer le contenu de la chaîne" #: ../../user_documentation/channels/index.md:37 msgid "Follow channels" -msgstr "" +msgstr "Suivre des chaînes" #: ../../user_documentation/channels/index.md:1 msgid "Channels" -msgstr "" +msgstr "Chaînes" #: ../../user_documentation/channels/index.md:3 msgid "" @@ -39,10 +43,13 @@ msgid "" "enable you to create and share your creations with the whole " "{term}`Fediverse`." msgstr "" +"Utilisez les chaînes pour publier votre propre contenu audio sur Funkwhale. " +"Les chaînes vous permettent de créer et de partager vos créations avec " +"l'ensemble du {term}`Fediverse`." #: ../../user_documentation/channels/index.md:5 msgid "Funkwhale supports two types of channel:" -msgstr "" +msgstr "Funkwhale supporte deux types de chaînes :" #: ../../user_documentation/channels/index.md:7 msgid "" @@ -50,12 +57,16 @@ msgid "" "also use their favorite {term}`podcatcher` to listen to podcasts using " "{abbr}`RSS (Really Simple Syndication)`." msgstr "" +"**Podcasts** – diffuser votre podcast sur Fediverse. Les auditeurs peuvent " +"également utiliser leur {term}`podcatcher` favori pour écouter les podcasts " +"en utilisant un {abbr}`RSS (Really Simple Syndication)`." #: ../../user_documentation/channels/index.md:8 msgid "**Artist Discography** – upload your own music and create a following." msgstr "" +"**Discographie d'artiste** – téléchargez votre propre musique et créez un " +"suivi." #: ../../user_documentation/channels/index.md:10 msgid "Follow the guides in this section to get started." -msgstr "" - +msgstr "Suivez les guides dans cette section pour commencer." diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po index 63fce5e0c..8cb0b0cc9 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-podcast-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/podcast/delete.md:1 @@ -43,19 +46,21 @@ msgstr "" #: ../../user/channels/podcast/delete.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/channels/podcast/delete.md:23 #: ../../user/channels/podcast/delete.md:38 #: ../../user/channels/podcast/delete.md:66 #: ../../user/channels/podcast/delete.md:80 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/podcast/delete.md:24 #: ../../user/channels/podcast/delete.md:67 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user/channels/podcast/delete.md:25 #: ../../user/channels/podcast/delete.md:40 @@ -106,12 +111,12 @@ msgstr "" #: ../../user/channels/podcast/delete.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/channels/podcast/delete.md:39 #: ../../user/channels/podcast/delete.md:81 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user/channels/podcast/delete.md:50 msgid "" @@ -177,4 +182,3 @@ msgstr "" #~ "[uploading it to your " #~ "channel](upload_podcast.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po index 4209908b9..49b4ab930 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-podcast-upload/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/podcast/upload.md:1 @@ -44,7 +47,7 @@ msgstr "" #: ../../user/channels/podcast/upload.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/channels/podcast/upload.md:21 #: ../../user/channels/podcast/upload.md:34 @@ -53,13 +56,15 @@ msgstr "" #: ../../user/channels/podcast/upload.md:129 #: ../../user/channels/podcast/upload.md:147 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/podcast/upload.md:22 #: ../../user/channels/podcast/upload.md:71 #: ../../user/channels/podcast/upload.md:130 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user/channels/podcast/upload.md:23 #: ../../user/channels/podcast/upload.md:36 @@ -100,13 +105,13 @@ msgstr "" #: ../../user/channels/podcast/upload.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/channels/podcast/upload.md:35 #: ../../user/channels/podcast/upload.md:89 #: ../../user/channels/podcast/upload.md:148 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user/channels/podcast/upload.md:44 msgid "" @@ -349,4 +354,3 @@ msgstr "" #~ "play your content from their {term}`pods" #~ " <Pod>`." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/rss.po b/docs/locales/fr/LC_MESSAGES/user/channels/rss.po index a3d510d2a..fd4b175ff 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/rss.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/rss.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-channels-rss/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/channels/subscribe_rss.md:1 @@ -36,7 +40,7 @@ msgstr "" #: ../../user_documentation/channels/subscribe_rss.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/channels/subscribe_rss.md:15 msgid "" @@ -68,7 +72,7 @@ msgstr "" #: ../../user_documentation/channels/subscribe_rss.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/channels/subscribe_rss.md:26 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -84,4 +88,3 @@ msgid "" "{guilabel}`Channels` page. Funkwhale updates the feed to make sure you " "always have the latest episodes." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/favorites/add.po b/docs/locales/fr/LC_MESSAGES/user/favorites/add.po index 46b46b078..eaf7a68ec 100644 --- a/docs/locales/fr/LC_MESSAGES/user/favorites/add.po +++ b/docs/locales/fr/LC_MESSAGES/user/favorites/add.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-favorites-add/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/favorites/add_favorites.md:1 @@ -39,7 +43,7 @@ msgstr "" #: ../../user_documentation/favorites/add_favorites.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/favorites/add_favorites.md:19 msgid "" @@ -55,7 +59,7 @@ msgstr "" #: ../../user_documentation/favorites/add_favorites.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/favorites/add_favorites.md:27 msgid "" @@ -133,4 +137,3 @@ msgstr "" #: ../../user_documentation/favorites/add_favorites.md:67 msgid "That's it! The track is in your favorites." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/favorites/index.po b/docs/locales/fr/LC_MESSAGES/user/favorites/index.po index f8f8868ff..22bee63fc 100644 --- a/docs/locales/fr/LC_MESSAGES/user/favorites/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/favorites/index.po @@ -3,31 +3,35 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-favorites-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/favorites/index.md:5 msgid "Manage your favorites" -msgstr "" +msgstr "Gérer vos favoris" #: ../../user_documentation/favorites/index.md:1 msgid "Favorites" -msgstr "" +msgstr "Favoris" #: ../../user_documentation/favorites/index.md:3 msgid "" "Your favorites is a list of tracks you've liked while listening on " "Funkwhale. Follow the guides in this section to manage your favorites." msgstr "" - +"Vos favoris est une liste de pistes que vous avez aimé lors de votre écoute " +"sur Funkwhale. Suivez les guides dans cette section pour gérer vos favoris." diff --git a/docs/locales/fr/LC_MESSAGES/user/favorites/remove.po b/docs/locales/fr/LC_MESSAGES/user/favorites/remove.po index b7e366a04..7ac1cfb7d 100644 --- a/docs/locales/fr/LC_MESSAGES/user/favorites/remove.po +++ b/docs/locales/fr/LC_MESSAGES/user/favorites/remove.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-favorites-remove/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/favorites/remove_favorites.md:1 @@ -40,7 +44,7 @@ msgstr "" #: ../../user_documentation/favorites/remove_favorites.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/favorites/remove_favorites.md:19 msgid "" @@ -62,7 +66,7 @@ msgstr "" #: ../../user_documentation/favorites/remove_favorites.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/favorites/remove_favorites.md:28 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -182,4 +186,3 @@ msgstr "" #: ../../user_documentation/favorites/remove_favorites.md:97 msgid "That's it! You've removed the track from your favorites." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/index.po b/docs/locales/fr/LC_MESSAGES/user/index.po index 38e68a2eb..176ead624 100644 --- a/docs/locales/fr/LC_MESSAGES/user/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/index.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-04 12:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/index.md:1 msgid "Get started" -msgstr "" +msgstr "Commencer" #: ../../user_documentation/index.md:3 msgid "" @@ -119,4 +122,3 @@ msgid "" " Check out our [Plugins](plugins/index.md) section for details about our " "plugins and how to use them." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po index ccbbf8b6b..a8048f55e 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-content-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/delete_content.md:1 @@ -34,16 +37,18 @@ msgstr "" #: ../../user_documentation/libraries/delete_content.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/libraries/delete_content.md:15 #: ../../user_documentation/libraries/delete_content.md:32 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/delete_content.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/libraries/delete_content.md:17 #: ../../user_documentation/libraries/delete_content.md:34 @@ -51,21 +56,27 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Upload third-party " "content in a library`." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Téléverser du contenu " +"tiers dans une bibliothèque`." #: ../../user_documentation/libraries/delete_content.md:18 #: ../../user_documentation/libraries/delete_content.md:35 msgid "A screen appears showing your upload quota and your libraries." msgstr "" +"Un écran s'affiche, indiquant votre quota de téléchargement et vos " +"bibliothèques." #: ../../user_documentation/libraries/delete_content.md:19 #: ../../user_documentation/libraries/delete_content.md:36 msgid "Select {guilabel}`Library Details` under the library you want to edit." msgstr "" +"Sélectionnez {guilabel}`Détails de la bibliothèque` sous la bibliothèque que " +"vous voulez éditer." #: ../../user_documentation/libraries/delete_content.md:20 #: ../../user_documentation/libraries/delete_content.md:37 msgid "Select the {guilabel}`✎ Edit` button at the top of the screen." -msgstr "" +msgstr "Sélectionnez le bouton {guilabel}`✎ Modifier` en haut de l'écran." #: ../../user_documentation/libraries/delete_content.md:21 #: ../../user_documentation/libraries/delete_content.md:38 @@ -98,13 +109,12 @@ msgstr "" #: ../../user_documentation/libraries/delete_content.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/libraries/delete_content.md:33 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/libraries/delete_content.md:46 msgid "That's it! You've successfully deleted the content from your library." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/edit.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/edit.po index ba075b563..24fbf0b90 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/edit.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/edit.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-content-edit/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/libraries/content/edit.md:1 @@ -43,7 +47,7 @@ msgstr "" #: ../../user/libraries/content/edit.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/libraries/content/edit.md:23 msgid "" @@ -119,7 +123,7 @@ msgstr "" #: ../../user/libraries/content/edit.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/libraries/content/edit.md:40 #: ../../user/libraries/content/edit.md:85 @@ -292,4 +296,3 @@ msgstr "" #~ "helpful if the content isn't " #~ "[tagged](./tag_music.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/tag.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/tag.po index 519bdf44f..80e3a7d7b 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/tag.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/tag.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" #: ../../user/libraries/content/tag.md:1 msgid "Tag your content with Picard" @@ -23,9 +23,10 @@ msgstr "" #: ../../user/libraries/content/tag.md:3 msgid "" -"Funkwhale relies on [ID3 tags](https://id3.org/) to sort audio content. " -"ID3 tags tell Funkwhale information about your files. Funkwhale uses this" -" information to display your content in your {term}`pod`." +"Funkwhale relies on [ID3 tags](https://wikipedia.org/wiki/ID3) to sort " +"audio content. ID3 tags tell Funkwhale information about your files. " +"Funkwhale uses this information to display your content in your " +"{term}`pod`." msgstr "" #: ../../user/libraries/content/tag.md:5 @@ -356,3 +357,12 @@ msgstr "" #~ " these to a library](upload_content.md)" #~ msgstr "" +#~ msgid "" +#~ "Funkwhale relies on [ID3 " +#~ "tags](https://id3.org/) to sort audio content." +#~ " ID3 tags tell Funkwhale information " +#~ "about your files. Funkwhale uses this" +#~ " information to display your content " +#~ "in your {term}`pod`." +#~ msgstr "" + diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po index 29894974a..48d929175 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-content-upload/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/libraries/content/upload.md:1 @@ -41,16 +44,18 @@ msgstr "" #: ../../user/libraries/content/upload.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/libraries/content/upload.md:17 #: ../../user/libraries/content/upload.md:31 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/libraries/content/upload.md:18 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user/libraries/content/upload.md:19 #: ../../user/libraries/content/upload.md:33 @@ -58,11 +63,15 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Upload third-party " "content in a library`." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Téléverser du contenu " +"tiers dans une bibliothèque`." #: ../../user/libraries/content/upload.md:20 #: ../../user/libraries/content/upload.md:34 msgid "A screen appears showing your upload quota and your libraries." msgstr "" +"Un écran s'affiche, indiquant votre quota de téléchargement et vos " +"bibliothèques." #: ../../user/libraries/content/upload.md:21 #: ../../user/libraries/content/upload.md:35 @@ -90,7 +99,7 @@ msgstr "" #: ../../user/libraries/content/upload.md:32 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user/libraries/content/upload.md:36 msgid "" @@ -113,4 +122,3 @@ msgstr "" #~ "make sure to [tag your files " #~ "well](tag_music.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/create.po b/docs/locales/fr/LC_MESSAGES/user/libraries/create.po index 796cff1f0..72563fc56 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/create.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-create/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/create_library.md:1 @@ -39,16 +42,18 @@ msgstr "" #: ../../user_documentation/libraries/create_library.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/libraries/create_library.md:17 #: ../../user_documentation/libraries/create_library.md:36 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/create_library.md:18 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/libraries/create_library.md:19 #: ../../user_documentation/libraries/create_library.md:38 @@ -56,6 +61,8 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Upload third-party " "content in a library`." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Téléverser du contenu " +"tiers dans une bibliothèque`." #: ../../user_documentation/libraries/create_library.md:20 #: ../../user_documentation/libraries/create_library.md:39 @@ -121,11 +128,11 @@ msgstr "" #: ../../user_documentation/libraries/create_library.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/libraries/create_library.md:37 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/libraries/create_library.md:53 msgid "" @@ -138,4 +145,3 @@ msgid "" "Well done! You've created your library. Now you can add some content to " "it." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po b/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po index cbdb96b82..69b45dae7 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po @@ -3,44 +3,51 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/delete_library.md:1 msgid "Delete a library" -msgstr "" +msgstr "Supprimer une audiothèque" #: ../../user_documentation/libraries/delete_library.md:4 msgid "Deleting a library also deletes all content in the library." msgstr "" +"Supprimer une audiothèque supprime aussi tout le contenu de cette " +"audiothèque." #: ../../user_documentation/libraries/delete_library.md:7 msgid "You can delete a library at any time. To do this:" -msgstr "" +msgstr "Vous pouvez supprimer une audiothèque à tout moment. Pour ce faire :" #: ../../user_documentation/libraries/delete_library.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/libraries/delete_library.md:15 #: ../../user_documentation/libraries/delete_library.md:29 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../user_documentation/libraries/delete_library.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/libraries/delete_library.md:17 #: ../../user_documentation/libraries/delete_library.md:31 @@ -48,41 +55,48 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Upload third-party " "content in a library`." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Téléverser du contenu " +"tiers dans une bibliothèque`." #: ../../user_documentation/libraries/delete_library.md:18 #: ../../user_documentation/libraries/delete_library.md:32 msgid "A screen appears showing your upload quota and your libraries." msgstr "" +"Un écran s'affiche, indiquant votre quota de téléchargement et vos " +"bibliothèques." #: ../../user_documentation/libraries/delete_library.md:19 #: ../../user_documentation/libraries/delete_library.md:33 msgid "Select {guilabel}`Library Details` under the library you want to edit." msgstr "" +"Sélectionnez {guilabel}`Détails de la bibliothèque` sous la bibliothèque que " +"vous voulez éditer." #: ../../user_documentation/libraries/delete_library.md:20 #: ../../user_documentation/libraries/delete_library.md:34 msgid "Select the {guilabel}`✎ Edit` button at the top of the screen." -msgstr "" +msgstr "Sélectionnez le bouton {guilabel}`✎ Modifier` en haut de l'écran." #: ../../user_documentation/libraries/delete_library.md:21 #: ../../user_documentation/libraries/delete_library.md:35 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Supprimer`." #: ../../user_documentation/libraries/delete_library.md:22 #: ../../user_documentation/libraries/delete_library.md:36 msgid "Select {guilabel}`Delete library` on the warning notice that appears." msgstr "" +"Sélectionnez {guilabel}`Supprimer l’audiothèque` sur la notice de warning " +"qui apparaît." #: ../../user_documentation/libraries/delete_library.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/libraries/delete_library.md:30 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/libraries/delete_library.md:40 msgid "That's it! You've deleted your library and all its content." -msgstr "" - +msgstr "C’est tout ! Vous avez supprimé votre audiothèque et tout son contenu." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/edit.po b/docs/locales/fr/LC_MESSAGES/user/libraries/edit.po index 7eb7fe0a8..a1e227c4f 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/edit.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/edit.po @@ -3,40 +3,48 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-edit/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/edit_library.md:1 msgid "Edit a library" -msgstr "" +msgstr "Modifier une bibliothèque" #: ../../user_documentation/libraries/edit_library.md:3 msgid "You can update the details of your libraries at any time. To do this:" msgstr "" +"Vous pouvez mettre à jour les détails de vos bibliothèques à tout moment. " +"Pour ce faire :" #: ../../user_documentation/libraries/edit_library.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/libraries/edit_library.md:11 #: ../../user_documentation/libraries/edit_library.md:28 msgid "Log in to your {term}`pod`." -msgstr "" +msgstr "Connectez-vous à votre {term}`pod`." #: ../../user_documentation/libraries/edit_library.md:12 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/libraries/edit_library.md:13 #: ../../user_documentation/libraries/edit_library.md:30 @@ -44,41 +52,47 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Upload third-party " "content in a library`." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Téléverser du contenu " +"tiers dans une bibliothèque`." #: ../../user_documentation/libraries/edit_library.md:14 #: ../../user_documentation/libraries/edit_library.md:31 msgid "A screen appears showing your upload quota and your libraries." msgstr "" +"Un écran s'affiche, indiquant votre quota de téléchargement et vos " +"bibliothèques." #: ../../user_documentation/libraries/edit_library.md:15 #: ../../user_documentation/libraries/edit_library.md:32 msgid "Select {guilabel}`Library Details` under the library you want to edit." msgstr "" +"Sélectionnez {guilabel}`Détails de la bibliothèque` sous la bibliothèque que " +"vous voulez éditer." #: ../../user_documentation/libraries/edit_library.md:16 #: ../../user_documentation/libraries/edit_library.md:33 msgid "Select the {guilabel}`✎ Edit` button at the top of the screen." -msgstr "" +msgstr "Sélectionnez le bouton {guilabel}`✎ Modifier` en haut de l'écran." #: ../../user_documentation/libraries/edit_library.md:17 #: ../../user_documentation/libraries/edit_library.md:34 msgid "Change any of the following:" -msgstr "" +msgstr "Modifier l'un des éléments suivants :" #: ../../user_documentation/libraries/edit_library.md:18 #: ../../user_documentation/libraries/edit_library.md:35 msgid "{guilabel}`Name`." -msgstr "" +msgstr "{guilabel}`Nom`." #: ../../user_documentation/libraries/edit_library.md:19 #: ../../user_documentation/libraries/edit_library.md:36 msgid "{guilabel}`Description`." -msgstr "" +msgstr "{guilabel}`Description`." #: ../../user_documentation/libraries/edit_library.md:20 #: ../../user_documentation/libraries/edit_library.md:37 msgid "{guilabel}`Visibility`." -msgstr "" +msgstr "{guilabel}`Visibilité`." #: ../../user_documentation/libraries/edit_library.md:21 #: ../../user_documentation/libraries/edit_library.md:38 @@ -86,16 +100,18 @@ msgid "" "Select {guilabel}`Update Library` to save your changes. A toast " "notification appears at the bottom of the screen to confirm your changes." msgstr "" +"Sélectionnez {guilabel}`Mettre à jour la bibliothèque` pour sauvegarder vos " +"changements. Une notification apparaît au bas de l'écran pour confirmer vos " +"modifications." #: ../../user_documentation/libraries/edit_library.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/libraries/edit_library.md:29 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/libraries/edit_library.md:42 msgid "That's it! You've updated your library's details." -msgstr "" - +msgstr "C'est fait ! Vous avez mis à jour les détails de votre bibliothèque." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po b/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po index c8933197f..7074fa6cd 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po @@ -3,53 +3,62 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-follow/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/follow_library.md:1 msgid "Follow a library" -msgstr "" +msgstr "Suivre une audiothèque" #: ../../user_documentation/libraries/follow_library.md:3 msgid "" "Follow a library to get access to its content. There are two ways to " "follow a library:" msgstr "" +"Suivez une audiothèque pour recevoir l’accès à ses contenus. Il y a deux " +"moyens pour suivre une audiothèque :" #: ../../user_documentation/libraries/follow_library.md:9 msgid "Use a sharing link" -msgstr "" +msgstr "Utiliser un lien de partage" #: ../../user_documentation/libraries/follow_library.md:11 msgid "" "If you've received a sharing link, you can use this to follow a library. " "To do this:" msgstr "" +"Si vous avez reçu un lien de partage, vous pouvez l’utiliser pour suivre une " +"audiothèque. Pour ce faire :" #: ../../user_documentation/libraries/follow_library.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/libraries/follow_library.md:19 #: ../../user_documentation/libraries/follow_library.md:31 #: ../../user_documentation/libraries/follow_library.md:50 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/follow_library.md:20 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/libraries/follow_library.md:21 #: ../../user_documentation/libraries/follow_library.md:33 @@ -57,6 +66,8 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Follow remote libraries`." " A screen appears showing you the libraries you are following." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Suivre des audiothèques " +"distantes`. Un écran apparaît vous montant les audiothèques que vous suivez." #: ../../user_documentation/libraries/follow_library.md:22 #: ../../user_documentation/libraries/follow_library.md:34 @@ -64,6 +75,8 @@ msgid "" "Paste the sharing link into the {guilabel}`Search a remote library` " "search bar." msgstr "" +"Collez le lien de partage dans la barre de recherche {guilabel}`Rechercher " +"une audiothèque distante`." #: ../../user_documentation/libraries/follow_library.md:23 #: ../../user_documentation/libraries/follow_library.md:35 @@ -71,6 +84,9 @@ msgid "" "Select the {guilabel}`Search` icon or hit {kbd}`⏎ Return` to search for " "the library. If the library exists, a library card appears." msgstr "" +"Sélectionnez l’icône {guilabel}`Rechercher` ou appuyer {kbd}`⏎ Retour` pour " +"rechercher l’audiothèque. Si l’audiothèque existe, une carte d’audiothèque " +"apparaît." #: ../../user_documentation/libraries/follow_library.md:24 #: ../../user_documentation/libraries/follow_library.md:36 @@ -79,54 +95,70 @@ msgid "" "level is {guilabel}`Nobody except me`, the owner needs to approve the " "request." msgstr "" +"Sélectionnez {guilabel}`Suivre` sur la carte de l’audiothèque. Si le niveau " +"de confidentialité de l’audiothèque est {guilabel}`Personne à part moi`, le " +"propriétaire devra approuver la demande." #: ../../user_documentation/libraries/follow_library.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/libraries/follow_library.md:32 msgid "Select the upload icon ({fa}`upload`) at the top of the screen" -msgstr "" +msgstr "Sélectionnez l’icône de téléversement ({fa}`upload` en haut de l’écran" #: ../../user_documentation/libraries/follow_library.md:40 msgid "" "That's it! The server then scans the content and you can see it on your " "{term}`pod`." msgstr "" +"C’est tout ! Le serveur va alors scanner le contenu et vous pouvez le voir " +"dans votre {term}`pod`." #: ../../user_documentation/libraries/follow_library.md:42 msgid "Follow from content on your pod" -msgstr "" +msgstr "Suivre depuis du contenu dans votre pod" #: ../../user_documentation/libraries/follow_library.md:45 msgid "" "You can only follow a library from content pages if its privacy level is " "not {guilabel}`Nobody except me`." msgstr "" +"Vous pouvez suivre une audiothèque depuis des pages de contenu seulement " +"lorsque son niveau de confidentialité n’est pas {guilabel}`Personne sauf " +"moi`." #: ../../user_documentation/libraries/follow_library.md:48 msgid "" "If a user on your {term}`pod` has already followed a library, you can " "find it by selecting content from that library. To do this:" msgstr "" +"Si un utilisateur de votre {term}`pod` a déjà suivi une audiothèque, vous " +"pouvez la trouver en sélectionnant du contenu de cette audiothèque. Pour ce " +"faire :" #: ../../user_documentation/libraries/follow_library.md:51 msgid "Select a track, album, or artist from the library you want to follow." msgstr "" +"Sélectionnez une piste, album, ou artiste depuis l’audiothèque que vous " +"désirez suivre." #: ../../user_documentation/libraries/follow_library.md:52 msgid "" "Scroll to the bottom of the page. The library card appears in the " "{guilabel}`User libraries` section." msgstr "" +"Faites défiler la page jusqu’en bas. La carte de l’audiothèque apparaît dans " +"la section {guilabel}`Audiothèques de l’utilisateur`." #: ../../user_documentation/libraries/follow_library.md:53 msgid "Select {guilabel}`Follow` on the library card." -msgstr "" +msgstr "Sélectionnez {guilabel}`Suivre` sur la carte de l’audiothèque." #: ../../user_documentation/libraries/follow_library.md:55 msgid "" "You're done! The content will remain on the server even if the other user" " stops following the library." msgstr "" - +"C’est fait ! Le contenu va rester sur le serveur même si l’autre utilisateur " +"arrête de suivre l’audiothèque." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/share.po b/docs/locales/fr/LC_MESSAGES/user/libraries/share.po index db741745d..a119bcc12 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/share.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/share.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-share/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/share_library.md:1 @@ -35,18 +38,20 @@ msgstr "" #: ../../user_documentation/libraries/share_library.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/libraries/share_library.md:13 #: ../../user_documentation/libraries/share_library.md:26 #: ../../user_documentation/libraries/share_library.md:44 #: ../../user_documentation/libraries/share_library.md:54 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/share_library.md:14 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." msgstr "" +"Sélectionnez l'icône de téléchargement ({fa}`téléversement`) en haut de la " +"barre latérale." #: ../../user_documentation/libraries/share_library.md:15 #: ../../user_documentation/libraries/share_library.md:28 @@ -54,11 +59,15 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Upload third-party " "content in a library`." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Téléverser du contenu " +"tiers dans une bibliothèque`." #: ../../user_documentation/libraries/share_library.md:16 #: ../../user_documentation/libraries/share_library.md:29 msgid "A screen appears showing your upload quota and your libraries." msgstr "" +"Un écran s'affiche, indiquant votre quota de téléchargement et vos " +"bibliothèques." #: ../../user_documentation/libraries/share_library.md:17 #: ../../user_documentation/libraries/share_library.md:30 @@ -80,11 +89,11 @@ msgstr "" #: ../../user_documentation/libraries/share_library.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/libraries/share_library.md:27 msgid "Select the upload icon ({fa}`upload`) at the top of the screen." -msgstr "" +msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/libraries/share_library.md:36 msgid "" @@ -121,4 +130,3 @@ msgid "" "That's it! You've shared your library. The invited users can now listen " "to its content." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/content/add.po b/docs/locales/fr/LC_MESSAGES/user/playlists/content/add.po index 95d3f6105..e02685f73 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/content/add.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/content/add.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-content-add/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/playlists/content/add.md:1 @@ -37,7 +41,7 @@ msgstr "" #: ../../user/playlists/content/add.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/playlists/content/add.md:19 msgid "" @@ -56,7 +60,7 @@ msgstr "" #: ../../user/playlists/content/add.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/playlists/content/add.md:27 msgid "Select the player at the bottom of the screen to expand it." @@ -186,4 +190,3 @@ msgstr "" #~ " currently in your [player " #~ "queue](../queue/index.md). To do this:" #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/content/remove.po b/docs/locales/fr/LC_MESSAGES/user/playlists/content/remove.po index 490efb089..cce29a316 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/content/remove.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/content/remove.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-content-remove/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/playlists/remove_content.md:1 @@ -33,12 +37,12 @@ msgstr "" #: ../../user_documentation/playlists/remove_content.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/playlists/remove_content.md:15 #: ../../user_documentation/playlists/remove_content.md:27 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/playlists/remove_content.md:16 msgid "" @@ -85,4 +89,3 @@ msgstr "" #: ../../user_documentation/playlists/remove_content.md:37 msgid "That's it! You've removed the content from your playlist." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/content/reorder.po b/docs/locales/fr/LC_MESSAGES/user/playlists/content/reorder.po index 27af18fe7..074dc8d1e 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/content/reorder.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/content/reorder.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-content-reorder/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/playlists/reorder_content.md:1 @@ -27,12 +31,12 @@ msgstr "" #: ../../user_documentation/playlists/reorder_content.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/playlists/reorder_content.md:11 #: ../../user_documentation/playlists/reorder_content.md:23 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/playlists/reorder_content.md:12 msgid "" @@ -79,4 +83,3 @@ msgstr "" #: ../../user_documentation/playlists/reorder_content.md:33 msgid "You're done! You've updated the order of the tracks in your playlist." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/create.po b/docs/locales/fr/LC_MESSAGES/user/playlists/create.po index 22820bc5b..8c39c9f8e 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/create.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-create/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/playlists/create.md:1 @@ -31,11 +35,11 @@ msgstr "" #: ../../user/playlists/create.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/playlists/create.md:13 ../../user/playlists/create.md:28 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user/playlists/create.md:14 msgid "" @@ -86,7 +90,7 @@ msgstr "" #: ../../user/playlists/create.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/playlists/create.md:29 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -109,4 +113,3 @@ msgstr "" #~ " Now you can [add some content " #~ "to it](add_content.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/delete.po b/docs/locales/fr/LC_MESSAGES/user/playlists/delete.po index d77e04aa2..a1ae2f9ec 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/delete.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/playlists/delete_playlist.md:1 @@ -33,12 +37,12 @@ msgstr "" #: ../../user_documentation/playlists/delete_playlist.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/playlists/delete_playlist.md:15 #: ../../user_documentation/playlists/delete_playlist.md:27 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/playlists/delete_playlist.md:16 msgid "" @@ -74,7 +78,7 @@ msgstr "" #: ../../user_documentation/playlists/delete_playlist.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/playlists/delete_playlist.md:28 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -89,4 +93,3 @@ msgstr "" #: ../../user_documentation/playlists/delete_playlist.md:37 msgid "That's it! You've deleted your playlist." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/edit.po b/docs/locales/fr/LC_MESSAGES/user/playlists/edit.po index ebe782a90..6a737774a 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/edit.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/edit.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-edit/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/playlists/edit_playlist.md:1 @@ -27,12 +31,12 @@ msgstr "" #: ../../user_documentation/playlists/edit_playlist.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/playlists/edit_playlist.md:11 #: ../../user_documentation/playlists/edit_playlist.md:25 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/playlists/edit_playlist.md:12 msgid "" @@ -78,7 +82,7 @@ msgstr "" #: ../../user_documentation/playlists/edit_playlist.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/playlists/edit_playlist.md:26 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -93,4 +97,3 @@ msgstr "" #: ../../user_documentation/playlists/edit_playlist.md:37 msgid "That's it! You've edited your playlist." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/index.po b/docs/locales/fr/LC_MESSAGES/user/playlists/index.po index eb362f0b4..e6870e53d 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/index.po @@ -3,35 +3,40 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/playlists/index.md:5 msgid "Manage your playlists" -msgstr "" +msgstr "Gérer vos listes de lecture" #: ../../user_documentation/playlists/index.md:18 msgid "Manage playlist content" -msgstr "" +msgstr "Gérer le contenu des listes de lecture" #: ../../user_documentation/playlists/index.md:1 msgid "Playlists" -msgstr "" +msgstr "Listes de lecture" #: ../../user_documentation/playlists/index.md:3 msgid "" "You can create and share playlists with the {term}`Fediverse`. Add " "content from all over the network to build playlists you love." msgstr "" - +"Vous pouvez créer et partager des listes de lecture avec le {term}`Fediverse`" +". Ajoutez du contenu depuis tout le réseau pour créer les listes de lecture " +"que vous aimez." diff --git a/docs/locales/fr/LC_MESSAGES/user/playlists/listen.po b/docs/locales/fr/LC_MESSAGES/user/playlists/listen.po index 6f8f43b46..7af499d5d 100644 --- a/docs/locales/fr/LC_MESSAGES/user/playlists/listen.po +++ b/docs/locales/fr/LC_MESSAGES/user/playlists/listen.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-playlists-listen/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/playlists/listen.md:1 @@ -43,7 +47,7 @@ msgstr "" #: ../../user/playlists/listen.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/playlists/listen.md:23 msgid "" @@ -63,7 +67,7 @@ msgstr "" #: ../../user/playlists/listen.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/playlists/listen.md:32 ../../user/playlists/listen.md:60 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -123,4 +127,3 @@ msgstr "" #~ " more information, see [Follow a " #~ "library](../libraries/follow_library)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/plugins/index.po b/docs/locales/fr/LC_MESSAGES/user/plugins/index.po index 69177358d..af5d855ee 100644 --- a/docs/locales/fr/LC_MESSAGES/user/plugins/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/plugins/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-plugins-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/plugins/index.md:9 msgid "Core plugins" -msgstr "" +msgstr "Plugins principaux" #: ../../user_documentation/plugins/index.md:1 msgid "User plugins" -msgstr "" +msgstr "Plugins utilisateur" #: ../../user_documentation/plugins/index.md:4 msgid "" @@ -31,6 +34,9 @@ msgid "" "them. If you can't find the plugins mentioned here, contact your pod " "admin." msgstr "" +"Votre administarteur de {term}`pod <Pod>`doit permettre les plugins pour que " +"vous puissiez les utiliser. Si vous ne pouvez pas voir les plugins " +"mentionnés ici, veuillez contacter votre administrateur de pod." #: ../../user_documentation/plugins/index.md:7 msgid "" @@ -38,4 +44,7 @@ msgid "" "maintains core plugins to make your listening experience even better. " "Developers can create extra plugins to add features to a pod." msgstr "" - +"Utilisez des plugins pour étendre les fonctionnalités de Funkwhale. Le " +"collectif Funkwhale maintient des plugins de base pour rendre votre " +"expérience d'écoute encore meilleure. Les développeurs peuvent créer des " +"plugins supplémentaires pour ajouter des fonctionnalités à un pod." diff --git a/docs/locales/fr/LC_MESSAGES/user/plugins/listenbrainz.po b/docs/locales/fr/LC_MESSAGES/user/plugins/listenbrainz.po index c89d5bafd..2ef4ff735 100644 --- a/docs/locales/fr/LC_MESSAGES/user/plugins/listenbrainz.po +++ b/docs/locales/fr/LC_MESSAGES/user/plugins/listenbrainz.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-plugins-listenbrainz/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/plugins/listenbrainz_plugin.md:1 @@ -32,12 +36,12 @@ msgstr "" #: ../../user_documentation/plugins/listenbrainz_plugin.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/plugins/listenbrainz_plugin.md:11 #: ../../user_documentation/plugins/listenbrainz_plugin.md:26 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/plugins/listenbrainz_plugin.md:12 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -46,7 +50,7 @@ msgstr "" #: ../../user_documentation/plugins/listenbrainz_plugin.md:13 #: ../../user_documentation/plugins/listenbrainz_plugin.md:28 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/plugins/listenbrainz_plugin.md:14 #: ../../user_documentation/plugins/listenbrainz_plugin.md:29 @@ -91,4 +95,3 @@ msgid "" "That's it! You've set up the **ListenBrainz** plugin. When you listen to " "tracks, the plugin sends the information to ListenBrainz." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/plugins/maloja.po b/docs/locales/fr/LC_MESSAGES/user/plugins/maloja.po index 2eb11a097..ed5088fd7 100644 --- a/docs/locales/fr/LC_MESSAGES/user/plugins/maloja.po +++ b/docs/locales/fr/LC_MESSAGES/user/plugins/maloja.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-plugins-maloja/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/plugins/maloja_plugin.md:1 @@ -41,12 +45,12 @@ msgstr "" #: ../../user_documentation/plugins/maloja_plugin.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/plugins/maloja_plugin.md:13 #: ../../user_documentation/plugins/maloja_plugin.md:29 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/plugins/maloja_plugin.md:14 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -55,7 +59,7 @@ msgstr "" #: ../../user_documentation/plugins/maloja_plugin.md:15 #: ../../user_documentation/plugins/maloja_plugin.md:31 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/plugins/maloja_plugin.md:16 #: ../../user_documentation/plugins/maloja_plugin.md:32 @@ -108,4 +112,3 @@ msgid "" "That's it! You've set up the **Maloja** plugin. When you listen to " "tracks, the plugin sends the information to your Maloja server." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/plugins/scrobbler.po b/docs/locales/fr/LC_MESSAGES/user/plugins/scrobbler.po index 194870d57..566652dae 100644 --- a/docs/locales/fr/LC_MESSAGES/user/plugins/scrobbler.po +++ b/docs/locales/fr/LC_MESSAGES/user/plugins/scrobbler.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-plugins-scrobbler/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/plugins/scrobbler.md:1 @@ -50,11 +54,11 @@ msgstr "" #: ../../user/plugins/scrobbler.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/plugins/scrobbler.md:21 ../../user/plugins/scrobbler.md:38 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user/plugins/scrobbler.md:22 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -62,7 +66,7 @@ msgstr "" #: ../../user/plugins/scrobbler.md:23 ../../user/plugins/scrobbler.md:40 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user/plugins/scrobbler.md:24 ../../user/plugins/scrobbler.md:41 msgid "Scroll down to the {guilabel}`Plugins` section." @@ -119,4 +123,3 @@ msgstr "" #~ " the [ListenBrainz](listenbrainz_plugin) and " #~ "[Maloja](maloja_plugin) plugins!" #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/queue/index.po b/docs/locales/fr/LC_MESSAGES/user/queue/index.po index 45afa07eb..105968e4a 100644 --- a/docs/locales/fr/LC_MESSAGES/user/queue/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/queue/index.po @@ -3,35 +3,40 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-queue-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/queue/index.md:7 msgid "Manage your queue" -msgstr "" +msgstr "Gérer votre file d’attente" #: ../../user_documentation/queue/index.md:1 msgid "Queue" -msgstr "" +msgstr "File d’attente" #: ../../user_documentation/queue/index.md:3 msgid "" "Use the audio queue to manage audio playback. You can add tracks, albums," " series, artist discographies, and playlists to your queue." msgstr "" +"La file d'attente audio permet de gérer la lecture des fichiers audio. Vous " +"pouvez ajouter des pistes, des albums, des séries, des discographies " +"d'artistes et des listes de lecture à votre file d'attente." #: ../../user_documentation/queue/index.md:5 msgid "Follow the guides in this section to get started." -msgstr "" - +msgstr "Suivez les guides dans cette section pour commencer." diff --git a/docs/locales/fr/LC_MESSAGES/user/queue/remove.po b/docs/locales/fr/LC_MESSAGES/user/queue/remove.po index 18cdffbbf..58d09df47 100644 --- a/docs/locales/fr/LC_MESSAGES/user/queue/remove.po +++ b/docs/locales/fr/LC_MESSAGES/user/queue/remove.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-queue-remove/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/queue/remove_content.md:1 @@ -43,7 +47,7 @@ msgstr "" #: ../../user_documentation/queue/remove_content.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/queue/remove_content.md:23 #: ../../user_documentation/queue/remove_content.md:32 @@ -61,7 +65,7 @@ msgstr "" #: ../../user_documentation/queue/remove_content.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/queue/remove_content.md:31 #: ../../user_documentation/queue/remove_content.md:57 @@ -88,4 +92,3 @@ msgstr "" #: ../../user_documentation/queue/remove_content.md:63 msgid "That's it! You've removed all content from your queue." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/radios/create.po b/docs/locales/fr/LC_MESSAGES/user/radios/create.po index 052cbe852..48b74ae75 100644 --- a/docs/locales/fr/LC_MESSAGES/user/radios/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/radios/create.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-radios-create/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/radios/create_radio.md:1 @@ -39,7 +43,7 @@ msgstr "" #: ../../user_documentation/radios/create_radio.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/radios/create_radio.md:17 msgid "" @@ -126,7 +130,7 @@ msgstr "" #: ../../user_documentation/radios/create_radio.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/radios/create_radio.md:36 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -141,4 +145,3 @@ msgstr "" #: ../../user_documentation/radios/create_radio.md:53 msgid "You're done! You can now play your radio." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/radios/delete.po b/docs/locales/fr/LC_MESSAGES/user/radios/delete.po index 136c59e8e..f90c6881f 100644 --- a/docs/locales/fr/LC_MESSAGES/user/radios/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/radios/delete.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-radios-delete/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/radios/delete.md:1 @@ -33,7 +37,7 @@ msgstr "" #: ../../user/radios/delete.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/radios/delete.md:15 msgid "" @@ -59,7 +63,7 @@ msgstr "" #: ../../user/radios/delete.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/radios/delete.md:25 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -82,4 +86,3 @@ msgstr "" #~ " You can [create a new " #~ "one](create_radio.md) at any time." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/radios/edit.po b/docs/locales/fr/LC_MESSAGES/user/radios/edit.po index 7c7aa7366..ea7241b12 100644 --- a/docs/locales/fr/LC_MESSAGES/user/radios/edit.po +++ b/docs/locales/fr/LC_MESSAGES/user/radios/edit.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-radios-edit/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/radios/edit_radio.md:1 @@ -29,7 +33,7 @@ msgstr "" #: ../../user_documentation/radios/edit_radio.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/radios/edit_radio.md:11 msgid "" @@ -57,7 +61,7 @@ msgstr "" #: ../../user_documentation/radios/edit_radio.md:15 #: ../../user_documentation/radios/edit_radio.md:30 msgid "{guilabel}`Description`." -msgstr "" +msgstr "{guilabel}`Description`." #: ../../user_documentation/radios/edit_radio.md:16 #: ../../user_documentation/radios/edit_radio.md:31 @@ -78,7 +82,7 @@ msgstr "" #: ../../user_documentation/radios/edit_radio.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/radios/edit_radio.md:25 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -93,4 +97,3 @@ msgstr "" #: ../../user_documentation/radios/edit_radio.md:37 msgid "That's it! You've updated your radio's details." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/radios/index.po b/docs/locales/fr/LC_MESSAGES/user/radios/index.po index 89f766018..ba802a916 100644 --- a/docs/locales/fr/LC_MESSAGES/user/radios/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/radios/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-11 21:34+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-radios-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/radios/index.md:13 msgid "Manage your radios" -msgstr "" +msgstr "Gérer vos radios" #: ../../user_documentation/radios/index.md:1 msgid "Radios" -msgstr "" +msgstr "Radios" #: ../../user_documentation/radios/index.md:3 msgid "" @@ -66,4 +69,3 @@ msgid "" "**Less listened** – check out tracks you've not heard, or things you " "haven't given as much attention." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/radios/listen.po b/docs/locales/fr/LC_MESSAGES/user/radios/listen.po index d57d7df36..c6e797515 100644 --- a/docs/locales/fr/LC_MESSAGES/user/radios/listen.po +++ b/docs/locales/fr/LC_MESSAGES/user/radios/listen.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-radios-listen/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/radios/listen.md:1 @@ -43,7 +47,7 @@ msgstr "" #: ../../user/radios/listen.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/radios/listen.md:23 msgid "" @@ -63,7 +67,7 @@ msgstr "" #: ../../user/radios/listen.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/radios/listen.md:32 ../../user/radios/listen.md:60 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -151,4 +155,3 @@ msgstr "" #~ " more information, see [Follow a " #~ "library](../libraries/follow_library)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/reports/index.po b/docs/locales/fr/LC_MESSAGES/user/reports/index.po index d74591206..1a2d16de7 100644 --- a/docs/locales/fr/LC_MESSAGES/user/reports/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/reports/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-11 21:34+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-reports-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/reports/index.md:9 msgid "Submit reports" -msgstr "" +msgstr "Envoyer des rapports" #: ../../user_documentation/reports/index.md:1 msgid "Reporting" -msgstr "" +msgstr "Rapports" #: ../../user_documentation/reports/index.md:4 msgid "" @@ -32,6 +35,11 @@ msgid "" "send reports. If you cannot send reports anonymously, contact the pod " "admin." msgstr "" +"Les administrateur·ices et modérateur·ices de {term}`Pod <Pod>` sont " +"responsables de la gestion des rapports. Les administrateur·ices peuvent " +"choisir d’autoriser les utilisateurs anonymes (déconnectés) d’envoyer des " +"rapports. Si vous ne pouvez pas envoyer de rapports de manière anonyme, " +"contactez votre administrateur de pod." #: ../../user_documentation/reports/index.md:7 msgid "" @@ -40,4 +48,7 @@ msgid "" "stolen content. Check out the guides in this section to see how to send a" " report." msgstr "" - +"Funkwhale fournit des outils pour rapporter tout le contenu et les comptes. " +"Vous pouvez rapporter le contenu pour être répréhensible et illégal. Vous " +"pouvez aussi rapporter du contenu volé. Consultez les guides dans cette " +"section pour voir comment envoyer un rapport." diff --git a/docs/locales/fr/LC_MESSAGES/user/reports/playlist.po b/docs/locales/fr/LC_MESSAGES/user/reports/playlist.po index 82efbe5b4..a67cdb25d 100644 --- a/docs/locales/fr/LC_MESSAGES/user/reports/playlist.po +++ b/docs/locales/fr/LC_MESSAGES/user/reports/playlist.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-reports-playlist/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/reports/report_playlist.md:1 @@ -29,7 +33,7 @@ msgstr "" #: ../../user_documentation/reports/report_playlist.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/reports/report_playlist.md:11 msgid "" @@ -113,7 +117,7 @@ msgstr "" #: ../../user_documentation/reports/report_playlist.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/reports/report_playlist.md:30 msgid "Select the hamburger menu ({fa}`bars`) to open the menu bar." @@ -130,4 +134,3 @@ msgid "" "That's it! The pod's moderators can now action the report or contact you " "for clarification." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/subsonic/disable.po b/docs/locales/fr/LC_MESSAGES/user/subsonic/disable.po index 4e5c3a9a8..ade6d92c4 100644 --- a/docs/locales/fr/LC_MESSAGES/user/subsonic/disable.po +++ b/docs/locales/fr/LC_MESSAGES/user/subsonic/disable.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-subsonic-disable/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user/subsonic/disable.md:1 @@ -29,11 +33,11 @@ msgstr "" #: ../../user/subsonic/disable.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user/subsonic/disable.md:11 ../../user/subsonic/disable.md:24 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user/subsonic/disable.md:12 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -41,7 +45,7 @@ msgstr "" #: ../../user/subsonic/disable.md:13 ../../user/subsonic/disable.md:26 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user/subsonic/disable.md:14 ../../user/subsonic/disable.md:27 msgid "Scroll to the {guilabel}`Subsonic API password` section." @@ -61,7 +65,7 @@ msgstr "" #: ../../user/subsonic/disable.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user/subsonic/disable.md:25 msgid "" @@ -83,4 +87,3 @@ msgstr "" #~ "by [requesting a new " #~ "password](./subsonic_password.md)." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/subsonic/password/request.po b/docs/locales/fr/LC_MESSAGES/user/subsonic/password/request.po index 259f2d5eb..32769fd4f 100644 --- a/docs/locales/fr/LC_MESSAGES/user/subsonic/password/request.po +++ b/docs/locales/fr/LC_MESSAGES/user/subsonic/password/request.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-subsonic-password-request/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/subsonic/subsonic_password.md:1 @@ -29,12 +33,12 @@ msgstr "" #: ../../user_documentation/subsonic/subsonic_password.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/subsonic/subsonic_password.md:11 #: ../../user_documentation/subsonic/subsonic_password.md:23 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/subsonic/subsonic_password.md:12 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -43,7 +47,7 @@ msgstr "" #: ../../user_documentation/subsonic/subsonic_password.md:13 #: ../../user_documentation/subsonic/subsonic_password.md:25 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/subsonic/subsonic_password.md:14 #: ../../user_documentation/subsonic/subsonic_password.md:26 @@ -66,7 +70,7 @@ msgstr "" #: ../../user_documentation/subsonic/subsonic_password.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/subsonic/subsonic_password.md:24 msgid "" @@ -79,4 +83,3 @@ msgid "" "Congratulations! You've got your Subsonic password. You can now enter " "this in your Subsonic app to start listening to Funkwhale content." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/subsonic/password/reset.po b/docs/locales/fr/LC_MESSAGES/user/subsonic/password/reset.po index 6e1fda909..b5c1a6577 100644 --- a/docs/locales/fr/LC_MESSAGES/user/subsonic/password/reset.po +++ b/docs/locales/fr/LC_MESSAGES/user/subsonic/password/reset.po @@ -3,18 +3,22 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-07-06 01:50+0000\n" +"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." +"funkwhale.audio>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-subsonic-password-reset/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/subsonic/reset_subsonic.md:1 @@ -33,12 +37,12 @@ msgstr "" #: ../../user_documentation/subsonic/reset_subsonic.md msgid "Desktop" -msgstr "" +msgstr "Bureau" #: ../../user_documentation/subsonic/reset_subsonic.md:15 #: ../../user_documentation/subsonic/reset_subsonic.md:28 msgid "Log in to your account." -msgstr "" +msgstr "Connectez-vous à votre compte." #: ../../user_documentation/subsonic/reset_subsonic.md:16 msgid "Select the cog icon ({fa}`cog`) or your avatar to expand the user menu." @@ -47,7 +51,7 @@ msgstr "" #: ../../user_documentation/subsonic/reset_subsonic.md:17 #: ../../user_documentation/subsonic/reset_subsonic.md:30 msgid "Select {guilabel}`Settings`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Paramètres`." #: ../../user_documentation/subsonic/reset_subsonic.md:18 #: ../../user_documentation/subsonic/reset_subsonic.md:31 @@ -75,7 +79,7 @@ msgstr "" #: ../../user_documentation/subsonic/reset_subsonic.md msgid "Mobile" -msgstr "" +msgstr "Téléphone mobile" #: ../../user_documentation/subsonic/reset_subsonic.md:29 msgid "" @@ -86,4 +90,3 @@ msgstr "" #: ../../user_documentation/subsonic/reset_subsonic.md:38 msgid "That's it! Your new password is ready to use." msgstr "" - diff --git a/docs/locales/gettext/administrator/configuration/change-url.pot b/docs/locales/gettext/administrator/configuration/change-url.pot index c0d63610e..c2dc20a17 100644 --- a/docs/locales/gettext/administrator/configuration/change-url.pot +++ b/docs/locales/gettext/administrator/configuration/change-url.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/env-file.pot b/docs/locales/gettext/administrator/configuration/env-file.pot index 1912fe585..c33028314 100644 --- a/docs/locales/gettext/administrator/configuration/env-file.pot +++ b/docs/locales/gettext/administrator/configuration/env-file.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/frontend.pot b/docs/locales/gettext/administrator/configuration/frontend.pot index eb205465a..578a1b62e 100644 --- a/docs/locales/gettext/administrator/configuration/frontend.pot +++ b/docs/locales/gettext/administrator/configuration/frontend.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/index.pot b/docs/locales/gettext/administrator/configuration/index.pot index 179ede483..c5a30e4d1 100644 --- a/docs/locales/gettext/administrator/configuration/index.pot +++ b/docs/locales/gettext/administrator/configuration/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/instance-settings.pot b/docs/locales/gettext/administrator/configuration/instance-settings.pot index 24e9ac6b9..10fc1c409 100644 --- a/docs/locales/gettext/administrator/configuration/instance-settings.pot +++ b/docs/locales/gettext/administrator/configuration/instance-settings.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/ldap.pot b/docs/locales/gettext/administrator/configuration/ldap.pot index 04b15c1ba..6f7c7a10e 100644 --- a/docs/locales/gettext/administrator/configuration/ldap.pot +++ b/docs/locales/gettext/administrator/configuration/ldap.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/mrf.pot b/docs/locales/gettext/administrator/configuration/mrf.pot index 6747e935f..b87892528 100644 --- a/docs/locales/gettext/administrator/configuration/mrf.pot +++ b/docs/locales/gettext/administrator/configuration/mrf.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/object-storage.pot b/docs/locales/gettext/administrator/configuration/object-storage.pot index 95fcf8610..0ca8aa37c 100644 --- a/docs/locales/gettext/administrator/configuration/object-storage.pot +++ b/docs/locales/gettext/administrator/configuration/object-storage.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/optimize.pot b/docs/locales/gettext/administrator/configuration/optimize.pot index 76efbe8a3..9fcccb21c 100644 --- a/docs/locales/gettext/administrator/configuration/optimize.pot +++ b/docs/locales/gettext/administrator/configuration/optimize.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/configuration/rate-limiting.pot b/docs/locales/gettext/administrator/configuration/rate-limiting.pot index cc908fb82..8d7544ca8 100644 --- a/docs/locales/gettext/administrator/configuration/rate-limiting.pot +++ b/docs/locales/gettext/administrator/configuration/rate-limiting.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/django/delete-content.pot b/docs/locales/gettext/administrator/django/delete-content.pot index c58adec59..21a24c80a 100644 --- a/docs/locales/gettext/administrator/django/delete-content.pot +++ b/docs/locales/gettext/administrator/django/delete-content.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/django/index.pot b/docs/locales/gettext/administrator/django/index.pot index 85439a6f0..7dfae2cdc 100644 --- a/docs/locales/gettext/administrator/django/index.pot +++ b/docs/locales/gettext/administrator/django/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/import.pot b/docs/locales/gettext/administrator/import.pot index 4edc88729..3bb20ea93 100644 --- a/docs/locales/gettext/administrator/import.pot +++ b/docs/locales/gettext/administrator/import.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/index.pot b/docs/locales/gettext/administrator/index.pot index a6f0c3686..1262f4e9e 100644 --- a/docs/locales/gettext/administrator/index.pot +++ b/docs/locales/gettext/administrator/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/installation/debian.pot b/docs/locales/gettext/administrator/installation/debian.pot index dd236f355..4dbd6ab4a 100644 --- a/docs/locales/gettext/administrator/installation/debian.pot +++ b/docs/locales/gettext/administrator/installation/debian.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/installation/docker.pot b/docs/locales/gettext/administrator/installation/docker.pot index 3d73335b7..5f2a550d4 100644 --- a/docs/locales/gettext/administrator/installation/docker.pot +++ b/docs/locales/gettext/administrator/installation/docker.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/installation/index.pot b/docs/locales/gettext/administrator/installation/index.pot index 19574c57b..8a338e6ff 100644 --- a/docs/locales/gettext/administrator/installation/index.pot +++ b/docs/locales/gettext/administrator/installation/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/installation/migrate.pot b/docs/locales/gettext/administrator/installation/migrate.pot index 589552082..877769081 100644 --- a/docs/locales/gettext/administrator/installation/migrate.pot +++ b/docs/locales/gettext/administrator/installation/migrate.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/installation/quick-install.pot b/docs/locales/gettext/administrator/installation/quick-install.pot index 559d52977..93d8e5194 100644 --- a/docs/locales/gettext/administrator/installation/quick-install.pot +++ b/docs/locales/gettext/administrator/installation/quick-install.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/installation/third-party.pot b/docs/locales/gettext/administrator/installation/third-party.pot index 41644772b..94667af9d 100644 --- a/docs/locales/gettext/administrator/installation/third-party.pot +++ b/docs/locales/gettext/administrator/installation/third-party.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/create-library.pot b/docs/locales/gettext/administrator/manage-script/create-library.pot index 8057645f6..581e1ed7a 100644 --- a/docs/locales/gettext/administrator/manage-script/create-library.pot +++ b/docs/locales/gettext/administrator/manage-script/create-library.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/database.pot b/docs/locales/gettext/administrator/manage-script/database.pot index 8089b35f4..7be6e0c97 100644 --- a/docs/locales/gettext/administrator/manage-script/database.pot +++ b/docs/locales/gettext/administrator/manage-script/database.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/fix-uploads.pot b/docs/locales/gettext/administrator/manage-script/fix-uploads.pot index df468126c..b67f69b3f 100644 --- a/docs/locales/gettext/administrator/manage-script/fix-uploads.pot +++ b/docs/locales/gettext/administrator/manage-script/fix-uploads.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/index.pot b/docs/locales/gettext/administrator/manage-script/index.pot index 8208685f4..7b8f82512 100644 --- a/docs/locales/gettext/administrator/manage-script/index.pot +++ b/docs/locales/gettext/administrator/manage-script/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/library.pot b/docs/locales/gettext/administrator/manage-script/library.pot index f6eed8b91..5454ef2f6 100644 --- a/docs/locales/gettext/administrator/manage-script/library.pot +++ b/docs/locales/gettext/administrator/manage-script/library.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/tags.pot b/docs/locales/gettext/administrator/manage-script/tags.pot index a570c91cc..3a0a0c024 100644 --- a/docs/locales/gettext/administrator/manage-script/tags.pot +++ b/docs/locales/gettext/administrator/manage-script/tags.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/thumbnails.pot b/docs/locales/gettext/administrator/manage-script/thumbnails.pot index f9d818b54..81bfdd7e3 100644 --- a/docs/locales/gettext/administrator/manage-script/thumbnails.pot +++ b/docs/locales/gettext/administrator/manage-script/thumbnails.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/manage-script/users.pot b/docs/locales/gettext/administrator/manage-script/users.pot index 5257df65c..05dc34936 100644 --- a/docs/locales/gettext/administrator/manage-script/users.pot +++ b/docs/locales/gettext/administrator/manage-script/users.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/migration.pot b/docs/locales/gettext/administrator/migration.pot index 2c77bba41..9c146ec6c 100644 --- a/docs/locales/gettext/administrator/migration.pot +++ b/docs/locales/gettext/administrator/migration.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/troubleshooting/backend.pot b/docs/locales/gettext/administrator/troubleshooting/backend.pot index 2758832be..8422ec9aa 100644 --- a/docs/locales/gettext/administrator/troubleshooting/backend.pot +++ b/docs/locales/gettext/administrator/troubleshooting/backend.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/troubleshooting/frontend.pot b/docs/locales/gettext/administrator/troubleshooting/frontend.pot index 4c1ac2fd0..a1bc89bc0 100644 --- a/docs/locales/gettext/administrator/troubleshooting/frontend.pot +++ b/docs/locales/gettext/administrator/troubleshooting/frontend.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/troubleshooting/help.pot b/docs/locales/gettext/administrator/troubleshooting/help.pot index e97a48410..7720101ae 100644 --- a/docs/locales/gettext/administrator/troubleshooting/help.pot +++ b/docs/locales/gettext/administrator/troubleshooting/help.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/troubleshooting/index.pot b/docs/locales/gettext/administrator/troubleshooting/index.pot index 2db70c051..6eaf8b109 100644 --- a/docs/locales/gettext/administrator/troubleshooting/index.pot +++ b/docs/locales/gettext/administrator/troubleshooting/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/uninstall/debian.pot b/docs/locales/gettext/administrator/uninstall/debian.pot index 81af69b15..ab223770d 100644 --- a/docs/locales/gettext/administrator/uninstall/debian.pot +++ b/docs/locales/gettext/administrator/uninstall/debian.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/uninstall/docker.pot b/docs/locales/gettext/administrator/uninstall/docker.pot index 20fe7ccfc..9eb0c8194 100644 --- a/docs/locales/gettext/administrator/uninstall/docker.pot +++ b/docs/locales/gettext/administrator/uninstall/docker.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/uninstall/index.pot b/docs/locales/gettext/administrator/uninstall/index.pot index 34d9e1fd8..cf499cdee 100644 --- a/docs/locales/gettext/administrator/uninstall/index.pot +++ b/docs/locales/gettext/administrator/uninstall/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/uninstall/quick-install.pot b/docs/locales/gettext/administrator/uninstall/quick-install.pot index d3599de5d..6a8c05d09 100644 --- a/docs/locales/gettext/administrator/uninstall/quick-install.pot +++ b/docs/locales/gettext/administrator/uninstall/quick-install.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/upgrade/backup.pot b/docs/locales/gettext/administrator/upgrade/backup.pot index 1dfbf8d95..bc35ab5db 100644 --- a/docs/locales/gettext/administrator/upgrade/backup.pot +++ b/docs/locales/gettext/administrator/upgrade/backup.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/upgrade/debian.pot b/docs/locales/gettext/administrator/upgrade/debian.pot index 47a71f966..d29a2bd9d 100644 --- a/docs/locales/gettext/administrator/upgrade/debian.pot +++ b/docs/locales/gettext/administrator/upgrade/debian.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/upgrade/docker.pot b/docs/locales/gettext/administrator/upgrade/docker.pot index decbe08b9..dfe8f13f9 100644 --- a/docs/locales/gettext/administrator/upgrade/docker.pot +++ b/docs/locales/gettext/administrator/upgrade/docker.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/upgrade/index.pot b/docs/locales/gettext/administrator/upgrade/index.pot index 3ad19cb02..20c8ec1f4 100644 --- a/docs/locales/gettext/administrator/upgrade/index.pot +++ b/docs/locales/gettext/administrator/upgrade/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/administrator/upgrade/quick-install.pot b/docs/locales/gettext/administrator/upgrade/quick-install.pot index 615a94fdc..14900dca8 100644 --- a/docs/locales/gettext/administrator/upgrade/quick-install.pot +++ b/docs/locales/gettext/administrator/upgrade/quick-install.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/changelog.pot b/docs/locales/gettext/changelog.pot index 4997f4489..ed5ef9f78 100644 --- a/docs/locales/gettext/changelog.pot +++ b/docs/locales/gettext/changelog.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,7609 +16,7972 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../../CHANGELOG:2 +#: ../../../CHANGELOG.md:2 msgid "Changelog" msgstr "" -#: ../../../CHANGELOG:4 +#: ../../../CHANGELOG.md:4 msgid "You can subscribe to release announcements by:" msgstr "" -#: ../../../CHANGELOG:6 -msgid "Following `@funkwhale@fosstodon.org <https://fosstodon.org/@funkwhale>`_ on Mastodon" +#: ../../../CHANGELOG.md:6 +msgid "Following [@funkwhale@fosstodon.org](https://fosstodon.org/@funkwhale) on Mastodon" msgstr "" -#: ../../../CHANGELOG:7 +#: ../../../CHANGELOG.md:7 msgid "Subscribing to the following Atom feed: https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag" msgstr "" -#: ../../../CHANGELOG:9 +#: ../../../CHANGELOG.md:9 msgid "This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.html." msgstr "" -#: ../../../CHANGELOG:14 -msgid "1.3.0-rc3 (2023-01-23)" +#: ../../../CHANGELOG.md:13 +msgid "1.3.0-rc4 (2023-03-24)" msgstr "" -#: ../../../CHANGELOG:16 +#: ../../../CHANGELOG.md:15 +#: ../../../CHANGELOG.md:22 msgid "Update since 1.3.0-rc2:" msgstr "" -#: ../../../CHANGELOG:18 +#: ../../../CHANGELOG.md:16 +msgid "Resolved an issue where queue text with mouse over has dark text on dark background (#2058) (2058)" +msgstr "" + +#: ../../../CHANGELOG.md:17 +msgid "Improve signal handling for service and containers" +msgstr "" + +#: ../../../CHANGELOG.md:18 +msgid "Fixes an issue which made it possible to download all media files without access control (#2101)" +msgstr "" + +#: ../../../CHANGELOG.md:20 +msgid "1.3.0-rc3 (2023-01-23)" +msgstr "" + +#: ../../../CHANGELOG.md:24 msgid "Fix pipeline execution for tags" msgstr "" -#: ../../../CHANGELOG:21 +#: ../../../CHANGELOG.md:26 msgid "1.3.0-rc2 (2023-01-23)" msgstr "" -#: ../../../CHANGELOG:23 +#: ../../../CHANGELOG.md:28 msgid "Update since 1.3.0-rc1:" msgstr "" -#: ../../../CHANGELOG:25 -#: ../../../CHANGELOG:101 -#: ../../../CHANGELOG:465 -#: ../../../CHANGELOG:517 -#: ../../../CHANGELOG:563 -#: ../../../CHANGELOG:731 -#: ../../../CHANGELOG:922 -#: ../../../CHANGELOG:941 -#: ../../../CHANGELOG:960 -#: ../../../CHANGELOG:980 -#: ../../../CHANGELOG:1080 -#: ../../../CHANGELOG:1142 -#: ../../../CHANGELOG:1232 -#: ../../../CHANGELOG:1311 -#: ../../../CHANGELOG:1348 -#: ../../../CHANGELOG:1596 -#: ../../../CHANGELOG:1738 -#: ../../../CHANGELOG:2023 -#: ../../../CHANGELOG:2109 -#: ../../../CHANGELOG:2276 -#: ../../../CHANGELOG:2392 -#: ../../../CHANGELOG:2429 -#: ../../../CHANGELOG:2530 -#: ../../../CHANGELOG:2769 -#: ../../../CHANGELOG:2863 -#: ../../../CHANGELOG:3079 -#: ../../../CHANGELOG:3161 -#: ../../../CHANGELOG:3394 -#: ../../../CHANGELOG:3465 -#: ../../../CHANGELOG:3586 -#: ../../../CHANGELOG:3685 -#: ../../../CHANGELOG:3887 -#: ../../../CHANGELOG:4007 -#: ../../../CHANGELOG:4155 -#: ../../../CHANGELOG:4251 -#: ../../../CHANGELOG:4344 -#: ../../../CHANGELOG:4418 +#: ../../../CHANGELOG.md:30 +#: ../../../CHANGELOG.md:107 +#: ../../../CHANGELOG.md:453 +#: ../../../CHANGELOG.md:502 +#: ../../../CHANGELOG.md:543 +#: ../../../CHANGELOG.md:702 +#: ../../../CHANGELOG.md:885 +#: ../../../CHANGELOG.md:901 +#: ../../../CHANGELOG.md:916 +#: ../../../CHANGELOG.md:933 +#: ../../../CHANGELOG.md:1026 +#: ../../../CHANGELOG.md:1085 +#: ../../../CHANGELOG.md:1165 +#: ../../../CHANGELOG.md:1237 +#: ../../../CHANGELOG.md:1269 +#: ../../../CHANGELOG.md:1507 +#: ../../../CHANGELOG.md:1646 +#: ../../../CHANGELOG.md:1917 +#: ../../../CHANGELOG.md:1999 +#: ../../../CHANGELOG.md:2148 +#: ../../../CHANGELOG.md:2258 +#: ../../../CHANGELOG.md:2290 +#: ../../../CHANGELOG.md:2393 +#: ../../../CHANGELOG.md:2620 +#: ../../../CHANGELOG.md:2707 +#: ../../../CHANGELOG.md:2922 +#: ../../../CHANGELOG.md:3001 +#: ../../../CHANGELOG.md:3223 +#: ../../../CHANGELOG.md:3286 +#: ../../../CHANGELOG.md:3400 +#: ../../../CHANGELOG.md:3495 +#: ../../../CHANGELOG.md:3691 +#: ../../../CHANGELOG.md:3800 +#: ../../../CHANGELOG.md:3948 +#: ../../../CHANGELOG.md:4033 +#: ../../../CHANGELOG.md:4125 +#: ../../../CHANGELOG.md:4194 msgid "Enhancements:" msgstr "" -#: ../../../CHANGELOG:27 +#: ../../../CHANGELOG.md:32 msgid "Retry fetching new radio track 5 times if error occurred before resetting radio session (#2022)" msgstr "" -#: ../../../CHANGELOG:29 -#: ../../../CHANGELOG:177 -#: ../../../CHANGELOG:287 -#: ../../../CHANGELOG:334 -#: ../../../CHANGELOG:388 -#: ../../../CHANGELOG:413 -#: ../../../CHANGELOG:470 -#: ../../../CHANGELOG:522 -#: ../../../CHANGELOG:569 -#: ../../../CHANGELOG:622 -#: ../../../CHANGELOG:679 -#: ../../../CHANGELOG:751 -#: ../../../CHANGELOG:926 -#: ../../../CHANGELOG:946 -#: ../../../CHANGELOG:965 -#: ../../../CHANGELOG:994 -#: ../../../CHANGELOG:1066 -#: ../../../CHANGELOG:1095 -#: ../../../CHANGELOG:1148 -#: ../../../CHANGELOG:1257 -#: ../../../CHANGELOG:1319 -#: ../../../CHANGELOG:1358 -#: ../../../CHANGELOG:1624 -#: ../../../CHANGELOG:1748 -#: ../../../CHANGELOG:2053 -#: ../../../CHANGELOG:2123 -#: ../../../CHANGELOG:2311 -#: ../../../CHANGELOG:2400 -#: ../../../CHANGELOG:2436 -#: ../../../CHANGELOG:2540 -#: ../../../CHANGELOG:2807 -#: ../../../CHANGELOG:2873 -#: ../../../CHANGELOG:3045 -#: ../../../CHANGELOG:3061 -#: ../../../CHANGELOG:3089 -#: ../../../CHANGELOG:3179 -#: ../../../CHANGELOG:3400 -#: ../../../CHANGELOG:3476 -#: ../../../CHANGELOG:3595 -#: ../../../CHANGELOG:3702 -#: ../../../CHANGELOG:3894 -#: ../../../CHANGELOG:4013 -#: ../../../CHANGELOG:4168 -#: ../../../CHANGELOG:4262 -#: ../../../CHANGELOG:4328 -#: ../../../CHANGELOG:4432 -#: ../../../CHANGELOG:4504 -#: ../../../CHANGELOG:4529 -#: ../../../CHANGELOG:4640 -#: ../../../CHANGELOG:4656 -#: ../../../CHANGELOG:4811 -#: ../../../CHANGELOG:4829 +#: ../../../CHANGELOG.md:34 +#: ../../../CHANGELOG.md:181 +#: ../../../CHANGELOG.md:287 +#: ../../../CHANGELOG.md:330 +#: ../../../CHANGELOG.md:381 +#: ../../../CHANGELOG.md:404 +#: ../../../CHANGELOG.md:457 +#: ../../../CHANGELOG.md:506 +#: ../../../CHANGELOG.md:549 +#: ../../../CHANGELOG.md:599 +#: ../../../CHANGELOG.md:653 +#: ../../../CHANGELOG.md:721 +#: ../../../CHANGELOG.md:889 +#: ../../../CHANGELOG.md:905 +#: ../../../CHANGELOG.md:921 +#: ../../../CHANGELOG.md:946 +#: ../../../CHANGELOG.md:1015 +#: ../../../CHANGELOG.md:1040 +#: ../../../CHANGELOG.md:1090 +#: ../../../CHANGELOG.md:1188 +#: ../../../CHANGELOG.md:1244 +#: ../../../CHANGELOG.md:1278 +#: ../../../CHANGELOG.md:1535 +#: ../../../CHANGELOG.md:1655 +#: ../../../CHANGELOG.md:1946 +#: ../../../CHANGELOG.md:2012 +#: ../../../CHANGELOG.md:2183 +#: ../../../CHANGELOG.md:2265 +#: ../../../CHANGELOG.md:2296 +#: ../../../CHANGELOG.md:2402 +#: ../../../CHANGELOG.md:2657 +#: ../../../CHANGELOG.md:2717 +#: ../../../CHANGELOG.md:2893 +#: ../../../CHANGELOG.md:2906 +#: ../../../CHANGELOG.md:2931 +#: ../../../CHANGELOG.md:3018 +#: ../../../CHANGELOG.md:3228 +#: ../../../CHANGELOG.md:3297 +#: ../../../CHANGELOG.md:3409 +#: ../../../CHANGELOG.md:3511 +#: ../../../CHANGELOG.md:3697 +#: ../../../CHANGELOG.md:3805 +#: ../../../CHANGELOG.md:3960 +#: ../../../CHANGELOG.md:4043 +#: ../../../CHANGELOG.md:4112 +#: ../../../CHANGELOG.md:4207 +#: ../../../CHANGELOG.md:4273 +#: ../../../CHANGELOG.md:4294 +#: ../../../CHANGELOG.md:4398 +#: ../../../CHANGELOG.md:4411 +#: ../../../CHANGELOG.md:4542 +#: ../../../CHANGELOG.md:4558 msgid "Bugfixes:" msgstr "" -#: ../../../CHANGELOG:31 +#: ../../../CHANGELOG.md:36 msgid "Docker setup: do not export the API port 5000 publicly" msgstr "" -#: ../../../CHANGELOG:32 +#: ../../../CHANGELOG.md:37 msgid "Fix artist name submission in Maloja plugin" msgstr "" -#: ../../../CHANGELOG:34 +#: ../../../CHANGELOG.md:39 msgid "Deprecations:" msgstr "" -#: ../../../CHANGELOG:36 +#: ../../../CHANGELOG.md:41 msgid "That's the last minor version series that supports python3.7. Funkwhale 1.4 will remove support for it. #1693" msgstr "" -#: ../../../CHANGELOG:37 +#: ../../../CHANGELOG.md:42 msgid "Deprecate the api manage.py script in favor of the funkwhale-manage entrypoint" msgstr "" -#: ../../../CHANGELOG:40 +#: ../../../CHANGELOG.md:44 msgid "1.3.0-rc1 (2023-01-20)" msgstr "" -#: ../../../CHANGELOG:42 -#: ../../../CHANGELOG:284 -#: ../../../CHANGELOG:326 -#: ../../../CHANGELOG:385 -#: ../../../CHANGELOG:410 -#: ../../../CHANGELOG:462 -#: ../../../CHANGELOG:514 -#: ../../../CHANGELOG:560 -#: ../../../CHANGELOG:619 -#: ../../../CHANGELOG:676 -#: ../../../CHANGELOG:707 -#: ../../../CHANGELOG:911 -#: ../../../CHANGELOG:919 -#: ../../../CHANGELOG:938 -#: ../../../CHANGELOG:957 -#: ../../../CHANGELOG:977 -#: ../../../CHANGELOG:1063 -#: ../../../CHANGELOG:1077 -#: ../../../CHANGELOG:1139 -#: ../../../CHANGELOG:1164 -#: ../../../CHANGELOG:1308 -#: ../../../CHANGELOG:1340 -#: ../../../CHANGELOG:1716 -#: ../../../CHANGELOG:1781 -#: ../../../CHANGELOG:2106 -#: ../../../CHANGELOG:2155 -#: ../../../CHANGELOG:2375 -#: ../../../CHANGELOG:2426 -#: ../../../CHANGELOG:2447 +#: ../../../CHANGELOG.md:46 +#: ../../../CHANGELOG.md:285 +#: ../../../CHANGELOG.md:324 +#: ../../../CHANGELOG.md:379 +#: ../../../CHANGELOG.md:402 +#: ../../../CHANGELOG.md:451 +#: ../../../CHANGELOG.md:500 +#: ../../../CHANGELOG.md:541 +#: ../../../CHANGELOG.md:597 +#: ../../../CHANGELOG.md:651 +#: ../../../CHANGELOG.md:680 +#: ../../../CHANGELOG.md:877 +#: ../../../CHANGELOG.md:883 +#: ../../../CHANGELOG.md:899 +#: ../../../CHANGELOG.md:914 +#: ../../../CHANGELOG.md:931 +#: ../../../CHANGELOG.md:1013 +#: ../../../CHANGELOG.md:1024 +#: ../../../CHANGELOG.md:1083 +#: ../../../CHANGELOG.md:1105 +#: ../../../CHANGELOG.md:1235 +#: ../../../CHANGELOG.md:1263 +#: ../../../CHANGELOG.md:1626 +#: ../../../CHANGELOG.md:1684 +#: ../../../CHANGELOG.md:1997 +#: ../../../CHANGELOG.md:2041 +#: ../../../CHANGELOG.md:2245 +#: ../../../CHANGELOG.md:2288 +#: ../../../CHANGELOG.md:2305 msgid "Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html" msgstr "" -#: ../../../CHANGELOG:45 +#: ../../../CHANGELOG.md:48 msgid "Update instructions:" msgstr "" -#: ../../../CHANGELOG:47 +#: ../../../CHANGELOG.md:50 msgid "If you are running the docker deployment, make sure to update our compose file. In this small example we show you how to save the old config and update it correctly:" msgstr "" -#: ../../../CHANGELOG:51 -msgid "``` export FUNKWHALE_VERSION=\"1.3.0\" cd /srv/funkwhale docker-compose down mv docker-compose.yml docker-compose.bak curl -L -o /srv/funkwhale/docker-compose.yml \"https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml\" ```" +#: ../../../CHANGELOG.md:62 +msgid ".. note:: If you need to customize your nginx template, e.g. to work around `problems with Docker's resolver <https://docs.funkwhale.audio/admin/external-storages.html#no-resolver-found>`_, you can mount your custom nginx configuration into the container. Uncomment the commented volumes in the `nginx` section of your `docker-compose.yml`. Additionally you need to update the paths in `nginx/funkwhale.template`. Replace all occurrences of `/funkwhale` by `/usr/share/nginx/html`. This loads the templates from your `nginx` folder and overrides the template files in the Docker container." msgstr "" -#: ../../../CHANGELOG:60 -msgid "If you need to customize your nginx template, e.g. to work around `problems with Docker's resolver <https://docs.funkwhale.audio/admin/external-storages.html#no-resolver-found>`_, you can mount your custom nginx configuration into the container. Uncomment the commented volumes in the `nginx` section of your `docker-compose.yml`. Additionally you need to update the paths in `nginx/funkwhale.template`. Replace all occurrences of `/funkwhale` by `/usr/share/nginx/html`. This loads the templates from your `nginx` folder and overrides the template files in the Docker container." -msgstr "" - -#: ../../../CHANGELOG:67 -msgid "``` docker-compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:71 +#: ../../../CHANGELOG.md:76 msgid "The Docker instructions now use the updated Docker compose plugin. If you previously used the ``docker-compose`` standalone installation, do the following while upgrading:" msgstr "" -#: ../../../CHANGELOG:73 -msgid "Download the `Docker compose plugin <https://docs.docker.com/compose/install/linux/#install-using-the-repository>`_" +#: ../../../CHANGELOG.md:78 +msgid "The Docker instructions now use the updated Docker compose plugin. If you previously used the `docker-compose` standalone installation, do the following while upgrading:" msgstr "" -#: ../../../CHANGELOG:74 +#: ../../../CHANGELOG.md:80 +msgid "Download the [Docker compose plugin](https://docs.docker.com/compose/install/linux/#install-using-the-repository)" +msgstr "" + +#: ../../../CHANGELOG.md:81 msgid "Stop your containers using the **docker-compose** syntax." msgstr "" -#: ../../../CHANGELOG:76 -msgid "```sh sudo docker-compose down ```" -msgstr "" - -#: ../../../CHANGELOG:80 +#: ../../../CHANGELOG.md:87 msgid "Bring the containers back up using the **docker compose** syntax." msgstr "" -#: ../../../CHANGELOG:82 -msgid "```sh sudo docker compose up -d ```" -msgstr "" - -#: ../../../CHANGELOG:86 +#: ../../../CHANGELOG.md:93 msgid "After this you can continue to use the **docker compose** syntax for all Docker management tasks." msgstr "" -#: ../../../CHANGELOG:87 +#: ../../../CHANGELOG.md:95 msgid "Upgrade Postgres to version 15. [Make sure to migrate!](https://docs.funkwhale.audio/administrator_documentation/upgrade_docs/docker.html#upgrade-the-postgres-container)" msgstr "" -#: ../../../CHANGELOG:88 +#: ../../../CHANGELOG.md:96 msgid "With this update Funkwhale starts using poetry to maintain its dependencies. We therefore recommend removing the old virtualenv by running `rm -rf /srv/funkwhale/virtualenv`." msgstr "" -#: ../../../CHANGELOG:92 -#: ../../../CHANGELOG:329 -#: ../../../CHANGELOG:724 -#: ../../../CHANGELOG:1224 -#: ../../../CHANGELOG:1344 -#: ../../../CHANGELOG:1585 -#: ../../../CHANGELOG:2010 -#: ../../../CHANGELOG:2263 -#: ../../../CHANGELOG:2761 -#: ../../../CHANGELOG:2857 -#: ../../../CHANGELOG:3075 -#: ../../../CHANGELOG:3150 -#: ../../../CHANGELOG:3383 -#: ../../../CHANGELOG:3675 -#: ../../../CHANGELOG:3879 -#: ../../../CHANGELOG:4000 -#: ../../../CHANGELOG:4147 -#: ../../../CHANGELOG:4246 -#: ../../../CHANGELOG:4338 -#: ../../../CHANGELOG:4411 -#: ../../../CHANGELOG:4494 -#: ../../../CHANGELOG:4524 -#: ../../../CHANGELOG:4545 -#: ../../../CHANGELOG:4636 -#: ../../../CHANGELOG:4649 -#: ../../../CHANGELOG:4805 -#: ../../../CHANGELOG:4824 +#: ../../../CHANGELOG.md:99 +#: ../../../CHANGELOG.md:326 +#: ../../../CHANGELOG.md:696 +#: ../../../CHANGELOG.md:1158 +#: ../../../CHANGELOG.md:1265 +#: ../../../CHANGELOG.md:1496 +#: ../../../CHANGELOG.md:1905 +#: ../../../CHANGELOG.md:2136 +#: ../../../CHANGELOG.md:2613 +#: ../../../CHANGELOG.md:2702 +#: ../../../CHANGELOG.md:2918 +#: ../../../CHANGELOG.md:2991 +#: ../../../CHANGELOG.md:3213 +#: ../../../CHANGELOG.md:3486 +#: ../../../CHANGELOG.md:3684 +#: ../../../CHANGELOG.md:3794 +#: ../../../CHANGELOG.md:3940 +#: ../../../CHANGELOG.md:4029 +#: ../../../CHANGELOG.md:4120 +#: ../../../CHANGELOG.md:4188 +#: ../../../CHANGELOG.md:4264 +#: ../../../CHANGELOG.md:4290 +#: ../../../CHANGELOG.md:4307 +#: ../../../CHANGELOG.md:4394 +#: ../../../CHANGELOG.md:4405 +#: ../../../CHANGELOG.md:4536 +#: ../../../CHANGELOG.md:4553 msgid "Features:" msgstr "" -#: ../../../CHANGELOG:94 +#: ../../../CHANGELOG.md:101 msgid "Add a management command to create a new library for a user" msgstr "" -#: ../../../CHANGELOG:95 +#: ../../../CHANGELOG.md:102 msgid "Add Gitpod configuration and guide" msgstr "" -#: ../../../CHANGELOG:96 +#: ../../../CHANGELOG.md:103 msgid "Add Sentry SDK to collect #1479" msgstr "" -#: ../../../CHANGELOG:97 +#: ../../../CHANGELOG.md:104 msgid "Prepare API for the upcoming version 2" msgstr "" -#: ../../../CHANGELOG:98 +#: ../../../CHANGELOG.md:105 msgid "Rewrite player to be based on Web Audio API" msgstr "" -#: ../../../CHANGELOG:103 +#: ../../../CHANGELOG.md:109 msgid "Add a celery task to scan remote library (#1712)" msgstr "" -#: ../../../CHANGELOG:104 +#: ../../../CHANGELOG.md:110 msgid "Add coverage report for Frontend Tests" msgstr "" -#: ../../../CHANGELOG:105 +#: ../../../CHANGELOG.md:111 msgid "Add hint which serializer is used for OembedView (#1901)" msgstr "" -#: ../../../CHANGELOG:106 +#: ../../../CHANGELOG.md:112 msgid "Add music visualizer (#1135)" msgstr "" -#: ../../../CHANGELOG:107 +#: ../../../CHANGELOG.md:113 msgid "Add playlists radio to search page (#1968)" msgstr "" -#: ../../../CHANGELOG:108 +#: ../../../CHANGELOG.md:114 msgid "Add proper serialization for TextPreviewView (#1903)" msgstr "" -#: ../../../CHANGELOG:109 +#: ../../../CHANGELOG.md:115 msgid "Add Serializer for SpaManifest endpoint" msgstr "" -#: ../../../CHANGELOG:110 +#: ../../../CHANGELOG.md:116 msgid "Add support for python 3.11" msgstr "" -#: ../../../CHANGELOG:111 +#: ../../../CHANGELOG.md:117 msgid "Added proper serializers for the rate-limit endpoint." msgstr "" -#: ../../../CHANGELOG:112 +#: ../../../CHANGELOG.md:118 msgid "Added type hints to the API." msgstr "" -#: ../../../CHANGELOG:113 +#: ../../../CHANGELOG.md:119 msgid "All administrator documentation has been rewritten to improve clarity and update outdated information." msgstr "" -#: ../../../CHANGELOG:114 +#: ../../../CHANGELOG.md:120 msgid "Allow arbitrary length names for artists, albums and tracks" msgstr "" -#: ../../../CHANGELOG:115 +#: ../../../CHANGELOG.md:121 msgid "Allow installing the funkwhale_api package" msgstr "" -#: ../../../CHANGELOG:116 +#: ../../../CHANGELOG.md:122 msgid "Allow using default browser dark mode and update UI dynamically on change" msgstr "" -#: ../../../CHANGELOG:117 +#: ../../../CHANGELOG.md:123 msgid "Apply migrations on API container start (!1879)" msgstr "" -#: ../../../CHANGELOG:118 +#: ../../../CHANGELOG.md:124 msgid "Automatically fetch next page of tracks (#1526)" msgstr "" -#: ../../../CHANGELOG:119 +#: ../../../CHANGELOG.md:125 msgid "Build frontend natively for cross-arch docker images" msgstr "" -#: ../../../CHANGELOG:120 -#: ../../../CHANGELOG:566 +#: ../../../CHANGELOG.md:126 +#: ../../../CHANGELOG.md:546 msgid "Change unmaintained PyMemoize library to django-cache-memoize to enable Python 3.10 support" msgstr "" -#: ../../../CHANGELOG:122 +#: ../../../CHANGELOG.md:128 msgid "Cleaned up frontend docker container" msgstr "" -#: ../../../CHANGELOG:123 +#: ../../../CHANGELOG.md:129 msgid "Cleanup Gitlab CI and Dockerfiles (!1796)" msgstr "" -#: ../../../CHANGELOG:124 +#: ../../../CHANGELOG.md:130 msgid "Create the funkwhale-manage entrypoint in the api package" msgstr "" -#: ../../../CHANGELOG:125 +#: ../../../CHANGELOG.md:131 msgid "Created migration guide for the deprecated all-in-one docker container." msgstr "" -#: ../../../CHANGELOG:126 +#: ../../../CHANGELOG.md:132 msgid "Don't buffer python stdout/err in docker" msgstr "" -#: ../../../CHANGELOG:127 +#: ../../../CHANGELOG.md:133 msgid "Don't compile python byte code in docker" msgstr "" -#: ../../../CHANGELOG:128 +#: ../../../CHANGELOG.md:134 msgid "Don't use poetry in production deployments" msgstr "" -#: ../../../CHANGELOG:129 +#: ../../../CHANGELOG.md:135 msgid "Drop direct dependency on pyopenssl (#1975)" msgstr "" -#: ../../../CHANGELOG:130 +#: ../../../CHANGELOG.md:136 msgid "Exclude /api/v1/oauth/authorize from the specs since its not supported yet (#1899)" msgstr "" -#: ../../../CHANGELOG:131 +#: ../../../CHANGELOG.md:137 msgid "Fix openapi specs for user endpoints (#1892, #1894)" msgstr "" -#: ../../../CHANGELOG:132 +#: ../../../CHANGELOG.md:138 msgid "Fix Serializer for inline channel artists (#1833)" msgstr "" -#: ../../../CHANGELOG:133 +#: ../../../CHANGELOG.md:139 msgid "Fix specs for ListenViewSet (#1898)" msgstr "" -#: ../../../CHANGELOG:134 +#: ../../../CHANGELOG.md:140 msgid "Handle PWA correctly and provide better cache strategy for album covers (#1721)" msgstr "" -#: ../../../CHANGELOG:135 +#: ../../../CHANGELOG.md:141 msgid "Improve docker caching" msgstr "" -#: ../../../CHANGELOG:136 +#: ../../../CHANGELOG.md:142 msgid "Improve specification of LibraryFollowViewSet (#1896)" msgstr "" -#: ../../../CHANGELOG:137 +#: ../../../CHANGELOG.md:143 msgid "Install API python package in docker image" msgstr "" -#: ../../../CHANGELOG:138 +#: ../../../CHANGELOG.md:144 msgid "Make CI always run all tests on protected branches." msgstr "" -#: ../../../CHANGELOG:139 +#: ../../../CHANGELOG.md:145 msgid "Make mutations endpoint appear in openapi specs" msgstr "" -#: ../../../CHANGELOG:140 +#: ../../../CHANGELOG.md:146 msgid "Make Python 3.10 tests in CI mandatory" msgstr "" -#: ../../../CHANGELOG:141 +#: ../../../CHANGELOG.md:147 msgid "Make sure ChannelViewSet always has a serializer (#1895)" msgstr "" -#: ../../../CHANGELOG:142 +#: ../../../CHANGELOG.md:148 msgid "Migrate to new queue system from old localStorage keys" msgstr "" -#: ../../../CHANGELOG:143 +#: ../../../CHANGELOG.md:149 msgid "Migrate to Vue 3" msgstr "" -#: ../../../CHANGELOG:144 +#: ../../../CHANGELOG.md:150 msgid "Migrate to vue-i18n (#1831) Fix locale changing (#1862)" msgstr "" -#: ../../../CHANGELOG:146 +#: ../../../CHANGELOG.md:152 msgid "Migrated to sphinx-design." msgstr "" -#: ../../../CHANGELOG:147 +#: ../../../CHANGELOG.md:153 msgid "New task checking if remote instance is reachable to avoid playback latence (#1711)" msgstr "" -#: ../../../CHANGELOG:148 +#: ../../../CHANGELOG.md:154 msgid "OAuth Application client secrets are now hashed before storing them to the DB. Those are only displayed once from now on!" msgstr "" -#: ../../../CHANGELOG:149 -#: ../../../CHANGELOG:467 +#: ../../../CHANGELOG.md:155 +#: ../../../CHANGELOG.md:455 msgid "Parameterize the default S3 ACL when uploading objects. (#1319)" msgstr "" -#: ../../../CHANGELOG:150 +#: ../../../CHANGELOG.md:156 msgid "Pin Alpine package versions in API Dockerfile (fixes part of CI build issues)." msgstr "" -#: ../../../CHANGELOG:151 +#: ../../../CHANGELOG.md:157 msgid "Prefer using the funkwhale-manage entrypoint" msgstr "" -#: ../../../CHANGELOG:152 +#: ../../../CHANGELOG.md:158 msgid "Prevent running two pipelines for MRs" msgstr "" -#: ../../../CHANGELOG:153 +#: ../../../CHANGELOG.md:159 msgid "Random and less listened radio filter out un-owned content on library section (#2007)" msgstr "" -#: ../../../CHANGELOG:154 +#: ../../../CHANGELOG.md:160 msgid "Refactor node info endpoint to use proper serializers" msgstr "" -#: ../../../CHANGELOG:155 +#: ../../../CHANGELOG.md:161 msgid "Refactor SettingsView to use a proper serializer" msgstr "" -#: ../../../CHANGELOG:156 +#: ../../../CHANGELOG.md:162 msgid "Remove unnecessary or wrong `is` keyword usage from backend" msgstr "" -#: ../../../CHANGELOG:157 +#: ../../../CHANGELOG.md:163 msgid "Rename OpenAPI schema's operation ids for nicer API client method names." msgstr "" -#: ../../../CHANGELOG:158 +#: ../../../CHANGELOG.md:164 msgid "Replace django-channels package with web socket implementation from @vueuse/core (#1715)" msgstr "" -#: ../../../CHANGELOG:159 +#: ../../../CHANGELOG.md:165 msgid "Rewrite embedded player to petite-vue" msgstr "" -#: ../../../CHANGELOG:160 +#: ../../../CHANGELOG.md:166 msgid "Split DATABASE_URL into multiple configuration variables" msgstr "" -#: ../../../CHANGELOG:161 +#: ../../../CHANGELOG.md:167 msgid "The ListenBrainz plugin submits the track duration" msgstr "" -#: ../../../CHANGELOG:162 +#: ../../../CHANGELOG.md:168 msgid "Update Django OAuth Toolkit to version 2, ref #1944" msgstr "" -#: ../../../CHANGELOG:163 +#: ../../../CHANGELOG.md:169 msgid "Update migration after django update (#1815)" msgstr "" -#: ../../../CHANGELOG:164 +#: ../../../CHANGELOG.md:170 msgid "Update upload status when import fails (#1999)" msgstr "" -#: ../../../CHANGELOG:165 +#: ../../../CHANGELOG.md:171 msgid "Updated the installation guides to make installation steps clearer." msgstr "" -#: ../../../CHANGELOG:166 +#: ../../../CHANGELOG.md:172 msgid "Upgrade docker base image to alpine 3.17" msgstr "" -#: ../../../CHANGELOG:167 +#: ../../../CHANGELOG.md:173 msgid "Use proper serializer for Search endpoint (#1902)" msgstr "" -#: ../../../CHANGELOG:170 +#: ../../../CHANGELOG.md:175 msgid "Refactoring:" msgstr "" -#: ../../../CHANGELOG:172 +#: ../../../CHANGELOG.md:177 msgid "Instead of requesting the right spa content from the API using a middleware we now serve the Frontend directly with nginx and only proxy-forward for API endpoints" msgstr "" -#: ../../../CHANGELOG:174 +#: ../../../CHANGELOG.md:179 msgid "Replace django-rest-auth with dj-rest-auth (#1877)" msgstr "" -#: ../../../CHANGELOG:179 +#: ../../../CHANGELOG.md:183 msgid "Allow enabling systemd funkwhale.target" msgstr "" -#: ../../../CHANGELOG:180 +#: ../../../CHANGELOG.md:184 msgid "Allow playback of media from external frontend (#1937)." msgstr "" -#: ../../../CHANGELOG:181 +#: ../../../CHANGELOG.md:185 msgid "Channel overview was displaying foreign tracks (#1773) (1773)" msgstr "" -#: ../../../CHANGELOG:182 +#: ../../../CHANGELOG.md:186 msgid "Fix adding same track multiple times (#1933)" msgstr "" -#: ../../../CHANGELOG:183 +#: ../../../CHANGELOG.md:187 msgid "Fix changing visualizer CORS error (#1934)." msgstr "" -#: ../../../CHANGELOG:184 +#: ../../../CHANGELOG.md:188 msgid "Fix content form autofocus despite `autofocus` prop being set to `false` (#1924)" msgstr "" -#: ../../../CHANGELOG:185 +#: ../../../CHANGELOG.md:189 msgid "Fix CSP header issues" msgstr "" -#: ../../../CHANGELOG:186 +#: ../../../CHANGELOG.md:190 msgid "Fix CSP issue caused by django-channels package (#1752)" msgstr "" -#: ../../../CHANGELOG:187 +#: ../../../CHANGELOG.md:191 msgid "Fix docker API image building with removing autobahn workaround version pin" msgstr "" -#: ../../../CHANGELOG:188 +#: ../../../CHANGELOG.md:192 msgid "Fix docker builds on armv7" msgstr "" -#: ../../../CHANGELOG:189 +#: ../../../CHANGELOG.md:193 msgid "Fix docker nginx entrypoint" msgstr "" -#: ../../../CHANGELOG:190 +#: ../../../CHANGELOG.md:194 msgid "Fix editing playlist tracks (#1362)" msgstr "" -#: ../../../CHANGELOG:191 +#: ../../../CHANGELOG.md:195 msgid "Fix embedded player not working on social posts (1946)" msgstr "" -#: ../../../CHANGELOG:192 +#: ../../../CHANGELOG.md:196 msgid "Fix favorite button in queue" msgstr "" -#: ../../../CHANGELOG:193 +#: ../../../CHANGELOG.md:197 msgid "Fix fetching pages of albums in album detail view (#1927)" msgstr "" -#: ../../../CHANGELOG:194 +#: ../../../CHANGELOG.md:198 msgid "Fix global keyboard shortcuts firing when input is focused (#1876)" msgstr "" -#: ../../../CHANGELOG:195 +#: ../../../CHANGELOG.md:199 msgid "Fix OAuth login (#1890)" msgstr "" -#: ../../../CHANGELOG:196 +#: ../../../CHANGELOG.md:200 msgid "Fix play button in albums with multi-page volumes (#1928)" msgstr "" -#: ../../../CHANGELOG:197 +#: ../../../CHANGELOG.md:201 msgid "Fix player closing when queue ends (#1931)" msgstr "" -#: ../../../CHANGELOG:198 +#: ../../../CHANGELOG.md:202 msgid "Fix purging of dangling files #1929" msgstr "" -#: ../../../CHANGELOG:199 +#: ../../../CHANGELOG.md:203 msgid "Fix remote search (#1857)" msgstr "" -#: ../../../CHANGELOG:200 +#: ../../../CHANGELOG.md:204 msgid "Fix search by text in affected views (#1858)" msgstr "" -#: ../../../CHANGELOG:201 +#: ../../../CHANGELOG.md:205 msgid "Fix timeout on spa manifest requests" msgstr "" -#: ../../../CHANGELOG:202 +#: ../../../CHANGELOG.md:206 msgid "Fix track table showing all tracks and double pagination in some cases (#1923)" msgstr "" -#: ../../../CHANGELOG:203 +#: ../../../CHANGELOG.md:207 msgid "Fix user requests and reports filtering (#1924)" msgstr "" -#: ../../../CHANGELOG:204 +#: ../../../CHANGELOG.md:208 msgid "Fix validity issues in openapi/swagger spec files (#1171)" msgstr "" -#: ../../../CHANGELOG:205 +#: ../../../CHANGELOG.md:209 msgid "Fixed an issue which caused links in Markdown forms to not render correctly. (#2023)" msgstr "" -#: ../../../CHANGELOG:206 +#: ../../../CHANGELOG.md:210 msgid "Fixed login redirect (1736)" msgstr "" -#: ../../../CHANGELOG:207 +#: ../../../CHANGELOG.md:211 msgid "Fixed remote subscription form in Podcast and search views (#1708)" msgstr "" -#: ../../../CHANGELOG:208 +#: ../../../CHANGELOG.md:212 msgid "Fixed upload form VUE errors (#1738) (1738)" msgstr "" -#: ../../../CHANGELOG:209 -#: ../../../CHANGELOG:473 +#: ../../../CHANGELOG.md:213 +#: ../../../CHANGELOG.md:460 msgid "Fixes channel page (#1729) (1729)" msgstr "" -#: ../../../CHANGELOG:210 +#: ../../../CHANGELOG.md:214 msgid "Fixes development environment set-up with docker (1726)" msgstr "" -#: ../../../CHANGELOG:211 +#: ../../../CHANGELOG.md:215 msgid "Fixes embed player (#1783) (1783)" msgstr "" -#: ../../../CHANGELOG:212 +#: ../../../CHANGELOG.md:216 msgid "Fixes service worker (#1634)" msgstr "" -#: ../../../CHANGELOG:213 +#: ../../../CHANGELOG.md:217 msgid "Fixes track listenings not being sent when tab is not focused" msgstr "" -#: ../../../CHANGELOG:214 +#: ../../../CHANGELOG.md:218 msgid "Hide create custom radio to un-authenticated users (#1720)" msgstr "" -#: ../../../CHANGELOG:215 +#: ../../../CHANGELOG.md:219 msgid "Remove trailing slash from reverse proxy configuration" msgstr "" -#: ../../../CHANGELOG:216 +#: ../../../CHANGELOG.md:220 msgid "Remove unused Footer component (#1660)" msgstr "" -#: ../../../CHANGELOG:217 +#: ../../../CHANGELOG.md:221 msgid "Remove usage of deprecated Model and Serializer fields (#1663)" msgstr "" -#: ../../../CHANGELOG:218 +#: ../../../CHANGELOG.md:222 msgid "Skip refreshing local actors in celery federation.refresh_actor_data task - fixes disappearing avatars (!1873)" msgstr "" -#: ../../../CHANGELOG:221 -#: ../../../CHANGELOG:527 -#: ../../../CHANGELOG:774 -#: ../../../CHANGELOG:1273 -#: ../../../CHANGELOG:1760 -#: ../../../CHANGELOG:2337 -#: ../../../CHANGELOG:2417 -#: ../../../CHANGELOG:2554 -#: ../../../CHANGELOG:2838 -#: ../../../CHANGELOG:2888 -#: ../../../CHANGELOG:3196 -#: ../../../CHANGELOG:3409 -#: ../../../CHANGELOG:3484 -#: ../../../CHANGELOG:3608 -#: ../../../CHANGELOG:3721 -#: ../../../CHANGELOG:4018 -#: ../../../CHANGELOG:4177 -#: ../../../CHANGELOG:4275 -#: ../../../CHANGELOG:4441 -#: ../../../CHANGELOG:4515 +#: ../../../CHANGELOG.md:224 +#: ../../../CHANGELOG.md:510 +#: ../../../CHANGELOG.md:743 +#: ../../../CHANGELOG.md:1203 +#: ../../../CHANGELOG.md:1666 +#: ../../../CHANGELOG.md:2208 +#: ../../../CHANGELOG.md:2281 +#: ../../../CHANGELOG.md:2415 +#: ../../../CHANGELOG.md:2687 +#: ../../../CHANGELOG.md:2731 +#: ../../../CHANGELOG.md:3034 +#: ../../../CHANGELOG.md:3236 +#: ../../../CHANGELOG.md:3304 +#: ../../../CHANGELOG.md:3421 +#: ../../../CHANGELOG.md:3530 +#: ../../../CHANGELOG.md:3809 +#: ../../../CHANGELOG.md:3968 +#: ../../../CHANGELOG.md:4055 +#: ../../../CHANGELOG.md:4215 +#: ../../../CHANGELOG.md:4283 msgid "Documentation:" msgstr "" -#: ../../../CHANGELOG:223 +#: ../../../CHANGELOG.md:226 msgid "Add ability to translate documentation into multiple languages" msgstr "" -#: ../../../CHANGELOG:224 +#: ../../../CHANGELOG.md:227 msgid "Add restore instructions to backup docs (#1627)." msgstr "" -#: ../../../CHANGELOG:225 +#: ../../../CHANGELOG.md:228 msgid "Added virtualenv upgrade instructions for Debian (#1562)." msgstr "" -#: ../../../CHANGELOG:226 +#: ../../../CHANGELOG.md:229 msgid "Cleaned up documentation" msgstr "" -#: ../../../CHANGELOG:227 +#: ../../../CHANGELOG.md:230 msgid "Document the new login flow of the CLI-tool (#1800)" msgstr "" -#: ../../../CHANGELOG:228 +#: ../../../CHANGELOG.md:231 msgid "Documented LOGLEVEL command (#1541)." msgstr "" -#: ../../../CHANGELOG:229 +#: ../../../CHANGELOG.md:232 msgid "Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624)." msgstr "" -#: ../../../CHANGELOG:230 +#: ../../../CHANGELOG.md:233 msgid "Harden security for debian install docs" msgstr "" -#: ../../../CHANGELOG:231 +#: ../../../CHANGELOG.md:234 msgid "Rewrote documentation contributor guide." msgstr "" -#: ../../../CHANGELOG:232 +#: ../../../CHANGELOG.md:235 msgid "Rewrote the architecture file (#1908)" msgstr "" -#: ../../../CHANGELOG:233 +#: ../../../CHANGELOG.md:236 msgid "Rewrote the federation developer documentation (#1911)" msgstr "" -#: ../../../CHANGELOG:234 +#: ../../../CHANGELOG.md:237 msgid "Rewrote the plugins documentation (#1910)" msgstr "" -#: ../../../CHANGELOG:235 +#: ../../../CHANGELOG.md:238 msgid "Rewrote translators file" msgstr "" -#: ../../../CHANGELOG:236 +#: ../../../CHANGELOG.md:239 msgid "Updated API developer documentation (#1912, #1909)" msgstr "" -#: ../../../CHANGELOG:237 +#: ../../../CHANGELOG.md:240 msgid "Updated CONTRIBUTING guide with up-to-date documentation. Created layout in documentation hub." msgstr "" -#: ../../../CHANGELOG:240 -#: ../../../CHANGELOG:423 -#: ../../../CHANGELOG:784 -#: ../../../CHANGELOG:2893 -#: ../../../CHANGELOG:3489 -#: ../../../CHANGELOG:3727 -#: ../../../CHANGELOG:4536 -#: ../../../CHANGELOG:4666 +#: ../../../CHANGELOG.md:242 +#: ../../../CHANGELOG.md:413 +#: ../../../CHANGELOG.md:752 +#: ../../../CHANGELOG.md:2735 +#: ../../../CHANGELOG.md:3308 +#: ../../../CHANGELOG.md:3535 +#: ../../../CHANGELOG.md:4300 +#: ../../../CHANGELOG.md:4420 msgid "Other:" msgstr "" -#: ../../../CHANGELOG:242 +#: ../../../CHANGELOG.md:244 msgid "Add a CI job to check if changelog snippet is available" msgstr "" -#: ../../../CHANGELOG:243 +#: ../../../CHANGELOG.md:245 msgid "Add CI broken links checker" msgstr "" -#: ../../../CHANGELOG:244 +#: ../../../CHANGELOG.md:246 msgid "Add pre-commit hooks" msgstr "" -#: ../../../CHANGELOG:246 +#: ../../../CHANGELOG.md:248 msgid "flake8" msgstr "" -#: ../../../CHANGELOG:247 +#: ../../../CHANGELOG.md:249 msgid "black" msgstr "" -#: ../../../CHANGELOG:248 +#: ../../../CHANGELOG.md:250 msgid "isort" msgstr "" -#: ../../../CHANGELOG:249 +#: ../../../CHANGELOG.md:251 msgid "pyupgrade" msgstr "" -#: ../../../CHANGELOG:250 +#: ../../../CHANGELOG.md:252 msgid "prettier" msgstr "" -#: ../../../CHANGELOG:251 +#: ../../../CHANGELOG.md:253 msgid "codespell" msgstr "" -#: ../../../CHANGELOG:252 +#: ../../../CHANGELOG.md:255 msgid "Add pre-commit to development tools" msgstr "" -#: ../../../CHANGELOG:253 +#: ../../../CHANGELOG.md:256 msgid "Align the openapi spec to the actual API wherever possible" msgstr "" -#: ../../../CHANGELOG:254 +#: ../../../CHANGELOG.md:257 msgid "Cache lychee checked urls for 1 day in CI" msgstr "" -#: ../../../CHANGELOG:255 +#: ../../../CHANGELOG.md:258 msgid "Fix api tests warnings by renaming fixtures" msgstr "" -#: ../../../CHANGELOG:256 +#: ../../../CHANGELOG.md:259 msgid "Fix permissions for build artifacts" msgstr "" -#: ../../../CHANGELOG:257 +#: ../../../CHANGELOG.md:260 msgid "Fix shell scripts lint errors" msgstr "" -#: ../../../CHANGELOG:258 +#: ../../../CHANGELOG.md:261 msgid "Format api pyproject.toml" msgstr "" -#: ../../../CHANGELOG:259 +#: ../../../CHANGELOG.md:262 msgid "Format or fix files using pre-commit" msgstr "" -#: ../../../CHANGELOG:261 +#: ../../../CHANGELOG.md:264 msgid "Upgrade code to >=python3.7" msgstr "" -#: ../../../CHANGELOG:262 +#: ../../../CHANGELOG.md:265 msgid "Fix flake8 warnings" msgstr "" -#: ../../../CHANGELOG:263 +#: ../../../CHANGELOG.md:266 msgid "Fix spelling errors" msgstr "" -#: ../../../CHANGELOG:264 +#: ../../../CHANGELOG.md:267 msgid "Format files using black" msgstr "" -#: ../../../CHANGELOG:265 +#: ../../../CHANGELOG.md:268 msgid "Format files using isort" msgstr "" -#: ../../../CHANGELOG:266 +#: ../../../CHANGELOG.md:269 msgid "Format files using prettier" msgstr "" -#: ../../../CHANGELOG:267 +#: ../../../CHANGELOG.md:271 msgid "Move api tools config to pyproject.toml" msgstr "" -#: ../../../CHANGELOG:268 +#: ../../../CHANGELOG.md:272 msgid "Move database url composition from custom script to django settings" msgstr "" -#: ../../../CHANGELOG:269 +#: ../../../CHANGELOG.md:273 msgid "Remove docker_all_in_one_release ci job" msgstr "" -#: ../../../CHANGELOG:270 +#: ../../../CHANGELOG.md:274 msgid "Rename api composer/django/ dir to docker/" msgstr "" -#: ../../../CHANGELOG:271 +#: ../../../CHANGELOG.md:275 msgid "Unpin asgiref in API dependencies" msgstr "" -#: ../../../CHANGELOG:272 +#: ../../../CHANGELOG.md:276 msgid "Use vite for building the frontend, #1644" msgstr "" -#: ../../../CHANGELOG:275 +#: ../../../CHANGELOG.md:278 msgid "Removal:" msgstr "" -#: ../../../CHANGELOG:277 +#: ../../../CHANGELOG.md:280 msgid "This release removes support for Python 3.6. Please make sure you update your python version before Updating Funkwhale!" msgstr "" -#: ../../../CHANGELOG:282 +#: ../../../CHANGELOG.md:283 msgid "1.2.9 (2022-11-25)" msgstr "" -#: ../../../CHANGELOG:289 +#: ../../../CHANGELOG.md:289 msgid "Ensure index.html files get loaded with UTF-8 encoding" msgstr "" -#: ../../../CHANGELOG:290 +#: ../../../CHANGELOG.md:290 msgid "Fixed invitation reuse after the invited user has been deleted (#1952)" msgstr "" -#: ../../../CHANGELOG:291 +#: ../../../CHANGELOG.md:291 msgid "Fixed unplayable skipped upload (#1349)" msgstr "" -#: ../../../CHANGELOG:293 -#: ../../../CHANGELOG:343 -#: ../../../CHANGELOG:392 -#: ../../../CHANGELOG:427 -#: ../../../CHANGELOG:475 -#: ../../../CHANGELOG:550 -#: ../../../CHANGELOG:788 +#: ../../../CHANGELOG.md:293 +#: ../../../CHANGELOG.md:339 +#: ../../../CHANGELOG.md:385 +#: ../../../CHANGELOG.md:417 +#: ../../../CHANGELOG.md:462 +#: ../../../CHANGELOG.md:533 +#: ../../../CHANGELOG.md:671 +#: ../../../CHANGELOG.md:756 msgid "Committers:" msgstr "" -#: ../../../CHANGELOG:295 -#: ../../../CHANGELOG:303 -#: ../../../CHANGELOG:316 -#: ../../../CHANGELOG:346 -#: ../../../CHANGELOG:356 -#: ../../../CHANGELOG:375 -#: ../../../CHANGELOG:394 -#: ../../../CHANGELOG:404 -#: ../../../CHANGELOG:429 -#: ../../../CHANGELOG:438 -#: ../../../CHANGELOG:455 -#: ../../../CHANGELOG:477 -#: ../../../CHANGELOG:488 -#: ../../../CHANGELOG:503 -#: ../../../CHANGELOG:536 -#: ../../../CHANGELOG:545 -#: ../../../CHANGELOG:552 -#: ../../../CHANGELOG:585 -#: ../../../CHANGELOG:599 -#: ../../../CHANGELOG:609 -#: ../../../CHANGELOG:649 -#: ../../../CHANGELOG:660 -#: ../../../CHANGELOG:667 -#: ../../../CHANGELOG:695 -#: ../../../CHANGELOG:1126 +#: ../../../CHANGELOG.md:295 +#: ../../../CHANGELOG.md:303 +#: ../../../CHANGELOG.md:316 +#: ../../../CHANGELOG.md:342 +#: ../../../CHANGELOG.md:352 +#: ../../../CHANGELOG.md:371 +#: ../../../CHANGELOG.md:387 +#: ../../../CHANGELOG.md:397 +#: ../../../CHANGELOG.md:419 +#: ../../../CHANGELOG.md:428 +#: ../../../CHANGELOG.md:445 +#: ../../../CHANGELOG.md:464 +#: ../../../CHANGELOG.md:475 +#: ../../../CHANGELOG.md:490 +#: ../../../CHANGELOG.md:519 +#: ../../../CHANGELOG.md:528 +#: ../../../CHANGELOG.md:535 +#: ../../../CHANGELOG.md:565 +#: ../../../CHANGELOG.md:579 +#: ../../../CHANGELOG.md:589 +#: ../../../CHANGELOG.md:626 +#: ../../../CHANGELOG.md:637 +#: ../../../CHANGELOG.md:644 +#: ../../../CHANGELOG.md:661 +#: ../../../CHANGELOG.md:669 +#: ../../../CHANGELOG.md:674 +#: ../../../CHANGELOG.md:781 +#: ../../../CHANGELOG.md:826 +#: ../../../CHANGELOG.md:859 +#: ../../../CHANGELOG.md:986 +#: ../../../CHANGELOG.md:1071 msgid "Georg Krause" msgstr "" -#: ../../../CHANGELOG:296 -#: ../../../CHANGELOG:306 -#: ../../../CHANGELOG:318 -#: ../../../CHANGELOG:347 -#: ../../../CHANGELOG:360 -#: ../../../CHANGELOG:378 -#: ../../../CHANGELOG:395 -#: ../../../CHANGELOG:400 -#: ../../../CHANGELOG:405 -#: ../../../CHANGELOG:430 -#: ../../../CHANGELOG:439 -#: ../../../CHANGELOG:456 -#: ../../../CHANGELOG:490 -#: ../../../CHANGELOG:505 -#: ../../../CHANGELOG:538 -#: ../../../CHANGELOG:547 -#: ../../../CHANGELOG:553 -#: ../../../CHANGELOG:588 -#: ../../../CHANGELOG:602 -#: ../../../CHANGELOG:651 -#: ../../../CHANGELOG:662 -#: ../../../CHANGELOG:670 +#: ../../../CHANGELOG.md:296 +#: ../../../CHANGELOG.md:306 +#: ../../../CHANGELOG.md:318 +#: ../../../CHANGELOG.md:343 +#: ../../../CHANGELOG.md:356 +#: ../../../CHANGELOG.md:374 +#: ../../../CHANGELOG.md:388 +#: ../../../CHANGELOG.md:393 +#: ../../../CHANGELOG.md:398 +#: ../../../CHANGELOG.md:420 +#: ../../../CHANGELOG.md:429 +#: ../../../CHANGELOG.md:446 +#: ../../../CHANGELOG.md:477 +#: ../../../CHANGELOG.md:492 +#: ../../../CHANGELOG.md:521 +#: ../../../CHANGELOG.md:530 +#: ../../../CHANGELOG.md:536 +#: ../../../CHANGELOG.md:568 +#: ../../../CHANGELOG.md:582 +#: ../../../CHANGELOG.md:628 +#: ../../../CHANGELOG.md:639 +#: ../../../CHANGELOG.md:647 +#: ../../../CHANGELOG.md:793 +#: ../../../CHANGELOG.md:832 +#: ../../../CHANGELOG.md:863 msgid "Marcos Peña" msgstr "" -#: ../../../CHANGELOG:297 -#: ../../../CHANGELOG:319 -#: ../../../CHANGELOG:1131 +#: ../../../CHANGELOG.md:297 +#: ../../../CHANGELOG.md:319 +#: ../../../CHANGELOG.md:799 +#: ../../../CHANGELOG.md:836 +#: ../../../CHANGELOG.md:867 +#: ../../../CHANGELOG.md:998 +#: ../../../CHANGELOG.md:1076 msgid "Philipp Wolfer" msgstr "" -#: ../../../CHANGELOG:298 +#: ../../../CHANGELOG.md:298 msgid "Travis Briggs" msgstr "" -#: ../../../CHANGELOG:300 -#: ../../../CHANGELOG:351 -#: ../../../CHANGELOG:397 -#: ../../../CHANGELOG:434 -#: ../../../CHANGELOG:482 -#: ../../../CHANGELOG:531 -#: ../../../CHANGELOG:579 -#: ../../../CHANGELOG:646 -#: ../../../CHANGELOG:684 -#: ../../../CHANGELOG:848 +#: ../../../CHANGELOG.md:300 +#: ../../../CHANGELOG.md:347 +#: ../../../CHANGELOG.md:390 +#: ../../../CHANGELOG.md:424 +#: ../../../CHANGELOG.md:469 +#: ../../../CHANGELOG.md:514 +#: ../../../CHANGELOG.md:559 +#: ../../../CHANGELOG.md:623 +#: ../../../CHANGELOG.md:658 +#: ../../../CHANGELOG.md:816 msgid "Contributors to our Issues:" msgstr "" -#: ../../../CHANGELOG:302 -#: ../../../CHANGELOG:345 -#: ../../../CHANGELOG:355 -#: ../../../CHANGELOG:374 -#: ../../../CHANGELOG:399 -#: ../../../CHANGELOG:442 -#: ../../../CHANGELOG:487 -#: ../../../CHANGELOG:502 -#: ../../../CHANGELOG:535 -#: ../../../CHANGELOG:584 -#: ../../../CHANGELOG:598 -#: ../../../CHANGELOG:648 -#: ../../../CHANGELOG:659 -#: ../../../CHANGELOG:666 -#: ../../../CHANGELOG:1123 -#: ../../../CHANGELOG:1158 -#: ../../../CHANGELOG:1285 -#: ../../../CHANGELOG:1334 -#: ../../../CHANGELOG:1391 -#: ../../../CHANGELOG:1675 -#: ../../../CHANGELOG:1767 -#: ../../../CHANGELOG:2077 -#: ../../../CHANGELOG:2140 -#: ../../../CHANGELOG:2347 +#: ../../../CHANGELOG.md:302 +#: ../../../CHANGELOG.md:341 +#: ../../../CHANGELOG.md:351 +#: ../../../CHANGELOG.md:370 +#: ../../../CHANGELOG.md:392 +#: ../../../CHANGELOG.md:432 +#: ../../../CHANGELOG.md:474 +#: ../../../CHANGELOG.md:489 +#: ../../../CHANGELOG.md:518 +#: ../../../CHANGELOG.md:564 +#: ../../../CHANGELOG.md:578 +#: ../../../CHANGELOG.md:625 +#: ../../../CHANGELOG.md:636 +#: ../../../CHANGELOG.md:643 +#: ../../../CHANGELOG.md:660 +#: ../../../CHANGELOG.md:768 +#: ../../../CHANGELOG.md:822 +#: ../../../CHANGELOG.md:853 +#: ../../../CHANGELOG.md:976 +#: ../../../CHANGELOG.md:1068 +#: ../../../CHANGELOG.md:1100 +#: ../../../CHANGELOG.md:1214 +#: ../../../CHANGELOG.md:1259 +#: ../../../CHANGELOG.md:1309 +#: ../../../CHANGELOG.md:1586 +#: ../../../CHANGELOG.md:1672 +#: ../../../CHANGELOG.md:1970 +#: ../../../CHANGELOG.md:2028 +#: ../../../CHANGELOG.md:2218 msgid "Ciarán Ainsworth" msgstr "" -#: ../../../CHANGELOG:304 -#: ../../../CHANGELOG:317 -#: ../../../CHANGELOG:357 -#: ../../../CHANGELOG:376 -#: ../../../CHANGELOG:445 -#: ../../../CHANGELOG:489 -#: ../../../CHANGELOG:504 -#: ../../../CHANGELOG:537 -#: ../../../CHANGELOG:546 -#: ../../../CHANGELOG:586 -#: ../../../CHANGELOG:600 -#: ../../../CHANGELOG:610 -#: ../../../CHANGELOG:650 -#: ../../../CHANGELOG:661 -#: ../../../CHANGELOG:668 +#: ../../../CHANGELOG.md:304 +#: ../../../CHANGELOG.md:317 +#: ../../../CHANGELOG.md:353 +#: ../../../CHANGELOG.md:372 +#: ../../../CHANGELOG.md:435 +#: ../../../CHANGELOG.md:476 +#: ../../../CHANGELOG.md:491 +#: ../../../CHANGELOG.md:520 +#: ../../../CHANGELOG.md:529 +#: ../../../CHANGELOG.md:566 +#: ../../../CHANGELOG.md:580 +#: ../../../CHANGELOG.md:590 +#: ../../../CHANGELOG.md:627 +#: ../../../CHANGELOG.md:638 +#: ../../../CHANGELOG.md:645 +#: ../../../CHANGELOG.md:675 +#: ../../../CHANGELOG.md:788 +#: ../../../CHANGELOG.md:829 +#: ../../../CHANGELOG.md:861 msgid "JuniorJPDJ" msgstr "" -#: ../../../CHANGELOG:305 -#: ../../../CHANGELOG:358 -#: ../../../CHANGELOG:377 -#: ../../../CHANGELOG:587 -#: ../../../CHANGELOG:601 +#: ../../../CHANGELOG.md:305 +#: ../../../CHANGELOG.md:354 +#: ../../../CHANGELOG.md:373 +#: ../../../CHANGELOG.md:567 +#: ../../../CHANGELOG.md:581 +#: ../../../CHANGELOG.md:862 msgid "Kasper Seweryn" msgstr "" -#: ../../../CHANGELOG:307 -#: ../../../CHANGELOG:491 -#: ../../../CHANGELOG:539 -#: ../../../CHANGELOG:589 -#: ../../../CHANGELOG:652 +#: ../../../CHANGELOG.md:307 +#: ../../../CHANGELOG.md:478 +#: ../../../CHANGELOG.md:522 +#: ../../../CHANGELOG.md:569 +#: ../../../CHANGELOG.md:629 +#: ../../../CHANGELOG.md:663 +#: ../../../CHANGELOG.md:834 +#: ../../../CHANGELOG.md:864 msgid "Mathieu Jourdan" msgstr "" -#: ../../../CHANGELOG:308 -#: ../../../CHANGELOG:362 -#: ../../../CHANGELOG:441 -#: ../../../CHANGELOG:493 -#: ../../../CHANGELOG:540 -#: ../../../CHANGELOG:591 -#: ../../../CHANGELOG:653 +#: ../../../CHANGELOG.md:308 +#: ../../../CHANGELOG.md:358 +#: ../../../CHANGELOG.md:431 +#: ../../../CHANGELOG.md:480 +#: ../../../CHANGELOG.md:523 +#: ../../../CHANGELOG.md:571 +#: ../../../CHANGELOG.md:630 +#: ../../../CHANGELOG.md:664 +#: ../../../CHANGELOG.md:796 +#: ../../../CHANGELOG.md:835 +#: ../../../CHANGELOG.md:866 msgid "Micha Gläß-Stöcker" msgstr "" -#: ../../../CHANGELOG:309 -#: ../../../CHANGELOG:320 +#: ../../../CHANGELOG.md:309 +#: ../../../CHANGELOG.md:320 msgid "fuomag9" msgstr "" -#: ../../../CHANGELOG:310 +#: ../../../CHANGELOG.md:310 msgid "gammelalf" msgstr "" -#: ../../../CHANGELOG:311 +#: ../../../CHANGELOG.md:311 msgid "myOmikron" msgstr "" -#: ../../../CHANGELOG:312 -#: ../../../CHANGELOG:369 -#: ../../../CHANGELOG:497 -#: ../../../CHANGELOG:509 -#: ../../../CHANGELOG:541 -#: ../../../CHANGELOG:548 -#: ../../../CHANGELOG:594 -#: ../../../CHANGELOG:604 -#: ../../../CHANGELOG:655 +#: ../../../CHANGELOG.md:312 +#: ../../../CHANGELOG.md:365 +#: ../../../CHANGELOG.md:484 +#: ../../../CHANGELOG.md:496 +#: ../../../CHANGELOG.md:524 +#: ../../../CHANGELOG.md:531 +#: ../../../CHANGELOG.md:574 +#: ../../../CHANGELOG.md:584 +#: ../../../CHANGELOG.md:632 +#: ../../../CHANGELOG.md:665 +#: ../../../CHANGELOG.md:797 +#: ../../../CHANGELOG.md:846 +#: ../../../CHANGELOG.md:872 msgid "petitminion" msgstr "" -#: ../../../CHANGELOG:314 -#: ../../../CHANGELOG:372 -#: ../../../CHANGELOG:402 -#: ../../../CHANGELOG:452 -#: ../../../CHANGELOG:500 -#: ../../../CHANGELOG:543 -#: ../../../CHANGELOG:596 -#: ../../../CHANGELOG:657 -#: ../../../CHANGELOG:693 -#: ../../../CHANGELOG:881 +#: ../../../CHANGELOG.md:314 +#: ../../../CHANGELOG.md:368 +#: ../../../CHANGELOG.md:395 +#: ../../../CHANGELOG.md:442 +#: ../../../CHANGELOG.md:487 +#: ../../../CHANGELOG.md:526 +#: ../../../CHANGELOG.md:576 +#: ../../../CHANGELOG.md:634 +#: ../../../CHANGELOG.md:667 +#: ../../../CHANGELOG.md:849 msgid "Contributors to our Merge Requests:" msgstr "" -#: ../../../CHANGELOG:324 +#: ../../../CHANGELOG.md:322 msgid "1.2.8 (2022-09-12)" msgstr "" -#: ../../../CHANGELOG:331 +#: ../../../CHANGELOG.md:328 msgid "Add Sentry SDK to collect errors at the backend" msgstr "" -#: ../../../CHANGELOG:336 +#: ../../../CHANGELOG.md:332 msgid "Fix exponentially growing database when using in-place-imports on a regular base #1676" msgstr "" -#: ../../../CHANGELOG:337 +#: ../../../CHANGELOG.md:333 msgid "Fix navigating to registration request not showing anything (#1836)" msgstr "" -#: ../../../CHANGELOG:338 +#: ../../../CHANGELOG.md:334 msgid "Fix player cover image overlapping queue list" msgstr "" -#: ../../../CHANGELOG:339 +#: ../../../CHANGELOG.md:335 msgid "Fixed metadata handling for Various Artists albums (#1201)" msgstr "" -#: ../../../CHANGELOG:340 +#: ../../../CHANGELOG.md:336 msgid "Fixed search behaviour in radio builder's filters (#733)" msgstr "" -#: ../../../CHANGELOG:341 +#: ../../../CHANGELOG.md:337 msgid "Fixed unpredictable subsonic search3 results (#1782)" msgstr "" -#: ../../../CHANGELOG:348 +#: ../../../CHANGELOG.md:344 msgid "Mathias Koehler" msgstr "" -#: ../../../CHANGELOG:349 -#: ../../../CHANGELOG:432 -#: ../../../CHANGELOG:437 -#: ../../../CHANGELOG:454 +#: ../../../CHANGELOG.md:345 +#: ../../../CHANGELOG.md:422 +#: ../../../CHANGELOG.md:427 +#: ../../../CHANGELOG.md:444 msgid "wvffle" msgstr "" -#: ../../../CHANGELOG:353 -#: ../../../CHANGELOG:440 +#: ../../../CHANGELOG.md:349 +#: ../../../CHANGELOG.md:430 +#: ../../../CHANGELOG.md:818 msgid "AMoonRabbit" msgstr "" -#: ../../../CHANGELOG:354 -#: ../../../CHANGELOG:444 -#: ../../../CHANGELOG:484 -#: ../../../CHANGELOG:581 -#: ../../../CHANGELOG:1121 -#: ../../../CHANGELOG:1156 -#: ../../../CHANGELOG:1280 -#: ../../../CHANGELOG:1332 -#: ../../../CHANGELOG:1390 -#: ../../../CHANGELOG:1670 -#: ../../../CHANGELOG:1770 -#: ../../../CHANGELOG:2078 -#: ../../../CHANGELOG:2143 -#: ../../../CHANGELOG:2350 +#: ../../../CHANGELOG.md:350 +#: ../../../CHANGELOG.md:434 +#: ../../../CHANGELOG.md:471 +#: ../../../CHANGELOG.md:561 +#: ../../../CHANGELOG.md:819 +#: ../../../CHANGELOG.md:851 +#: ../../../CHANGELOG.md:967 +#: ../../../CHANGELOG.md:1066 +#: ../../../CHANGELOG.md:1098 +#: ../../../CHANGELOG.md:1209 +#: ../../../CHANGELOG.md:1257 +#: ../../../CHANGELOG.md:1308 +#: ../../../CHANGELOG.md:1581 +#: ../../../CHANGELOG.md:1675 +#: ../../../CHANGELOG.md:1971 +#: ../../../CHANGELOG.md:2031 +#: ../../../CHANGELOG.md:2221 msgid "Agate" msgstr "" -#: ../../../CHANGELOG:359 +#: ../../../CHANGELOG.md:355 msgid "Kelvin Hammond" msgstr "" -#: ../../../CHANGELOG:361 -#: ../../../CHANGELOG:1292 +#: ../../../CHANGELOG.md:357 +#: ../../../CHANGELOG.md:995 +#: ../../../CHANGELOG.md:1221 msgid "Meliurwen" msgstr "" -#: ../../../CHANGELOG:363 +#: ../../../CHANGELOG.md:359 msgid "Miv2nir" msgstr "" -#: ../../../CHANGELOG:364 +#: ../../../CHANGELOG.md:360 msgid "Sam Birch" msgstr "" -#: ../../../CHANGELOG:365 +#: ../../../CHANGELOG.md:361 msgid "Tolriq" msgstr "" -#: ../../../CHANGELOG:366 -#: ../../../CHANGELOG:495 -#: ../../../CHANGELOG:1395 -#: ../../../CHANGELOG:1706 +#: ../../../CHANGELOG.md:362 +#: ../../../CHANGELOG.md:482 +#: ../../../CHANGELOG.md:812 +#: ../../../CHANGELOG.md:839 +#: ../../../CHANGELOG.md:869 +#: ../../../CHANGELOG.md:1313 +#: ../../../CHANGELOG.md:1617 msgid "Tony Wasserka" msgstr "" -#: ../../../CHANGELOG:367 +#: ../../../CHANGELOG.md:363 msgid "f1reflyyyylmao" msgstr "" -#: ../../../CHANGELOG:368 -#: ../../../CHANGELOG:443 -#: ../../../CHANGELOG:1127 +#: ../../../CHANGELOG.md:364 +#: ../../../CHANGELOG.md:433 +#: ../../../CHANGELOG.md:784 +#: ../../../CHANGELOG.md:842 +#: ../../../CHANGELOG.md:870 +#: ../../../CHANGELOG.md:989 +#: ../../../CHANGELOG.md:1072 msgid "heyarne" msgstr "" -#: ../../../CHANGELOG:370 +#: ../../../CHANGELOG.md:366 msgid "troll" msgstr "" -#: ../../../CHANGELOG:379 +#: ../../../CHANGELOG.md:375 msgid "interru" msgstr "" -#: ../../../CHANGELOG:383 +#: ../../../CHANGELOG.md:377 msgid "1.2.7 (2022-07-14)" msgstr "" -#: ../../../CHANGELOG:390 +#: ../../../CHANGELOG.md:383 msgid "Fixed libre.fm plugin not submitting scrobbles (#1817)" msgstr "" -#: ../../../CHANGELOG:408 +#: ../../../CHANGELOG.md:400 msgid "1.2.6 (2022-07-04)" msgstr "" -#: ../../../CHANGELOG:415 +#: ../../../CHANGELOG.md:406 msgid "Channel overview was displaying foreign tracks (#1773)" msgstr "" -#: ../../../CHANGELOG:416 +#: ../../../CHANGELOG.md:407 msgid "Fixed login form focusing reset password link instead of next input (#1373)" msgstr "" -#: ../../../CHANGELOG:417 +#: ../../../CHANGELOG.md:408 msgid "Fixed missing album contextual menu (#1791)" msgstr "" -#: ../../../CHANGELOG:418 +#: ../../../CHANGELOG.md:409 msgid "Fixed single listening submission when repeating a song (#1312)" msgstr "" -#: ../../../CHANGELOG:419 +#: ../../../CHANGELOG.md:410 msgid "Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263)" msgstr "" -#: ../../../CHANGELOG:420 +#: ../../../CHANGELOG.md:411 msgid "Resolve timeouts if nodeinfo and service actor is not known (#1714)" msgstr "" -#: ../../../CHANGELOG:425 +#: ../../../CHANGELOG.md:415 msgid "Replaced references to #funkwhale-troubleshooting with #funkwhale-support" msgstr "" -#: ../../../CHANGELOG:431 -#: ../../../CHANGELOG:450 -#: ../../../CHANGELOG:457 -#: ../../../CHANGELOG:612 +#: ../../../CHANGELOG.md:421 +#: ../../../CHANGELOG.md:440 +#: ../../../CHANGELOG.md:447 +#: ../../../CHANGELOG.md:592 +#: ../../../CHANGELOG.md:798 msgid "Petitminion" msgstr "" -#: ../../../CHANGELOG:436 +#: ../../../CHANGELOG.md:426 msgid "jeweet" msgstr "" -#: ../../../CHANGELOG:446 +#: ../../../CHANGELOG.md:436 msgid "MichaelBechHansen" msgstr "" -#: ../../../CHANGELOG:447 +#: ../../../CHANGELOG.md:437 msgid "ooZberg" msgstr "" -#: ../../../CHANGELOG:448 +#: ../../../CHANGELOG.md:438 msgid "Esras ." msgstr "" -#: ../../../CHANGELOG:449 -#: ../../../CHANGELOG:507 +#: ../../../CHANGELOG.md:439 +#: ../../../CHANGELOG.md:494 msgid "PhieF" msgstr "" -#: ../../../CHANGELOG:460 +#: ../../../CHANGELOG.md:449 msgid "1.2.5 (2022-05-07)" msgstr "" -#: ../../../CHANGELOG:472 +#: ../../../CHANGELOG.md:459 msgid "Fix stopped player to not show 00:00 when loading a track (#1432)" msgstr "" -#: ../../../CHANGELOG:478 +#: ../../../CHANGELOG.md:465 +#: ../../../CHANGELOG.md:792 msgid "Marcos" msgstr "" -#: ../../../CHANGELOG:479 -#: ../../../CHANGELOG:492 -#: ../../../CHANGELOG:506 -#: ../../../CHANGELOG:554 -#: ../../../CHANGELOG:590 -#: ../../../CHANGELOG:603 -#: ../../../CHANGELOG:611 +#: ../../../CHANGELOG.md:466 +#: ../../../CHANGELOG.md:479 +#: ../../../CHANGELOG.md:493 +#: ../../../CHANGELOG.md:537 +#: ../../../CHANGELOG.md:570 +#: ../../../CHANGELOG.md:583 +#: ../../../CHANGELOG.md:591 msgid "MattDHarding" msgstr "" -#: ../../../CHANGELOG:480 -#: ../../../CHANGELOG:494 -#: ../../../CHANGELOG:508 +#: ../../../CHANGELOG.md:467 +#: ../../../CHANGELOG.md:481 +#: ../../../CHANGELOG.md:495 msgid "Stuart Begley-Miller" msgstr "" -#: ../../../CHANGELOG:485 -#: ../../../CHANGELOG:533 +#: ../../../CHANGELOG.md:472 +#: ../../../CHANGELOG.md:516 msgid "Beto Dealmeida" msgstr "" -#: ../../../CHANGELOG:486 -#: ../../../CHANGELOG:534 +#: ../../../CHANGELOG.md:473 +#: ../../../CHANGELOG.md:517 msgid "Cam Sweeney" msgstr "" -#: ../../../CHANGELOG:496 -#: ../../../CHANGELOG:593 -#: ../../../CHANGELOG:1129 -#: ../../../CHANGELOG:2357 +#: ../../../CHANGELOG.md:483 +#: ../../../CHANGELOG.md:573 +#: ../../../CHANGELOG.md:787 +#: ../../../CHANGELOG.md:844 +#: ../../../CHANGELOG.md:871 +#: ../../../CHANGELOG.md:993 +#: ../../../CHANGELOG.md:1074 +#: ../../../CHANGELOG.md:2228 msgid "jovuit" msgstr "" -#: ../../../CHANGELOG:498 +#: ../../../CHANGELOG.md:485 msgid "pullopen" msgstr "" -#: ../../../CHANGELOG:512 +#: ../../../CHANGELOG.md:498 msgid "1.2.4 (2022-04-23)" msgstr "" -#: ../../../CHANGELOG:519 +#: ../../../CHANGELOG.md:504 msgid "Hand cursor now displayed over artist and album cards" msgstr "" -#: ../../../CHANGELOG:524 +#: ../../../CHANGELOG.md:508 msgid "Fixes docs' SMTP URI configuration (#1749) (1749)" msgstr "" -#: ../../../CHANGELOG:529 +#: ../../../CHANGELOG.md:512 msgid "The documentation is now available in two versions: Develop and Stable" msgstr "" -#: ../../../CHANGELOG:558 +#: ../../../CHANGELOG.md:539 msgid "1.2.3 (2022-03-18)" msgstr "" -#: ../../../CHANGELOG:565 +#: ../../../CHANGELOG.md:545 msgid "Added support for all cover sources in the embedded player (#1697)." msgstr "" -#: ../../../CHANGELOG:571 +#: ../../../CHANGELOG.md:551 msgid "Catch ValueError on radio end (#1596)" msgstr "" -#: ../../../CHANGELOG:572 +#: ../../../CHANGELOG.md:552 msgid "Fix bug that prevents users from creating a new oauth application (#1706)" msgstr "" -#: ../../../CHANGELOG:573 +#: ../../../CHANGELOG.md:553 msgid "Fix failed track adding to playlist being silent (#1020)" msgstr "" -#: ../../../CHANGELOG:574 +#: ../../../CHANGELOG.md:554 msgid "Fix recently added radio not working has expected (#1674)" msgstr "" -#: ../../../CHANGELOG:575 +#: ../../../CHANGELOG.md:555 msgid "Fixed an issue where you couldn't load the details page for tracks with no associated album (#1703)" msgstr "" -#: ../../../CHANGELOG:576 +#: ../../../CHANGELOG.md:556 msgid "Fixed library visibility dropdown (#1384)" msgstr "" -#: ../../../CHANGELOG:577 +#: ../../../CHANGELOG.md:557 msgid "In playlist editor can now click outside the trashcan but inside the button to delete entry (#1348)" msgstr "" -#: ../../../CHANGELOG:582 +#: ../../../CHANGELOG.md:562 msgid "Baudouin Feildel" msgstr "" -#: ../../../CHANGELOG:583 +#: ../../../CHANGELOG.md:563 +#: ../../../CHANGELOG.md:766 msgid "Christoph Pomaska" msgstr "" -#: ../../../CHANGELOG:592 +#: ../../../CHANGELOG.md:572 msgid "dnikolov" msgstr "" -#: ../../../CHANGELOG:606 -#: ../../../CHANGELOG:664 +#: ../../../CHANGELOG.md:586 +#: ../../../CHANGELOG.md:641 msgid "Committers" msgstr "" -#: ../../../CHANGELOG:608 +#: ../../../CHANGELOG.md:588 +#: ../../../CHANGELOG.md:767 msgid "Ciaran Ainsworth" msgstr "" -#: ../../../CHANGELOG:613 +#: ../../../CHANGELOG.md:593 msgid "Reinhard Prechtl" msgstr "" -#: ../../../CHANGELOG:617 +#: ../../../CHANGELOG.md:595 msgid "1.2.2 (2022-02-04)" msgstr "" -#: ../../../CHANGELOG:624 +#: ../../../CHANGELOG.md:601 msgid "Fix an issue where the tracks tab in a library doesn't show any tracks (#1683)" msgstr "" -#: ../../../CHANGELOG:625 +#: ../../../CHANGELOG.md:602 msgid "Fix an issue with the embedded player not showing any content (#1675)" msgstr "" -#: ../../../CHANGELOG:626 +#: ../../../CHANGELOG.md:603 msgid "Fix broken instance description if it contains a line break #1673" msgstr "" -#: ../../../CHANGELOG:628 +#: ../../../CHANGELOG.md:605 msgid "Dependency Updates:" msgstr "" -#: ../../../CHANGELOG:630 -msgid "Update dependency vue-template-compiler to 2.6.14 Update dependency vue to ^2.6.14 Update dependency vuex-persistedstate to ^2.7.1 Update dependency vuedraggable to ^2.24.3 Update dependency vue-lazyload to ^1.3.3 Update dependency vue-plyr to ^5.1.3 Update dependency vue-upload-component to ^2.8.22 Update dependency vue-gettext to ^2.1.12 Update dependency showdown to ^1.9.1 Update dependency js-logger to ^1.6.1 Update dependency register-service-worker to ^1.7.2 Update dependency howler to ^2.2.3 Update dependency fomantic-ui-css to ^2.8.8 Update dependency diff to ^4.0.2 Update dependency axios-auth-refresh to ^2.2.8" +#: ../../../CHANGELOG.md:607 +msgid "Update dependency vue-template-compiler to 2.6.14" msgstr "" -#: ../../../CHANGELOG:654 +#: ../../../CHANGELOG.md:608 +msgid "Update dependency vue to ^2.6.14" +msgstr "" + +#: ../../../CHANGELOG.md:609 +msgid "Update dependency vuex-persistedstate to ^2.7.1" +msgstr "" + +#: ../../../CHANGELOG.md:610 +msgid "Update dependency vuedraggable to ^2.24.3" +msgstr "" + +#: ../../../CHANGELOG.md:611 +msgid "Update dependency vue-lazyload to ^1.3.3" +msgstr "" + +#: ../../../CHANGELOG.md:612 +msgid "Update dependency vue-plyr to ^5.1.3" +msgstr "" + +#: ../../../CHANGELOG.md:613 +msgid "Update dependency vue-upload-component to ^2.8.22" +msgstr "" + +#: ../../../CHANGELOG.md:614 +msgid "Update dependency vue-gettext to ^2.1.12" +msgstr "" + +#: ../../../CHANGELOG.md:615 +msgid "Update dependency showdown to ^1.9.1" +msgstr "" + +#: ../../../CHANGELOG.md:616 +msgid "Update dependency js-logger to ^1.6.1" +msgstr "" + +#: ../../../CHANGELOG.md:617 +msgid "Update dependency register-service-worker to ^1.7.2" +msgstr "" + +#: ../../../CHANGELOG.md:618 +msgid "Update dependency howler to ^2.2.3" +msgstr "" + +#: ../../../CHANGELOG.md:619 +msgid "Update dependency fomantic-ui-css to ^2.8.8" +msgstr "" + +#: ../../../CHANGELOG.md:620 +msgid "Update dependency diff to ^4.0.2" +msgstr "" + +#: ../../../CHANGELOG.md:621 +msgid "Update dependency axios-auth-refresh to ^2.2.8" +msgstr "" + +#: ../../../CHANGELOG.md:631 msgid "Ricardo" msgstr "" -#: ../../../CHANGELOG:669 -#: ../../../CHANGELOG:1688 -#: ../../../CHANGELOG:2086 +#: ../../../CHANGELOG.md:646 +#: ../../../CHANGELOG.md:1599 +#: ../../../CHANGELOG.md:1979 msgid "Keunes" msgstr "" -#: ../../../CHANGELOG:674 +#: ../../../CHANGELOG.md:649 msgid "1.2.1 (2022-01-06)" msgstr "" -#: ../../../CHANGELOG:681 +#: ../../../CHANGELOG.md:655 msgid "Fix Pipeline for stable release builds (#1652)" msgstr "" -#: ../../../CHANGELOG:682 +#: ../../../CHANGELOG.md:656 msgid "Fix remote content page (#1655)" msgstr "" -#: ../../../CHANGELOG:686 -msgid "Ciarán Ainsworth Georg Krause Jakob Schürz Mathieu Jourdan Micha Gläß-Stöcker petitminion" +#: ../../../CHANGELOG.md:662 +msgid "Jakob Schürz" msgstr "" -#: ../../../CHANGELOG:697 -msgid "Committers: Dignified Silence Georg Krause JuniorJPDJ nztvar" +#: ../../../CHANGELOG.md:673 +#: ../../../CHANGELOG.md:774 +msgid "Dignified Silence" msgstr "" -#: ../../../CHANGELOG:705 +#: ../../../CHANGELOG.md:676 +msgid "nztvar" +msgstr "" + +#: ../../../CHANGELOG.md:678 msgid "1.2.0 (2021-12-27)" msgstr "" -#: ../../../CHANGELOG:710 +#: ../../../CHANGELOG.md:682 msgid "Due to a bug in our CI Pipeline frontend artifacts are not available at https://dev.funkwhale.audio/funkwhale/funkwhale/builds/artifacts/1.2.0/download?job=build_front as they would usually. Please use this URL to get your frontend build: https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download" msgstr "" -#: ../../../CHANGELOG:714 +#: ../../../CHANGELOG.md:686 msgid "If you are running the All-in-One-Container since a longer time, you probably need to manually migrate your database information. If that's the case, you will get a message like this:" msgstr "" -#: ../../../CHANGELOG:716 -msgid "`DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 13.5.`" +#: ../../../CHANGELOG.md:688 +msgid "`DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 13.5.`" msgstr "" -#: ../../../CHANGELOG:718 +#: ../../../CHANGELOG.md:690 msgid "Make sure the Funkwhale version is set to `1.1.4` in `docker-compose.yml`. Now you can run this command to dump the database into a file:" msgstr "" -#: ../../../CHANGELOG:720 +#: ../../../CHANGELOG.md:692 msgid "`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > \"db.dump\"`" msgstr "" -#: ../../../CHANGELOG:722 +#: ../../../CHANGELOG.md:694 msgid "Now you can update the Funkwhale version in `docker-compose.yml` to `1.2.0`. Additionally you should save your `data` directory, eg by running `mv data data.bak && mkdir data`. Stop Funkwhale and start it again with the new version, by using `docker-compose down && docker-compose up -d`. This will initialize a fresh DB and applies all migrations. Now you can restore your database with the following command: `cat db.dump | docker-compose exec -T funkwhale psql -U funkwhale`. That's it, enjoy!" msgstr "" -#: ../../../CHANGELOG:726 +#: ../../../CHANGELOG.md:698 msgid "Implemented awesome recently added radio (part of #1390)" msgstr "" -#: ../../../CHANGELOG:727 +#: ../../../CHANGELOG.md:699 msgid "Rework the instance about page (#1376)" msgstr "" -#: ../../../CHANGELOG:728 +#: ../../../CHANGELOG.md:700 msgid "Made changes to the track table to make it more visibly pleasing" msgstr "" -#: ../../../CHANGELOG:733 +#: ../../../CHANGELOG.md:704 msgid "Add linting for Frontend code (#1602)" msgstr "" -#: ../../../CHANGELOG:734 +#: ../../../CHANGELOG.md:705 msgid "Add xmlns:content to feed schemas fixes #1535" msgstr "" -#: ../../../CHANGELOG:735 +#: ../../../CHANGELOG.md:706 msgid "Add a Maloja plugin to submit listenings" msgstr "" -#: ../../../CHANGELOG:736 +#: ../../../CHANGELOG.md:707 msgid "Add artist cover art in subsonic API response (#1528)" msgstr "" -#: ../../../CHANGELOG:737 +#: ../../../CHANGELOG.md:708 msgid "Allow listen activities privacy level to be set public" msgstr "" -#: ../../../CHANGELOG:738 +#: ../../../CHANGELOG.md:709 msgid "Allow running multi-container setup on non-root user inside docker (!1375) (fixes #1334)" msgstr "" -#: ../../../CHANGELOG:739 +#: ../../../CHANGELOG.md:710 msgid "Change volume dynamic range from 60dB to 40dB (fixes #1544)" msgstr "" -#: ../../../CHANGELOG:740 +#: ../../../CHANGELOG.md:711 msgid "Change Start Radio to Play Radio (#1400)" msgstr "" -#: ../../../CHANGELOG:741 +#: ../../../CHANGELOG.md:712 msgid "Display toast when subsonic password is copied (#1496)" msgstr "" -#: ../../../CHANGELOG:742 +#: ../../../CHANGELOG.md:713 msgid "Expose more metadata in Subsonic's getAlbumList endpoint (#623)" msgstr "" -#: ../../../CHANGELOG:743 +#: ../../../CHANGELOG.md:714 msgid "ListenBrainz: Submit media player and submission client information" msgstr "" -#: ../../../CHANGELOG:744 +#: ../../../CHANGELOG.md:715 msgid "Make \"play in list\" the default when interacting with individual tracks (#1274)" msgstr "" -#: ../../../CHANGELOG:745 +#: ../../../CHANGELOG.md:716 msgid "Prevent an uncontrolled exception when uploading a file without tags, and prints user friendly message (1275)" msgstr "" -#: ../../../CHANGELOG:746 +#: ../../../CHANGELOG.md:717 msgid "Remove deprecated JWT Authentication (#1108) (1108)" msgstr "" -#: ../../../CHANGELOG:747 +#: ../../../CHANGELOG.md:718 msgid "Remove Raven SDK to report errors to Sentry (#1425) (1425)" msgstr "" -#: ../../../CHANGELOG:748 +#: ../../../CHANGELOG.md:719 msgid "Replace psycopg2-binary with psycopg2 (#1513)" msgstr "" -#: ../../../CHANGELOG:753 -#: ../../../CHANGELOG:929 +#: ../../../CHANGELOG.md:723 +#: ../../../CHANGELOG.md:892 msgid "Add worker-src to nginx header to prevent issues (#1489)" msgstr "" -#: ../../../CHANGELOG:754 +#: ../../../CHANGELOG.md:724 msgid "Enable stepless adjustment of the volume slider (!1294)" msgstr "" -#: ../../../CHANGELOG:755 +#: ../../../CHANGELOG.md:725 msgid "Fix an error in a Subsonic methods that return lists of numbers/strings like getUser" msgstr "" -#: ../../../CHANGELOG:756 +#: ../../../CHANGELOG.md:726 msgid "Fix showing too long radio descriptions (#1556)" msgstr "" -#: ../../../CHANGELOG:757 +#: ../../../CHANGELOG.md:727 msgid "Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN value for other pages (fix #1022)" msgstr "" -#: ../../../CHANGELOG:758 +#: ../../../CHANGELOG.md:728 msgid "Fix before last track starts playing when last track removed (#1485)" msgstr "" -#: ../../../CHANGELOG:759 +#: ../../../CHANGELOG.md:729 msgid "Fix delete account button is not disabled when missing password (#1591)" msgstr "" -#: ../../../CHANGELOG:760 +#: ../../../CHANGELOG.md:730 msgid "Fix omputed properties already defined in components data (#1649)" msgstr "" -#: ../../../CHANGELOG:761 +#: ../../../CHANGELOG.md:731 msgid "Fix the all in one docker image building process, related to #1503" msgstr "" -#: ../../../CHANGELOG:762 +#: ../../../CHANGELOG.md:732 msgid "Fix crash in album moderation interface when missing cover (#1474)" msgstr "" -#: ../../../CHANGELOG:763 +#: ../../../CHANGELOG.md:733 msgid "Fix subsonic scrobble not triggering plugin hook (#1416)" msgstr "" -#: ../../../CHANGELOG:764 +#: ../../../CHANGELOG.md:734 msgid "Improve formatting of RSS episode descriptions (#1405)" msgstr "" -#: ../../../CHANGELOG:765 -#: ../../../CHANGELOG:930 +#: ../../../CHANGELOG.md:735 +#: ../../../CHANGELOG.md:893 msgid "Only suggest typed tag once if it already exists" msgstr "" -#: ../../../CHANGELOG:766 +#: ../../../CHANGELOG.md:736 msgid "Partially fixed playing two tracks at same time (#1213)" msgstr "" -#: ../../../CHANGELOG:767 +#: ../../../CHANGELOG.md:737 msgid "Revert changes that break mobile browser playback (#1509)" msgstr "" -#: ../../../CHANGELOG:768 +#: ../../../CHANGELOG.md:738 msgid "Sanitize remote tracks' saving locations with slashes on their names (#1435)" msgstr "" -#: ../../../CHANGELOG:769 +#: ../../../CHANGELOG.md:739 msgid "Show embed option for channel tracks (#1278)" msgstr "" -#: ../../../CHANGELOG:770 +#: ../../../CHANGELOG.md:740 msgid "Store volume in logarithmic scale and convert when setting it to audio (fixes #1543)" msgstr "" -#: ../../../CHANGELOG:771 +#: ../../../CHANGELOG.md:741 msgid "Use global Howler volume instead of setting it separately for each track (fixes #1542)" msgstr "" -#: ../../../CHANGELOG:776 +#: ../../../CHANGELOG.md:745 msgid "Add email configuration to the documentation (#1481)" msgstr "" -#: ../../../CHANGELOG:777 +#: ../../../CHANGELOG.md:746 msgid "Add server uninstallation documentation (\\!1314)" msgstr "" -#: ../../../CHANGELOG:778 +#: ../../../CHANGELOG.md:747 msgid "Document location of cli env file on macOS (\\!1354)" msgstr "" -#: ../../../CHANGELOG:779 +#: ../../../CHANGELOG.md:748 msgid "Fix broken backup documentation (#1345)" msgstr "" -#: ../../../CHANGELOG:780 +#: ../../../CHANGELOG.md:749 msgid "Refactore installation documentation and other small documentation adjustments (\\!1314)" msgstr "" -#: ../../../CHANGELOG:781 +#: ../../../CHANGELOG.md:750 msgid "Add User documentation for built-in plugins" msgstr "" -#: ../../../CHANGELOG:786 +#: ../../../CHANGELOG.md:754 msgid "Create stable branch, master is now deprecated and will be removed in 1.3 (#1476)" msgstr "" -#: ../../../CHANGELOG:790 -msgid "Alexandra Parker Alyssa Ross appzer0 Arthur Brugière Asier Iturralde Sarasola bittin Blopware Brian McMillen Christoph Pomaska Ciaran Ainsworth Ciarán Ainsworth Classified Connor Hay Damian Szetela David Marzal Deleted User Dignified Silence Dominik Danelski egon0 Erik Präntare Georg Abenthung Georgios B Georgios Brellas Georg Krause ghose greengekota heyarne ian Vatega Janek jovuit JuniorJPDJ Konstantinos G manuelviens Manuel Viens Marcos Marcos Peña Martin Giger Matthew J Micha Gläß-Stöcker petitminion Petitminion Philipp Wolfer Porrumentzio Quentin PAGÈS Raphael Lullis Riccardo Sacchetto Romain Failliot Rubén Cabrera Ryan Harg Sergio Varela SpcCw Stefano Pigozzi Thomas Tony Simoes Tony Wasserka vachan-maker Virgile Robles" +#: ../../../CHANGELOG.md:758 +msgid "Alexandra Parker" msgstr "" -#: ../../../CHANGELOG:850 -msgid "AMoonRabbit Agate Antoine POPINEAU Arthur Brugière Ciarán Ainsworth Connor Hay Creak David Marzal Georg Krause Gerhard Beck Greg Poole JuniorJPDJ Kuba Orlik Lunar Control Marcos Peña Mateusz Korzeniewski Mathieu Jourdan Micha Gläß-Stöcker Philipp Wolfer Porrumentzio Thomas Tony Wasserka Ville Ranki arkhi heyarne interfect jovuit mal petitminion vachan-maker" +#: ../../../CHANGELOG.md:759 +msgid "Alyssa Ross" msgstr "" -#: ../../../CHANGELOG:883 -msgid "Agate Arthur Brugière Ciarán Ainsworth Connor Hay David Marzal Distopico Fanyx Georg Abenthung Georg Krause Janek JuniorJPDJ Kasper Seweryn Marcos Peña Mathieu Jourdan Matthew J. Micha Gläß-Stöcker Philipp Wolfer Thomas Tony Wasserka heyarne jovuit petitminion thanksd" -msgstr "" - -#: ../../../CHANGELOG:909 -msgid "1.1.4 (2021-08-02)" -msgstr "" - -#: ../../../CHANGELOG:914 -msgid "Pinned version of asgiref to avoid trouble with latest release. For further information, see #1516" -msgstr "" - -#: ../../../CHANGELOG:917 -msgid "1.1.3 (2021-08-02)" -msgstr "" - -#: ../../../CHANGELOG:924 -msgid "Test better tagging of Docker Images (#1505)" -msgstr "" - -#: ../../../CHANGELOG:928 -msgid "Fix the scrobbler plugin submitting literal \"None\" as MusicBrainz ID (#1498)" -msgstr "" - -#: ../../../CHANGELOG:931 -msgid "Implement access control on the moderation views (#1494)" -msgstr "" - -#: ../../../CHANGELOG:932 -msgid "Prevent open redirect on login (#1492)" -msgstr "" - -#: ../../../CHANGELOG:936 -msgid "1.1.2 (2021-05-19)" -msgstr "" - -#: ../../../CHANGELOG:943 -msgid "Added modal to prompt users to log in when subscribing to channels (#1296)" -msgstr "" - -#: ../../../CHANGELOG:948 -msgid "Added missing is_playable serializer for the tracks endpoint." -msgstr "" - -#: ../../../CHANGELOG:949 -msgid "Fixed minor graphical bug where loaders would appear white in dark theme (#1442)" -msgstr "" - -#: ../../../CHANGELOG:950 -msgid "Fixed systemd unit for funkwhale-worker (#1160)" -msgstr "" - -#: ../../../CHANGELOG:951 -msgid "Several minor fixes for the Frontend" -msgstr "" - -#: ../../../CHANGELOG:955 -msgid "1.1.1 (2021-04-13)" -msgstr "" - -#: ../../../CHANGELOG:962 -msgid "Improve UI consistency in artist tracks (#1286)" -msgstr "" - -#: ../../../CHANGELOG:963 -msgid "Adds year to album's card and album's base UI" -msgstr "" - -#: ../../../CHANGELOG:967 -msgid "Fix playback issues when pausing close the the end of a track (#1324)" -msgstr "" - -#: ../../../CHANGELOG:968 -msgid "Fix tracks playing in the background without the ability to control them (#1213) (#1387)" -msgstr "" - -#: ../../../CHANGELOG:969 -msgid "Fixed track playback indicator to reset on queue end (#1380)" -msgstr "" - -#: ../../../CHANGELOG:970 -msgid "Frontend build tooling is less dependent on `npm` or `yarn` being used (!1285)" -msgstr "" - -#: ../../../CHANGELOG:971 -msgid "Fixed a small discrepancy to the subsonic api 1374" -msgstr "" - -#: ../../../CHANGELOG:975 -msgid "1.1 (2021-03-10)" -msgstr "" - -#: ../../../CHANGELOG:982 -#: ../../../CHANGELOG:1082 -msgid "Add number of tracks and discs of an album to API (#1238)" -msgstr "" - -#: ../../../CHANGELOG:983 -#: ../../../CHANGELOG:1083 -msgid "Add spacing after \"Play all\" button in playlist view (!1271)" -msgstr "" - -#: ../../../CHANGELOG:984 -#: ../../../CHANGELOG:1084 -msgid "Added a ListenBrainz plugin to submit listenings" -msgstr "" - -#: ../../../CHANGELOG:985 -#: ../../../CHANGELOG:1085 -msgid "Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294)" -msgstr "" - -#: ../../../CHANGELOG:986 -#: ../../../CHANGELOG:1086 -msgid "Added new search functions to allow users to more easily search for podcasts in the UI." -msgstr "" - -#: ../../../CHANGELOG:987 -#: ../../../CHANGELOG:1087 -msgid "Added padding to volume slider to ease mouse control (#1241)" -msgstr "" - -#: ../../../CHANGELOG:988 -#: ../../../CHANGELOG:1088 -msgid "Logarithmic scale for volume slider (#1222)" -msgstr "" - -#: ../../../CHANGELOG:989 -#: ../../../CHANGELOG:1089 -msgid "More user-friendly subsonic tokens (#1269)" -msgstr "" - -#: ../../../CHANGELOG:990 -#: ../../../CHANGELOG:1090 -msgid "Remove manual entry of Import Reference on front-end import (#1284)" -msgstr "" - -#: ../../../CHANGELOG:991 -#: ../../../CHANGELOG:1092 -msgid "Support AIFF file format (#1243)" -msgstr "" - -#: ../../../CHANGELOG:996 -#: ../../../CHANGELOG:1097 -msgid "\"Add check for empty/null covers (#1281)\"" -msgstr "" - -#: ../../../CHANGELOG:997 -#: ../../../CHANGELOG:1098 -msgid "Added an album filter to fix problem where channel entries would show up in the wrong series (#1282)" -msgstr "" - -#: ../../../CHANGELOG:998 -#: ../../../CHANGELOG:1099 -msgid "Avoid broken Faker version (#1323)" -msgstr "" - -#: ../../../CHANGELOG:999 -#: ../../../CHANGELOG:1100 -msgid "Changed audio format detection to happen via sniffing and not file extensions (#1274)" -msgstr "" - -#: ../../../CHANGELOG:1000 -#: ../../../CHANGELOG:1101 -msgid "Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289)" -msgstr "" - -#: ../../../CHANGELOG:1001 -#: ../../../CHANGELOG:1102 -msgid "Fix delete library modal closing immediately (#1272)" -msgstr "" - -#: ../../../CHANGELOG:1002 -#: ../../../CHANGELOG:1103 -msgid "Fix public shared remote library radio button being disabled (#1292)" -msgstr "" - -#: ../../../CHANGELOG:1003 -#: ../../../CHANGELOG:1104 -msgid "Fixed an issue that prevented disabling plugins" -msgstr "" - -#: ../../../CHANGELOG:1004 -#: ../../../CHANGELOG:1105 -msgid "Fixed an issue where channel albums don't show up in the album search (#1300)" -msgstr "" - -#: ../../../CHANGELOG:1005 -#: ../../../CHANGELOG:1106 -msgid "Fixed an issue where modals would prevent users being able to interact with channels (#1295)" -msgstr "" - -#: ../../../CHANGELOG:1006 -#: ../../../CHANGELOG:1107 -msgid "Update MediaSession metadata for initially loaded track (#1252)" -msgstr "" - -#: ../../../CHANGELOG:1007 -#: ../../../CHANGELOG:1108 -msgid "Update playback position slider also when track is paused (#1266)" -msgstr "" - -#: ../../../CHANGELOG:1008 -#: ../../../CHANGELOG:1068 -msgid "Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342" -msgstr "" - -#: ../../../CHANGELOG:1009 -#: ../../../CHANGELOG:1069 -msgid "Update pleroma JSON-LD Schema (#1341)" -msgstr "" - -#: ../../../CHANGELOG:1010 -#: ../../../CHANGELOG:1071 -msgid "Pin twisted version to 20.3.0" -msgstr "" - -#: ../../../CHANGELOG:1012 -#: ../../../CHANGELOG:1110 -#: ../../../CHANGELOG:1154 -#: ../../../CHANGELOG:1330 -msgid "Contributors to this release (development, documentation, reviews):" -msgstr "" - -#: ../../../CHANGELOG:1014 -msgid "Adam Novak Agate alemairebe Alicia Blasco Leon anonymous Amaranthe appzer0 Arne Asier Iturralde Sarasola Christian Paul Ciarán Ainsworth Daniel David Dominik Danelski Eorn le goéland Eleos Erik Duxstad Esteban Fred Uggla Freyja Wildes Georg Krause ghose hellekin heyarne interfect Jess Jing Johannes H. jovuit marzzzello Meliurwen Mehdi Nitai Bezerra da Silva Philipp Wolfer Pierre Couy Porrumentzio Reg Robert Kaye Rubén Cabrera Silver Fox Snack Capt SpcCw Strom Lin vicdorke x" -msgstr "" - -#: ../../../CHANGELOG:1061 -msgid "1.1-rc2 (2021-03-01)" -msgstr "" - -#: ../../../CHANGELOG:1070 -msgid "Revert fork replacement of http-signature since official package breaks federation" -msgstr "" - -#: ../../../CHANGELOG:1075 -msgid "1.1-rc1 (2021-02-24)" -msgstr "" - -#: ../../../CHANGELOG:1091 -msgid "Replaced forked http-signature dependency with official package (#876)" -msgstr "" - -#: ../../../CHANGELOG:1112 -#: ../../../CHANGELOG:2093 -#: ../../../CHANGELOG:2149 -msgid "Reg" -msgstr "" - -#: ../../../CHANGELOG:1113 -#: ../../../CHANGELOG:2082 -#: ../../../CHANGELOG:2146 -msgid "hellekin" -msgstr "" - -#: ../../../CHANGELOG:1114 -#: ../../../CHANGELOG:1771 -#: ../../../CHANGELOG:2079 -#: ../../../CHANGELOG:2144 -msgid "Esteban" -msgstr "" - -#: ../../../CHANGELOG:1115 -#: ../../../CHANGELOG:2081 -#: ../../../CHANGELOG:2145 -msgid "Freyja Wildes" -msgstr "" - -#: ../../../CHANGELOG:1116 -#: ../../../CHANGELOG:2075 -msgid "Amaranthe" -msgstr "" - -#: ../../../CHANGELOG:1117 -msgid "Eleos" -msgstr "" - -#: ../../../CHANGELOG:1118 -#: ../../../CHANGELOG:1772 -#: ../../../CHANGELOG:2085 -#: ../../../CHANGELOG:2147 -msgid "Johannes H." -msgstr "" - -#: ../../../CHANGELOG:1119 -#: ../../../CHANGELOG:2089 -#: ../../../CHANGELOG:2148 -msgid "Mehdi" -msgstr "" - -#: ../../../CHANGELOG:1120 -msgid "Adam Novak" -msgstr "" - -#: ../../../CHANGELOG:1122 -msgid "Christian Paul" -msgstr "" - -#: ../../../CHANGELOG:1124 -msgid "Erik Duxstad" -msgstr "" - -#: ../../../CHANGELOG:1125 -msgid "Fred Uggla" -msgstr "" - -#: ../../../CHANGELOG:1128 -#: ../../../CHANGELOG:2354 -msgid "interfect" -msgstr "" - -#: ../../../CHANGELOG:1130 -msgid "Nitai Bezerra da Silva" -msgstr "" - -#: ../../../CHANGELOG:1132 -msgid "Pierre Couy" -msgstr "" - -#: ../../../CHANGELOG:1133 -msgid "Robert Kaye" -msgstr "" - -#: ../../../CHANGELOG:1134 -msgid "Strom Lin" -msgstr "" - -#: ../../../CHANGELOG:1137 -msgid "1.0.1 (2020-10-31)" -msgstr "" - -#: ../../../CHANGELOG:1144 -msgid "Added controls to play volume of an album (#1226)" -msgstr "" - -#: ../../../CHANGELOG:1145 -msgid "Allow genre tags to be updated when rescanning files in-place (#1246)" -msgstr "" - -#: ../../../CHANGELOG:1150 -msgid "Fixed broken install because of upgraded dependencies" -msgstr "" - -#: ../../../CHANGELOG:1151 -msgid "Fixed duplication of discs for multi-disc albums in album views (#1228)" -msgstr "" - -#: ../../../CHANGELOG:1152 -msgid "Make the generated RSS feed more conformant with w3c specification (#1250)" -msgstr "" - -#: ../../../CHANGELOG:1157 -msgid "Cédric Schieli" -msgstr "" - -#: ../../../CHANGELOG:1159 -msgid "Kuba Orlik" -msgstr "" - -#: ../../../CHANGELOG:1162 -msgid "1.0 (2020-09-09)" -msgstr "" - -#: ../../../CHANGELOG:1169 -msgid "Dropped python 3.5 support [manual action required, non-docker only]" -msgstr "" - -#: ../../../CHANGELOG:1171 -msgid "With Funkwhale 1.0, we're dropping support for Python 3.5. Before upgrading, ensure ``python3 --version`` returns ``3.6`` or higher." -msgstr "" - -#: ../../../CHANGELOG:1174 -msgid "If it returns ``3.6`` or higher, you have nothing to do." -msgstr "" - -#: ../../../CHANGELOG:1176 -msgid "If it returns ``3.5``, you will need to upgrade your Python version/Host, then recreate your virtual environment::" -msgstr "" - -#: ../../../CHANGELOG:1183 -msgid "Increased quality of JPEG thumbnails [manual action required]" -msgstr "" - -#: ../../../CHANGELOG:1185 -msgid "Default quality for JPEG thumbnails was increased from 70 to 95, as 70 was producing visible artifacts in resized images." -msgstr "" - -#: ../../../CHANGELOG:1187 -msgid "Because of this change, existing thumbnails will not load, and you will need to:" -msgstr "" - -#: ../../../CHANGELOG:1189 -msgid "delete the ``__sized__`` directory in your ``MEDIA_ROOT`` directory" -msgstr "" - -#: ../../../CHANGELOG:1190 -msgid "run ``python manage.py fw media generate-thumbnails`` to regenerate thumbnails with the enhanced quality" -msgstr "" - -#: ../../../CHANGELOG:1192 -msgid "If you don't want to regenerate thumbnails, you can keep the old ones by adding ``THUMBNAIL_JPEG_RESIZE_QUALITY=70`` to your .env file." -msgstr "" - -#: ../../../CHANGELOG:1195 -#: ../../../CHANGELOG:1375 -msgid "Small API breaking change in ``/api/v1/libraries``" -msgstr "" - -#: ../../../CHANGELOG:1197 -#: ../../../CHANGELOG:1377 -msgid "To allow easier crawling of public libraries on a pod,we had to make a slight breaking change to the behaviour of ``GET /api/v1/libraries``." -msgstr "" - -#: ../../../CHANGELOG:1200 -#: ../../../CHANGELOG:1380 -msgid "Before, it returned only libraries owned by the current user." -msgstr "" - -#: ../../../CHANGELOG:1202 -#: ../../../CHANGELOG:1382 -msgid "Now, it returns all the accessible libraries (including ones from other users and pods)." -msgstr "" - -#: ../../../CHANGELOG:1204 -#: ../../../CHANGELOG:1384 -msgid "If you are consuming the API via a third-party client and need to retrieve your libraries, use the ``scope`` parameter, like this: ``GET /api/v1/libraries?scope=me``" -msgstr "" - -#: ../../../CHANGELOG:1208 -msgid "API breaking change in ``/api/v1/albums``" -msgstr "" - -#: ../../../CHANGELOG:1210 -msgid "To increase performance, querying ``/api/v1/albums`` doesn't return album tracks anymore. This caused some performance issues, especially as some albums and series have dozens or even hundreds of tracks." -msgstr "" - -#: ../../../CHANGELOG:1213 -msgid "If you want to retrieve tracks for an album, you can query ``/api/v1/tracks/?album=<albumid>``." -msgstr "" - -#: ../../../CHANGELOG:1216 -msgid "JWT deprecation" -msgstr "" - -#: ../../../CHANGELOG:1218 -msgid "API Authentication using JWT is deprecated and will be removed in Funkwhale 1.0. Please use OAuth or application tokens and refer to our API documentation at https://docs.funkwhale.audio/swagger/ for guidance." -msgstr "" - -#: ../../../CHANGELOG:1222 -#: ../../../CHANGELOG:1583 -msgid "Full list of changes" -msgstr "" - -#: ../../../CHANGELOG:1226 -msgid "Allow users to hide compilation artists on the artist search page (#1053)" -msgstr "" - -#: ../../../CHANGELOG:1227 -msgid "Can now launch server import from the UI (#1105)" -msgstr "" - -#: ../../../CHANGELOG:1228 -msgid "Dedicated, advanced search page (#370)" -msgstr "" - -#: ../../../CHANGELOG:1229 -msgid "Persist theme and language settings across sessions (#996)" -msgstr "" - -#: ../../../CHANGELOG:1234 -msgid "Add support for unauthenticated users hitting the logout page" -msgstr "" - -#: ../../../CHANGELOG:1235 -msgid "Added support for Licence Art Libre (#1088)" -msgstr "" - -#: ../../../CHANGELOG:1236 -msgid "Broadcast/handle rejected follows (#858)" -msgstr "" - -#: ../../../CHANGELOG:1237 -msgid "Confirm email without requiring the user to validate the form manually (#407)" -msgstr "" - -#: ../../../CHANGELOG:1238 -msgid "Display channel and track downloads count (#1178)" -msgstr "" - -#: ../../../CHANGELOG:1239 -msgid "Do not include tracks in album API representation (#1102)" -msgstr "" - -#: ../../../CHANGELOG:1240 -msgid "Dropped python 3.5 support. Python 3.6 is the minimum required version (#1099)" -msgstr "" - -#: ../../../CHANGELOG:1241 -msgid "Improved keyboard accessibility (#1125)" -msgstr "" - -#: ../../../CHANGELOG:1242 -msgid "Improved naming of pages for accessibility (#1127)" -msgstr "" - -#: ../../../CHANGELOG:1243 -msgid "Improved shuffle behaviour (#1190)" -msgstr "" - -#: ../../../CHANGELOG:1244 -msgid "Increased quality of JPEG thumbnails" -msgstr "" - -#: ../../../CHANGELOG:1245 -msgid "Lock focus in modals to improve accessibility (#1128)" -msgstr "" - -#: ../../../CHANGELOG:1246 -msgid "More consistent search UX on /albums, /artists, /radios and /playlists (#1131)" -msgstr "" - -#: ../../../CHANGELOG:1247 -msgid "Play button now replace current queue instead of appending to it (#1083)" -msgstr "" - -#: ../../../CHANGELOG:1248 -msgid "Set proper lang attribute on HTML document (#1130)" -msgstr "" - -#: ../../../CHANGELOG:1249 -msgid "Use semantic headers for accessibility (#1121)" -msgstr "" - -#: ../../../CHANGELOG:1250 -msgid "Users can now update their email address (#292)" -msgstr "" - -#: ../../../CHANGELOG:1251 -msgid "[plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and secret are provided" -msgstr "" - -#: ../../../CHANGELOG:1252 -msgid "Added a new, large thumbnail size for cover images (#1205" -msgstr "" - -#: ../../../CHANGELOG:1253 -msgid "Enforce authentication when viewing remote channels, profiles and libraries (#1210)" -msgstr "" - -#: ../../../CHANGELOG:1259 -msgid "Fix broken media support detection (#1180)" -msgstr "" - -#: ../../../CHANGELOG:1260 -msgid "Fix layout issue with playbar on landscape tablets (#1144)" -msgstr "" - -#: ../../../CHANGELOG:1261 -msgid "Fix random radio so that podcast content is not picked up (#1140)" -msgstr "" - -#: ../../../CHANGELOG:1262 -msgid "Fixed an issue with search pages where results would not appear after navigating to another page" -msgstr "" - -#: ../../../CHANGELOG:1263 -msgid "Fixed crash with negative track position in file tags (#1193)" -msgstr "" - -#: ../../../CHANGELOG:1264 -msgid "Handle access errors scanning directories when importing files" -msgstr "" - -#: ../../../CHANGELOG:1265 -#: ../../../CHANGELOG:1328 -msgid "Make channel card updated times more humanly readable, add internationalization (#1089)" -msgstr "" - -#: ../../../CHANGELOG:1266 -msgid "Ensure search page reloads if another search is submitted in the sidebar (#1197)" -msgstr "" - -#: ../../../CHANGELOG:1267 -msgid "Fixed \"scope=subscribed\" on albums, artists, uploads and libraries API (#1217)" -msgstr "" - -#: ../../../CHANGELOG:1268 -msgid "Fixed broken federation with pods using allow-listing (#1999)" -msgstr "" - -#: ../../../CHANGELOG:1269 -msgid "Fixed broken search when using (, \" or & chars (#1196)" -msgstr "" - -#: ../../../CHANGELOG:1270 -msgid "Fixed domains table hidden controls when no domains are found (#1198)" -msgstr "" - -#: ../../../CHANGELOG:1275 -msgid "Simplify Docker mono-container installation and upgrade documentation" -msgstr "" - -#: ../../../CHANGELOG:1278 -#: ../../../CHANGELOG:1668 -msgid "Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects):" -msgstr "" - -#: ../../../CHANGELOG:1281 -msgid "Andy Craze" -msgstr "" - -#: ../../../CHANGELOG:1282 -msgid "anonymous" -msgstr "" - -#: ../../../CHANGELOG:1283 +#: ../../../CHANGELOG.md:760 +#: ../../../CHANGELOG.md:972 +#: ../../../CHANGELOG.md:1212 msgid "appzer0" msgstr "" -#: ../../../CHANGELOG:1284 -msgid "Arne" +#: ../../../CHANGELOG.md:761 +#: ../../../CHANGELOG.md:821 +#: ../../../CHANGELOG.md:852 +msgid "Arthur Brugière" msgstr "" -#: ../../../CHANGELOG:1286 -#: ../../../CHANGELOG:1677 -#: ../../../CHANGELOG:1769 -#: ../../../CHANGELOG:2349 -msgid "Daniele Lira Mereb" +#: ../../../CHANGELOG.md:762 +#: ../../../CHANGELOG.md:974 +msgid "Asier Iturralde Sarasola" msgstr "" -#: ../../../CHANGELOG:1287 -msgid "dulz" +#: ../../../CHANGELOG.md:763 +msgid "bittin" msgstr "" -#: ../../../CHANGELOG:1288 -#: ../../../CHANGELOG:1681 -#: ../../../CHANGELOG:2080 -msgid "Francesc Galí" +#: ../../../CHANGELOG.md:764 +msgid "Blopware" msgstr "" -#: ../../../CHANGELOG:1289 +#: ../../../CHANGELOG.md:765 +msgid "Brian McMillen" +msgstr "" + +#: ../../../CHANGELOG.md:769 +msgid "Classified" +msgstr "" + +#: ../../../CHANGELOG.md:770 +#: ../../../CHANGELOG.md:823 +#: ../../../CHANGELOG.md:854 +msgid "Connor Hay" +msgstr "" + +#: ../../../CHANGELOG.md:771 +msgid "Damian Szetela" +msgstr "" + +#: ../../../CHANGELOG.md:772 +#: ../../../CHANGELOG.md:825 +#: ../../../CHANGELOG.md:855 +msgid "David Marzal" +msgstr "" + +#: ../../../CHANGELOG.md:773 +msgid "Deleted User" +msgstr "" + +#: ../../../CHANGELOG.md:775 +#: ../../../CHANGELOG.md:979 +msgid "Dominik Danelski" +msgstr "" + +#: ../../../CHANGELOG.md:776 +msgid "egon0" +msgstr "" + +#: ../../../CHANGELOG.md:777 +msgid "Erik Präntare" +msgstr "" + +#: ../../../CHANGELOG.md:778 +#: ../../../CHANGELOG.md:858 +msgid "Georg Abenthung" +msgstr "" + +#: ../../../CHANGELOG.md:779 +msgid "Georgios B" +msgstr "" + +#: ../../../CHANGELOG.md:780 +msgid "Georgios Brellas" +msgstr "" + +#: ../../../CHANGELOG.md:782 +#: ../../../CHANGELOG.md:987 +#: ../../../CHANGELOG.md:1218 msgid "ghose" msgstr "" -#: ../../../CHANGELOG:1290 -msgid "Kalle Anka" +#: ../../../CHANGELOG.md:783 +msgid "greengekota" msgstr "" -#: ../../../CHANGELOG:1291 -msgid "mekind" +#: ../../../CHANGELOG.md:785 +msgid "ian Vatega" msgstr "" -#: ../../../CHANGELOG:1293 -msgid "Puri" +#: ../../../CHANGELOG.md:786 +#: ../../../CHANGELOG.md:860 +msgid "Janek" msgstr "" -#: ../../../CHANGELOG:1294 -#: ../../../CHANGELOG:1699 -#: ../../../CHANGELOG:1775 +#: ../../../CHANGELOG.md:789 +msgid "Konstantinos G" +msgstr "" + +#: ../../../CHANGELOG.md:790 +msgid "manuelviens" +msgstr "" + +#: ../../../CHANGELOG.md:791 +msgid "Manuel Viens" +msgstr "" + +#: ../../../CHANGELOG.md:794 +msgid "Martin Giger" +msgstr "" + +#: ../../../CHANGELOG.md:795 +msgid "Matthew J" +msgstr "" + +#: ../../../CHANGELOG.md:800 +#: ../../../CHANGELOG.md:837 +#: ../../../CHANGELOG.md:1000 +msgid "Porrumentzio" +msgstr "" + +#: ../../../CHANGELOG.md:801 +#: ../../../CHANGELOG.md:1223 +#: ../../../CHANGELOG.md:1610 +#: ../../../CHANGELOG.md:1680 msgid "Quentin PAGÈS" msgstr "" -#: ../../../CHANGELOG:1295 -msgid "Raphaël Ventura" +#: ../../../CHANGELOG.md:802 +msgid "Raphael Lullis" msgstr "" -#: ../../../CHANGELOG:1296 -msgid "Slimane Selyan Amiri" +#: ../../../CHANGELOG.md:803 +msgid "Riccardo Sacchetto" msgstr "" -#: ../../../CHANGELOG:1297 -#: ../../../CHANGELOG:1703 -#: ../../../CHANGELOG:2096 -msgid "SpcCw" -msgstr "" - -#: ../../../CHANGELOG:1298 -msgid "Stefano Pigozzi" -msgstr "" - -#: ../../../CHANGELOG:1299 -msgid "Sébastien de Melo" -msgstr "" - -#: ../../../CHANGELOG:1300 -msgid "Ventura Pérez García" -msgstr "" - -#: ../../../CHANGELOG:1301 -msgid "vicdorke" -msgstr "" - -#: ../../../CHANGELOG:1302 -#: ../../../CHANGELOG:1711 -#: ../../../CHANGELOG:2100 -msgid "Xosé M" -msgstr "" - -#: ../../../CHANGELOG:1306 -msgid "0.21.2 (2020-07-27)" -msgstr "" - -#: ../../../CHANGELOG:1313 -msgid "Added a new ?related=obj_id filter for artists, albums and tracks, based on tags" -msgstr "" - -#: ../../../CHANGELOG:1314 -msgid "Can now filter subscribed content through API (#1116)" -msgstr "" - -#: ../../../CHANGELOG:1315 -msgid "Support ordering=random for artists, albums, tracks and channels endpoints (#1145)" -msgstr "" - -#: ../../../CHANGELOG:1316 -msgid "Use role=alert on forms/toast message to improve accessibility (#1134)" -msgstr "" - -#: ../../../CHANGELOG:1321 -msgid "Fix embedded player not working on channel series/album (#1175)" -msgstr "" - -#: ../../../CHANGELOG:1322 -msgid "Fixed broken mimetype detection during import (#1165)" -msgstr "" - -#: ../../../CHANGELOG:1323 -msgid "Fixed crash when loading recent albums via Subsonic (#1158)" -msgstr "" - -#: ../../../CHANGELOG:1324 -msgid "Fixed crash with null help text in admin (#1161)" -msgstr "" - -#: ../../../CHANGELOG:1325 -msgid "Fixed invalid metadata when importing multi-artists tracks/albums (#1104)" -msgstr "" - -#: ../../../CHANGELOG:1326 -msgid "Fixed player crash when using Funkwhale as a PWA (#1157)" -msgstr "" - -#: ../../../CHANGELOG:1327 -msgid "Fixed wrong convert art displaying in some situations (#1138)" -msgstr "" - -#: ../../../CHANGELOG:1333 -msgid "Bheesham Persaud" -msgstr "" - -#: ../../../CHANGELOG:1338 -msgid "0.21.1 (2020-06-11)" -msgstr "" - -#: ../../../CHANGELOG:1346 -msgid "Support a --watch mode with ``import_files`` to automatically add, update and remove files when filesystem is updated (#721)" -msgstr "" - -#: ../../../CHANGELOG:1350 -msgid "Added new channels widget on pod landing page (#1113)" -msgstr "" - -#: ../../../CHANGELOG:1351 -msgid "Fix HTML <title> not including instance name in some situations (#1107)" -msgstr "" - -#: ../../../CHANGELOG:1352 -msgid "Make URL-building logic more resilient against reverse proxy misconfiguration (#1085)" -msgstr "" - -#: ../../../CHANGELOG:1353 -msgid "Removed unused masonry dependency (#1112)" -msgstr "" - -#: ../../../CHANGELOG:1354 -msgid "Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154)" -msgstr "" - -#: ../../../CHANGELOG:1355 -msgid "Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151)" -msgstr "" - -#: ../../../CHANGELOG:1360 -msgid "Added safeguard to ensure local uploads are never purged from cache (#1086)" -msgstr "" - -#: ../../../CHANGELOG:1361 -msgid "Ensure firefox password manager dont autofill username in search bar (#1090)" -msgstr "" - -#: ../../../CHANGELOG:1362 -msgid "Ensure player doesn't disappear when last queue track is removed manually (#1092)" -msgstr "" - -#: ../../../CHANGELOG:1363 -msgid "Ensure tracks linked to skipped upload can be pruned (#1011)" -msgstr "" - -#: ../../../CHANGELOG:1364 -msgid "Fix playlist modal only listing 50 first playlists (#1087)" -msgstr "" - -#: ../../../CHANGELOG:1365 -msgid "Fixed a wording issue on artist channel page (#1117)" -msgstr "" - -#: ../../../CHANGELOG:1366 -msgid "Fixed crash on python 3.5 with cli importer (#1155)" -msgstr "" - -#: ../../../CHANGELOG:1367 -msgid "Fixed issue when displaying starred tracks on subsonic (#1082)" -msgstr "" - -#: ../../../CHANGELOG:1368 -msgid "Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run ``python manage.py fix_uploads --mimetype`` to set proper mimetypes on existing uploads." -msgstr "" - -#: ../../../CHANGELOG:1369 -msgid "Fixed page not refreshing when switching between My Library and Explore sections (#1091)" -msgstr "" - -#: ../../../CHANGELOG:1370 -msgid "Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147)" -msgstr "" - -#: ../../../CHANGELOG:1371 -msgid "Fixed wrong album and track count in admin artist API (#1096)" -msgstr "" - -#: ../../../CHANGELOG:1372 -msgid "Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078)" -msgstr "" - -#: ../../../CHANGELOG:1388 -msgid "Contributors to this release (development, documentation, reviews, testing):" -msgstr "" - -#: ../../../CHANGELOG:1392 -#: ../../../CHANGELOG:1676 -#: ../../../CHANGELOG:2141 -msgid "Creak" -msgstr "" - -#: ../../../CHANGELOG:1393 -msgid "gisforgabriel" -msgstr "" - -#: ../../../CHANGELOG:1394 -msgid "Siren" -msgstr "" - -#: ../../../CHANGELOG:1399 -msgid "0.21 \"Agate\" (2020-04-24)" -msgstr "" - -#: ../../../CHANGELOG:1401 -msgid "This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3" -msgstr "" - -#: ../../../CHANGELOG:1403 -msgid "We are truly grateful as well to the dozens of people who contributed to this release with translations, development, documentation, reviews, design, testing, feedback, financial support, third-party projects and integrations… You made it possible!" -msgstr "" - -#: ../../../CHANGELOG:1405 -msgid "Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html, there are also additional operations you need to execute, listed in the changelog below (search \"Manual action\")." -msgstr "" - -#: ../../../CHANGELOG:1409 -msgid "Channels and podcasts" -msgstr "" - -#: ../../../CHANGELOG:1411 -msgid "Funkwhale 0.21 includes a brand new feature: Channels!" -msgstr "" - -#: ../../../CHANGELOG:1413 -msgid "Channels can be used as a replacement to public libraries, to publish audio content, both musical and non-musical. They federate with other Funkwhale pods, but also other fediverse software, in particular Mastodon, Pleroma, Friendica and Reel2Bits, meaning people can subscribe to your channel from any of these software. To get started with publication, simply visit your profile and create a channel from there." -msgstr "" - -#: ../../../CHANGELOG:1418 -msgid "Each Funkwhale channel also comes with RSS feed that is compatible with existing podcasting applications, like AntennaPod on Android and, within Funkwhale, you can also subscribe to any podcast from its RSS feed!" -msgstr "" - -#: ../../../CHANGELOG:1421 -msgid "Many, many thanks to the numerous people who helped with the feature design, development and testing, and in particular to the members of the working group who met every week for months in order to get this done, and the members of other third-party projects who took the time to work with us to ensure compatibility." -msgstr "" - -#: ../../../CHANGELOG:1426 -msgid "Redesigned navigation, player and queue" -msgstr "" - -#: ../../../CHANGELOG:1428 -msgid "This release includes a full redesign of our navigation, player and queue. Overall, it should provide a better, less confusing experience, especially on mobile devices. This redesign was suggested 14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done!" -msgstr "" - -#: ../../../CHANGELOG:1433 -msgid "Improved search bar for searching remote objects" -msgstr "" - -#: ../../../CHANGELOG:1435 -msgid "The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly:" -msgstr "" - -#: ../../../CHANGELOG:1437 -msgid "Subscribe to a remote library via its URL" -msgstr "" - -#: ../../../CHANGELOG:1438 -msgid "Listen a public track from another pod" -msgstr "" - -#: ../../../CHANGELOG:1439 -msgid "Subscribe to a channel" -msgstr "" - -#: ../../../CHANGELOG:1442 -msgid "Screening for sign-ups and custom sign-up form" -msgstr "" - -#: ../../../CHANGELOG:1444 -msgid "Instance admins can now configure their pod so that registrations required manual approval from a moderator. This is especially useful on private or semi-private pods where you don't want to close registrations completely, but don't want spam or unwanted users to join your pod." -msgstr "" - -#: ../../../CHANGELOG:1448 -msgid "When this is enabled and a new user register, their request is put in a moderation queue, and moderators are notified by email. When the request is approved or refused, the user is also notified by email." -msgstr "" - -#: ../../../CHANGELOG:1451 -msgid "In addition, it's also possible to customize the sign-up form by:" -msgstr "" - -#: ../../../CHANGELOG:1453 -msgid "Providing a custom help text, in markdown format" -msgstr "" - -#: ../../../CHANGELOG:1454 -msgid "Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods" -msgstr "" - -#: ../../../CHANGELOG:1457 -msgid "Federated reports" -msgstr "" - -#: ../../../CHANGELOG:1459 -msgid "It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed." -msgstr "" - -#: ../../../CHANGELOG:1461 -msgid "This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers." -msgstr "" - -#: ../../../CHANGELOG:1464 -msgid "Improved search performance" -msgstr "" - -#: ../../../CHANGELOG:1466 -msgid "Our search engine went through a full rewrite to make it faster. This new engine is enabled by default when using the search bar, or when searching for artists, albums and tracks. It leverages PostgreSQL full-text search capabilities." -msgstr "" - -#: ../../../CHANGELOG:1470 -msgid "During our tests, we observed huge performance improvements after the switch, by an order of magnitude. This should be especially perceptible on pods with large databases, more modest hardware or hard drives." -msgstr "" - -#: ../../../CHANGELOG:1474 -msgid "We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, you can switch back by setting ``USE_FULL_TEXT_SEARCH=false`` in your ``.env`` file." -msgstr "" - -#: ../../../CHANGELOG:1478 -msgid "Enforced email verification" -msgstr "" - -#: ../../../CHANGELOG:1480 -msgid "The brand new ``ACCOUNT_EMAIL_VERIFICATION_ENFORCE`` setting can be used to make email verification mandatory for your users. It defaults to ``false``, and doesn't apply to superuser accounts created through the CLI." -msgstr "" - -#: ../../../CHANGELOG:1484 -msgid "If you enable this, ensure you have a SMTP server configured too." -msgstr "" - -#: ../../../CHANGELOG:1487 -msgid "More reliable CLI importer [manual action required]" -msgstr "" - -#: ../../../CHANGELOG:1489 -msgid "Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger)" -msgstr "" - -#: ../../../CHANGELOG:1491 -msgid "We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly." -msgstr "" - -#: ../../../CHANGELOG:1493 -msgid "If you use the ``import_files`` command, this means you should replace scripts that look like this::" -msgstr "" - -#: ../../../CHANGELOG:1497 -msgid "By this::" -msgstr "" - -#: ../../../CHANGELOG:1501 -msgid "And Funkwhale will happily import any supported audio file from the specified directory." -msgstr "" - -#: ../../../CHANGELOG:1504 -#: ../../../CHANGELOG:1594 -msgid "User management through the server CLI" -msgstr "" - -#: ../../../CHANGELOG:1506 -msgid "We now support user creation (incl. non-admin accounts), update and removal directly from the server CLI. Typical use cases include:" -msgstr "" - -#: ../../../CHANGELOG:1509 -msgid "Changing a user password from the command line" -msgstr "" - -#: ../../../CHANGELOG:1510 -msgid "Creating or updating users from deployments scripts or playbooks" -msgstr "" - -#: ../../../CHANGELOG:1511 -msgid "Removing or granting permissions or upload quota to multiple users at once" -msgstr "" - -#: ../../../CHANGELOG:1512 -msgid "Marking multiple users as inactive" -msgstr "" - -#: ../../../CHANGELOG:1514 -msgid "All user-related commands are available under the ``python manage.py fw users`` namespace. Please refer to the `Admin documentation <https://docs.funkwhale.audio/admin/commands.html#user-management>`_ for more information and instructions." -msgstr "" - -#: ../../../CHANGELOG:1518 -msgid "Progressive web app [Manual action sugFull list of changes ^^^^^^^^^^^^^^^^^^^^gested, non-docker only] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" -msgstr "" - -#: ../../../CHANGELOG:1522 -msgid "We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience during offline use, and on mobile devices." -msgstr "" - -#: ../../../CHANGELOG:1525 -msgid "In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure the following instruction is present in your nginx configuration::" -msgstr "" - -#: ../../../CHANGELOG:1534 -msgid "Postgres docker changed environment variable [manual action required, docker multi-container only]" -msgstr "" - -#: ../../../CHANGELOG:1536 -msgid "If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658)" -msgstr "" - -#: ../../../CHANGELOG:1538 -msgid "You need to add this to your .env file: ``POSTGRES_HOST_AUTH_METHOD=trust``" -msgstr "" - -#: ../../../CHANGELOG:1540 -msgid "Newer deployments aren't affected." -msgstr "" - -#: ../../../CHANGELOG:1543 -msgid "Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only]" -msgstr "" - -#: ../../../CHANGELOG:1545 -msgid "With our upgrade to Alpine 3.10, the ``funkwhale/all-in-one`` image now includes PostgreSQL 11." -msgstr "" - -#: ../../../CHANGELOG:1547 -msgid "In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below::" -msgstr "" - -#: ../../../CHANGELOG:1574 -msgid "Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, you can remove the backups/old files::" -msgstr "" - -#: ../../../CHANGELOG:1587 -msgid "Support for publishing and subscribing to podcasts (#170)" -msgstr "" - -#: ../../../CHANGELOG:1588 -msgid "Brand new navigation, queue and player redesign (#594)" -msgstr "" - -#: ../../../CHANGELOG:1589 -msgid "Can now browse a library content through the UI (#926)" -msgstr "" - -#: ../../../CHANGELOG:1590 -msgid "Federated reports (#1038)" -msgstr "" - -#: ../../../CHANGELOG:1591 -msgid "Screening for sign-ups (#1040)" -msgstr "" - -#: ../../../CHANGELOG:1592 -msgid "Make it possible to enforce email verification (#1039)" -msgstr "" - -#: ../../../CHANGELOG:1593 -msgid "Added a new radio based on another user listenings (#1060)" -msgstr "" - -#: ../../../CHANGELOG:1598 -msgid "Added ability to reject library follows from notifications screen (#859)" -msgstr "" - -#: ../../../CHANGELOG:1599 -msgid "Added periodic background task and CLI command to associate genre tags to artists and albums based on identical tags found on corresponding tracks (#988)" -msgstr "" - -#: ../../../CHANGELOG:1600 -msgid "Added support for CELERYD_CONCURRENCY env var to control the number of worker processes (#997)" -msgstr "" - -#: ../../../CHANGELOG:1601 -msgid "Added the ability to sort albums by release date (#1013)" -msgstr "" - -#: ../../../CHANGELOG:1602 -msgid "Added two new radios to play your own content or a given library tracks" -msgstr "" - -#: ../../../CHANGELOG:1603 -msgid "Advertise list of known nodes on /api/v1/federation/domains and in nodeinfo if stats sharing is enabled" -msgstr "" - -#: ../../../CHANGELOG:1604 -msgid "Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012)" -msgstr "" - -#: ../../../CHANGELOG:1605 -msgid "Favor local uploads when playing a track with multiple uploads (#1036)" -msgstr "" - -#: ../../../CHANGELOG:1606 -msgid "Include only local content in nodeinfo stats, added downloads count" -msgstr "" - -#: ../../../CHANGELOG:1607 -msgid "Make media and static files serving more reliable when reverse proxy X_FORWARDED_* headers are incorrect (#947)" -msgstr "" - -#: ../../../CHANGELOG:1608 -msgid "Order the playlist columns by modification date in the Browse tab (#775)" -msgstr "" - -#: ../../../CHANGELOG:1609 -msgid "Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042)" -msgstr "" - -#: ../../../CHANGELOG:1610 -msgid "Remember display settings in Album, Artist, Radio and Playlist views (#391)" -msgstr "" - -#: ../../../CHANGELOG:1611 -msgid "Removed unnecessary \"Federation music needs approval\" setting (#959)" -msgstr "" - -#: ../../../CHANGELOG:1612 -msgid "Replaced our slow research logic by PostgreSQL full-text search (#994)" -msgstr "" - -#: ../../../CHANGELOG:1613 -msgid "Support autoplay when loading embed frame from Mastodon and third-party websites (#1041)" -msgstr "" - -#: ../../../CHANGELOG:1614 -msgid "Support filtering playlist by name and several additional UX improvements in playlists modal (#974)" -msgstr "" - -#: ../../../CHANGELOG:1615 -msgid "Support modifying album cover art through the web UI (#588)" -msgstr "" - -#: ../../../CHANGELOG:1616 -msgid "Use a dedicated scope for throttling subsonic to avoid intrusive rate-limiting" -msgstr "" - -#: ../../../CHANGELOG:1617 -msgid "Use same markdown widget for all content fields (rules, description, reports, notes, etc.)" -msgstr "" - -#: ../../../CHANGELOG:1618 -msgid "CLI Importer is now more reliable and less resource-hungry on large libraries" -msgstr "" - -#: ../../../CHANGELOG:1619 -#: ../../../CHANGELOG:1643 -msgid "Add support custom domain for S3 storage" -msgstr "" - -#: ../../../CHANGELOG:1620 -msgid "Better placeholders for channels when there are no episodes or series" -msgstr "" - -#: ../../../CHANGELOG:1621 -msgid "Updated documentation for 0.21 release" -msgstr "" - -#: ../../../CHANGELOG:1622 -msgid "Improved performance and error handling when fetching remote attachments" -msgstr "" - -#: ../../../CHANGELOG:1626 -msgid "Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961)" -msgstr "" - -#: ../../../CHANGELOG:1627 -msgid "Fix issue with browser shortcuts such as search and focus URL not being recognised (#340, #985)" -msgstr "" - -#: ../../../CHANGELOG:1628 -msgid "Fixed admin dropdown not showing after login (#1042)" -msgstr "" - -#: ../../../CHANGELOG:1629 -msgid "Fixed an issue with celerybeat container failing to restart (#1004)" -msgstr "" - -#: ../../../CHANGELOG:1630 -msgid "Fixed invalid displayed number of tracks in playlist (#986)" -msgstr "" - -#: ../../../CHANGELOG:1631 -msgid "Fixed issue with recent results not being loaded from the API (#948)" -msgstr "" - -#: ../../../CHANGELOG:1632 -msgid "Fixed issue with sorting by album name not working (#960)" -msgstr "" - -#: ../../../CHANGELOG:1633 -msgid "Fixed short audio glitch when switching switching to another track with player paused (#970)" -msgstr "" - -#: ../../../CHANGELOG:1634 -msgid "Improved deduplication logic to prevent skipped files during import (#348, #474, #557, #740, #928)" -msgstr "" - -#: ../../../CHANGELOG:1635 -msgid "More resilient tag parsing with empty release date or album artist (#1037)" -msgstr "" - -#: ../../../CHANGELOG:1636 -msgid "More robust importer against malformed dates (#966)" -msgstr "" - -#: ../../../CHANGELOG:1637 -msgid "Removed \"nodeinfo disabled\" setting, as nodeinfo is required for the UI to work (#982)" -msgstr "" - -#: ../../../CHANGELOG:1638 -msgid "Replaced PDF icon by List icon in playlist placeholder (#943)" -msgstr "" - -#: ../../../CHANGELOG:1639 -msgid "Resolve an issue where disc numbers were not taken into consideration when playing an album from the album card (#1006)" -msgstr "" - -#: ../../../CHANGELOG:1640 -msgid "Set correct size for album covers in playlist cards (#680)" -msgstr "" - -#: ../../../CHANGELOG:1641 -msgid "Remove double spaces in ChannelForm" -msgstr "" - -#: ../../../CHANGELOG:1642 -msgid "Deduplicate tags in Audio ActivityPub representation" -msgstr "" - -#: ../../../CHANGELOG:1644 -msgid "Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075)" -msgstr "" - -#: ../../../CHANGELOG:1645 -msgid "Exclude external podcasts from library home" -msgstr "" - -#: ../../../CHANGELOG:1646 -msgid "Fixed broken channel save when description is too long" -msgstr "" - -#: ../../../CHANGELOG:1647 -msgid "Fixed 500 error when federation is disabled and application+json is requested" -msgstr "" - -#: ../../../CHANGELOG:1648 -msgid "Fixed minor subsonic API crash" -msgstr "" - -#: ../../../CHANGELOG:1649 -msgid "Fixed broken local profile page when allow-list is enabled" -msgstr "" - -#: ../../../CHANGELOG:1650 -msgid "Fixed issue with confirmation email not sending when signup-approval was enabled" -msgstr "" - -#: ../../../CHANGELOG:1651 -msgid "Ensure 0 quota on user is honored" -msgstr "" - -#: ../../../CHANGELOG:1652 -msgid "Fixed attachments URL not honoring media URL" -msgstr "" - -#: ../../../CHANGELOG:1653 -msgid "Fix grammar in msg string in TrackBase.vue" -msgstr "" - -#: ../../../CHANGELOG:1654 -msgid "Fix typo in SubscribeButton.vue" -msgstr "" - -#: ../../../CHANGELOG:1656 -msgid "Translations:" -msgstr "" - -#: ../../../CHANGELOG:1658 -msgid "Arabic" -msgstr "" - -#: ../../../CHANGELOG:1659 -msgid "Catalan" -msgstr "" - -#: ../../../CHANGELOG:1660 -msgid "English (United Kingdom)" -msgstr "" - -#: ../../../CHANGELOG:1661 -msgid "German" -msgstr "" - -#: ../../../CHANGELOG:1662 -msgid "Hungarian" -msgstr "" - -#: ../../../CHANGELOG:1663 -msgid "Japanese" -msgstr "" - -#: ../../../CHANGELOG:1664 -msgid "Occitan" -msgstr "" - -#: ../../../CHANGELOG:1665 -msgid "Portuguese (Brazil)" -msgstr "" - -#: ../../../CHANGELOG:1666 -msgid "Russian" -msgstr "" - -#: ../../../CHANGELOG:1671 -msgid "annando" -msgstr "" - -#: ../../../CHANGELOG:1672 -msgid "Anton Strömkvist" -msgstr "" - -#: ../../../CHANGELOG:1673 -msgid "Audrey" -msgstr "" - -#: ../../../CHANGELOG:1674 -#: ../../../CHANGELOG:2076 -#: ../../../CHANGELOG:2346 -msgid "ButterflyOfFire" -msgstr "" - -#: ../../../CHANGELOG:1678 -msgid "dashie" -msgstr "" - -#: ../../../CHANGELOG:1679 -msgid "Eloisa" -msgstr "" - -#: ../../../CHANGELOG:1680 -msgid "eorn" -msgstr "" - -#: ../../../CHANGELOG:1682 -msgid "gerhardbeck" -msgstr "" - -#: ../../../CHANGELOG:1683 -msgid "GinnyMcQueen" -msgstr "" - -#: ../../../CHANGELOG:1684 -msgid "guillermau" -msgstr "" - -#: ../../../CHANGELOG:1685 -msgid "Haelwenn" -msgstr "" - -#: ../../../CHANGELOG:1686 -msgid "jinxx" -msgstr "" - -#: ../../../CHANGELOG:1687 -msgid "Jonathan Aylard" -msgstr "" - -#: ../../../CHANGELOG:1689 -msgid "M.G" -msgstr "" - -#: ../../../CHANGELOG:1690 -msgid "marzzzello" -msgstr "" - -#: ../../../CHANGELOG:1691 -msgid "Mathé Grievink" -msgstr "" - -#: ../../../CHANGELOG:1692 -#: ../../../CHANGELOG:2090 -#: ../../../CHANGELOG:2358 -msgid "Mélanie Chauvel" -msgstr "" - -#: ../../../CHANGELOG:1693 -msgid "Mjourdan" -msgstr "" - -#: ../../../CHANGELOG:1694 -msgid "Morgan Kesler" -msgstr "" - -#: ../../../CHANGELOG:1695 -msgid "Noe Gaumont" -msgstr "" - -#: ../../../CHANGELOG:1696 -msgid "Noureddine HADDAG" -msgstr "" - -#: ../../../CHANGELOG:1697 -msgid "Ollie" -msgstr "" - -#: ../../../CHANGELOG:1698 -msgid "Peter Wickenberg" -msgstr "" - -#: ../../../CHANGELOG:1700 -#: ../../../CHANGELOG:2363 -msgid "Renon" -msgstr "" - -#: ../../../CHANGELOG:1701 -msgid "Satsuki Yanagi" -msgstr "" - -#: ../../../CHANGELOG:1702 -msgid "Shlee" -msgstr "" - -#: ../../../CHANGELOG:1704 -msgid "techknowlogick" -msgstr "" - -#: ../../../CHANGELOG:1705 -msgid "ThibG" -msgstr "" - -#: ../../../CHANGELOG:1707 -msgid "unklebonehead" -msgstr "" - -#: ../../../CHANGELOG:1708 -msgid "wakest" -msgstr "" - -#: ../../../CHANGELOG:1709 -msgid "wxcafé" -msgstr "" - -#: ../../../CHANGELOG:1710 -#: ../../../CHANGELOG:2099 -msgid "Xaloc" -msgstr "" - -#: ../../../CHANGELOG:1714 -msgid "0.20.1 (2019-10-28)" -msgstr "" - -#: ../../../CHANGELOG:1721 -#: ../../../CHANGELOG:1742 -msgid "Denormalized audio permission logic in a separate table to enhance performance" -msgstr "" - -#: ../../../CHANGELOG:1723 -msgid "With this release, we're introducing a performance enhancement that should reduce the load on the database and API servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939)." -msgstr "" - -#: ../../../CHANGELOG:1726 -msgid "Under the hood, we now maintain a separate table to link users to the tracks they are allowed to see. This change is **disabled** by default, but should be enabled by default starting in Funkwhale 0.21." -msgstr "" - -#: ../../../CHANGELOG:1729 -msgid "If you want to try it now, add ``MUSIC_USE_DENORMALIZATION=True`` to your ``.env`` file, restart Funkwhale, and run the following command::" -msgstr "" - -#: ../../../CHANGELOG:1734 -msgid "This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual behaviour regarding tracks, albums and artists visibility." -msgstr "" - -#: ../../../CHANGELOG:1740 -msgid "Added a retry option for failed uploads (#942)" -msgstr "" - -#: ../../../CHANGELOG:1741 -msgid "Added feedback via loading spinner when searching a remote library" -msgstr "" - -#: ../../../CHANGELOG:1743 -msgid "Placeholders will now be shown if no content is available across the application (#750)" -msgstr "" - -#: ../../../CHANGELOG:1744 -msgid "Reduce the number of simultaneous DB connections under some deployment scenario" -msgstr "" - -#: ../../../CHANGELOG:1745 -msgid "Support byYear filtering in Subsonic API (#936)" -msgstr "" - -#: ../../../CHANGELOG:1750 -msgid "Ensure password input doesn't overflow outside of container (#933)" -msgstr "" - -#: ../../../CHANGELOG:1751 -msgid "Fix audio serving issues under S3/nginx when signatures are enabled" -msgstr "" - -#: ../../../CHANGELOG:1752 -msgid "Fix import crash when importing M4A file with no embedded cover (#946)" -msgstr "" - -#: ../../../CHANGELOG:1753 -msgid "Fix tag exclusion in custom radios (#950)" -msgstr "" - -#: ../../../CHANGELOG:1754 -msgid "Fixed an issue with embed player CSS being purged during build (#935)" -msgstr "" - -#: ../../../CHANGELOG:1755 -msgid "Fixed escaped pod name displayed on home/about page (#945)" -msgstr "" - -#: ../../../CHANGELOG:1756 -msgid "Fixed pagination in subsonic getSongsByGenre endpoint (#954)" -msgstr "" - -#: ../../../CHANGELOG:1757 -msgid "Fixed style glitches in dropdowns" -msgstr "" - -#: ../../../CHANGELOG:1762 -msgid "Documented how to create DB extension by hand in case of permission error during migrations (#934)" -msgstr "" - -#: ../../../CHANGELOG:1765 -#: ../../../CHANGELOG:2073 -msgid "Contributors to this release (translation, development, documentation, reviews, design):" -msgstr "" - -#: ../../../CHANGELOG:1768 -msgid "Dag Stenstad" -msgstr "" - -#: ../../../CHANGELOG:1773 -msgid "knuxify" -msgstr "" - -#: ../../../CHANGELOG:1774 -msgid "Mateus Mattei Garcia" -msgstr "" - -#: ../../../CHANGELOG:1779 -msgid "0.20 (2019-10-04)" -msgstr "" - -#: ../../../CHANGELOG:1786 -msgid "Support for genres via tags" -msgstr "" - -#: ../../../CHANGELOG:1788 -msgid "One of our most requested missing features is now available!" -msgstr "" - -#: ../../../CHANGELOG:1790 -msgid "Starting with Funkwhale 0.20, Funkwhale will automatically extract genre information from uploaded files and associate it with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). Please refer to `our tagging documentation <https://docs.funkwhale.audio/users/upload.html#tagging-files>`_ for more information regarding the tagging process." -msgstr "" - -#: ../../../CHANGELOG:1796 -msgid "Tags can also be associated with artists and albums, and updated after upload through the UI using the edit system released in Funkwhale 0.19. Tags are also fetched when retrieving content via federation." -msgstr "" - -#: ../../../CHANGELOG:1800 -msgid "Tags are used in various places to enhance user experience:" -msgstr "" - -#: ../../../CHANGELOG:1802 -msgid "Tags are listed on tracks, albums and artist profiles" -msgstr "" - -#: ../../../CHANGELOG:1803 -msgid "Each tag has a dedicated page were you can browse corresponding content and quickly start a radio" -msgstr "" - -#: ../../../CHANGELOG:1804 -msgid "The custom radio builder now supports using tags" -msgstr "" - -#: ../../../CHANGELOG:1805 -msgid "Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well" -msgstr "" - -#: ../../../CHANGELOG:1807 -msgid "If you are a pod admin and want to extract tags from already uploaded content, you run `this snippet <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43>`__ and `this snippet <https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44>`__ in a ``python manage.py shell``." -msgstr "" - -#: ../../../CHANGELOG:1811 -msgid "Content and account reports" -msgstr "" - -#: ../../../CHANGELOG:1813 -msgid "It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, who can review it and delete reported content, block accounts or take any other action they deem necessary." -msgstr "" - -#: ../../../CHANGELOG:1816 -msgid "By default, both anonymous and authenticated users can submit these reports. This makes sure moderators can receive and handle takedown requests and other reports for illegal content that may be sent by third-parties without an account on the pod. However, you can disable anonymous reports completely via your pod settings." -msgstr "" - -#: ../../../CHANGELOG:1820 -msgid "Federation of the reports will be supported in a future release." -msgstr "" - -#: ../../../CHANGELOG:1822 -#: ../../../CHANGELOG:1836 -msgid "For more information about this feature, please check out our documentation:" -msgstr "" - -#: ../../../CHANGELOG:1824 -msgid "`User documentation <https://docs.funkwhale.audio/moderator/reports.html>`__" -msgstr "" - -#: ../../../CHANGELOG:1825 -msgid "`Moderator documentation <https://docs.funkwhale.audio/users/reports.html>`__" -msgstr "" - -#: ../../../CHANGELOG:1828 -msgid "Account deletion" -msgstr "" - -#: ../../../CHANGELOG:1830 -msgid "Users can now delete their account themselves, without involving an administrator." -msgstr "" - -#: ../../../CHANGELOG:1832 -msgid "The deletion process will remove any local data and objects associated with the account, but the username won't be able to new users to avoid impersonation. Deletion is also broadcasted to other known servers on the federation." -msgstr "" - -#: ../../../CHANGELOG:1838 -msgid "`User documentation <https://docs.funkwhale.audio/users/account.html>`__" -msgstr "" - -#: ../../../CHANGELOG:1841 -msgid "Landing and about page redesign [Manual action suggested]" -msgstr "" - -#: ../../../CHANGELOG:1843 -msgid "In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod configuration. Among other things, the landing page will now include:" -msgstr "" - -#: ../../../CHANGELOG:1846 -msgid "your pod and an excerpt from your pod's description" -msgstr "" - -#: ../../../CHANGELOG:1847 -#: ../../../CHANGELOG:1859 -msgid "your pod banner image, if any" -msgstr "" - -#: ../../../CHANGELOG:1848 -#: ../../../CHANGELOG:1860 -msgid "your contact email, if any" -msgstr "" - -#: ../../../CHANGELOG:1849 -msgid "the login form" -msgstr "" - -#: ../../../CHANGELOG:1850 -msgid "the signup form (if registrations are open on your pod)" -msgstr "" - -#: ../../../CHANGELOG:1851 -msgid "some basic statistics about your pod" -msgstr "" - -#: ../../../CHANGELOG:1852 -msgid "a widget including recently uploaded albums, if anonymous access is enabled" -msgstr "" - -#: ../../../CHANGELOG:1854 -msgid "The landing page will still include some information about Funkwhale, but in a less intrusive and proeminent way than before." -msgstr "" - -#: ../../../CHANGELOG:1856 -msgid "Additionally, the about page now includes:" -msgstr "" - -#: ../../../CHANGELOG:1858 -msgid "your pod name, description, rules and terms" -msgstr "" - -#: ../../../CHANGELOG:1861 -msgid "comprehensive statistics about your pod" -msgstr "" - -#: ../../../CHANGELOG:1862 -msgid "some info about your pod configuration, such as registration and federation status or the default upload quota for new users" -msgstr "" - -#: ../../../CHANGELOG:1864 -msgid "With this redesign, we've added a handful of additional pod settings:" -msgstr "" - -#: ../../../CHANGELOG:1866 -msgid "Pod banner image" -msgstr "" - -#: ../../../CHANGELOG:1867 -msgid "Contact email" -msgstr "" - -#: ../../../CHANGELOG:1868 -msgid "Rules" -msgstr "" - -#: ../../../CHANGELOG:1869 -msgid "Terms of service" -msgstr "" - -#: ../../../CHANGELOG:1871 -msgid "We recommend taking a few moments to fill these accordingly to your needs, by visiting ``/manage/settings``." -msgstr "" - -#: ../../../CHANGELOG:1874 -msgid "Allow-list to restrict federation to trusted domains" -msgstr "" - -#: ../../../CHANGELOG:1876 -msgid "The Allow-Listing feature grants pod moderators and administrators greater control over federation by allowing you to create a pod-wide allow-list." -msgstr "" - -#: ../../../CHANGELOG:1880 -msgid "When allow-listing is enabled, your pod's users will only be able to interact with pods included in the allow-list. Any messages, activity, uploads, or modifications to libraries and playlists will only be shared with pods on the allow-list. Pods which are not included in the allow-list will not have access to your pod's content or messages and will not be able to send anything to your pod." -msgstr "" - -#: ../../../CHANGELOG:1889 -msgid "If you want to enable this feature on your pod, or learn more, please refer to `our documentation <https://docs.funkwhale.audio/moderator/listing.html>`_!" -msgstr "" - -#: ../../../CHANGELOG:1892 -msgid "Periodic message to incite people to support their pod and Funkwhale" -msgstr "" - -#: ../../../CHANGELOG:1894 -msgid "Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing." -msgstr "" - -#: ../../../CHANGELOG:1896 -msgid "If specified by the pod admin, a separate and custom message will also be displayed in a similar way to provide instructions and links to support the pod." -msgstr "" - -#: ../../../CHANGELOG:1898 -msgid "Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely." -msgstr "" - -#: ../../../CHANGELOG:1902 -msgid "Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only]" -msgstr "" - -#: ../../../CHANGELOG:1904 -msgid "To improve the performance, stability and reliability of Funkwhale's web processes, we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as:" -msgstr "" - -#: ../../../CHANGELOG:1907 -msgid "zero-downtime upgrades" -msgstr "" - -#: ../../../CHANGELOG:1908 -msgid "configurable number of web worker processes" -msgstr "" - -#: ../../../CHANGELOG:1910 -msgid "Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne." -msgstr "" - -#: ../../../CHANGELOG:1912 -msgid "To benefit from this enhancement on existing instances, you need to add ``FUNKWHALE_WEB_WORKERS=1`` in your ``.env`` file (use a higher number if you want to have more web worker processes)." -msgstr "" - -#: ../../../CHANGELOG:1915 -msgid "Then, edit your ``/etc/systemd/system/funkwhale-server.service`` and replace the ``ExecStart=`` line with ``ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}``" -msgstr "" - -#: ../../../CHANGELOG:1918 -msgid "Then reload the configuration change with ``sudo systemctl daemon-reload`` and ``sudo systemctl restart funkwhale-server``." -msgstr "" - -#: ../../../CHANGELOG:1922 -msgid "Content-Security-Policy and additional security headers [manual action suggested]" -msgstr "" - -#: ../../../CHANGELOG:1924 -msgid "To improve the security and reduce the attack surface in case of a successful exploit, we suggest you add the following Content-Security-Policy to your nginx configuration." -msgstr "" - -#: ../../../CHANGELOG:1927 -msgid "..note::" -msgstr "" - -#: ../../../CHANGELOG:1935 -msgid "**On non-docker setups**, in ``/etc/nginx/sites-available/funkwhale.conf``::" -msgstr "" - -#: ../../../CHANGELOG:1957 -msgid "Then reload nginx with ``systemctl reload nginx``." -msgstr "" - -#: ../../../CHANGELOG:1959 -msgid "**On docker setups**, in ``/srv/funkwhalenginx/funkwhale.template``::" -msgstr "" - -#: ../../../CHANGELOG:1981 -msgid "Then reload nginx with ``docker-compose restart nginx``." -msgstr "" - -#: ../../../CHANGELOG:1984 -msgid "Rate limiting" -msgstr "" - -#: ../../../CHANGELOG:1986 -msgid "With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error." -msgstr "" - -#: ../../../CHANGELOG:1989 -msgid "For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests." -msgstr "" - -#: ../../../CHANGELOG:1992 -msgid "You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your ``.env`` file and restarting the services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/." -msgstr "" - -#: ../../../CHANGELOG:1996 -msgid "Broken audio streaming when using S3/Minio and DSub [manual action required]" -msgstr "" - -#: ../../../CHANGELOG:1998 -msgid "Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage such as Minio, please add the following in your nginx ``~ /_protected/media/(.+)`` location::" -msgstr "" - -#: ../../../CHANGELOG:2005 -msgid "And reload your nginx process." -msgstr "" - -#: ../../../CHANGELOG:2008 -msgid "Detail" -msgstr "" - -#: ../../../CHANGELOG:2012 -msgid "Added periodical message to incite people to support their pod and Funkwhale (#839)" -msgstr "" - -#: ../../../CHANGELOG:2013 -msgid "Admins can now add custom CSS from their pod settings (#879)" -msgstr "" - -#: ../../../CHANGELOG:2014 -msgid "Allow-list to restrict federation to trusted domains (#853)" -msgstr "" - -#: ../../../CHANGELOG:2015 -msgid "Content and account reports (#890)" -msgstr "" - -#: ../../../CHANGELOG:2016 -msgid "Dark theme (#756)" -msgstr "" - -#: ../../../CHANGELOG:2017 -msgid "Enforce a configurable rate limit on the API to mitigate abuse (#261)" -msgstr "" - -#: ../../../CHANGELOG:2018 -msgid "Redesign of the landing and about pages (#872)" -msgstr "" - -#: ../../../CHANGELOG:2019 -msgid "Support for genres, via tags (#432)" -msgstr "" - -#: ../../../CHANGELOG:2020 -msgid "Users can now delete their account without admin intervention (#852)" -msgstr "" - -#: ../../../CHANGELOG:2025 -msgid "Added a info message on embed wizard when anonymous access to content is disabled (#878)" -msgstr "" - -#: ../../../CHANGELOG:2026 -msgid "Added Catalan translation files" -msgstr "" - -#: ../../../CHANGELOG:2027 -msgid "Added Czech translation (#844)" -msgstr "" - -#: ../../../CHANGELOG:2028 -msgid "Added field to manage user upload quota in Django backend (#903)" -msgstr "" - -#: ../../../CHANGELOG:2029 -msgid "Added the option to replace the queue's current contents with a selected album or track (#761)" -msgstr "" - -#: ../../../CHANGELOG:2030 -msgid "Artists with no albums will now show track count on artist card (#895)" -msgstr "" - -#: ../../../CHANGELOG:2031 -msgid "Ensure API urls answer with and without a trailing slash (#877)" -msgstr "" - -#: ../../../CHANGELOG:2032 -msgid "Hardcoded list of supported browsers to avoid unexpected regressions (#854)" -msgstr "" - -#: ../../../CHANGELOG:2033 -msgid "Hardened security thanks to CSP and additional HTTP headers (#880)" -msgstr "" - -#: ../../../CHANGELOG:2034 -msgid "Improve display of search results by including artist and album data" -msgstr "" - -#: ../../../CHANGELOG:2035 -msgid "Increase the security of JWT token generation by using DJANGO_SECRET_KEY as well as user-specific salt for the signature" -msgstr "" - -#: ../../../CHANGELOG:2036 -msgid "Mods can now change a library visibility through the admin UI (#548)" -msgstr "" - -#: ../../../CHANGELOG:2037 -msgid "New keyboard shortcuts added for enhanced control over audio player (#866)" -msgstr "" - -#: ../../../CHANGELOG:2038 -msgid "Now refetch remote ActivityPub artists, albums and tracks to avoid local stale data" -msgstr "" - -#: ../../../CHANGELOG:2039 -msgid "Numbers on the stats page will now be formatted in a human readable way and will update with the locale (#873)" -msgstr "" - -#: ../../../CHANGELOG:2040 -msgid "Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898)" -msgstr "" - -#: ../../../CHANGELOG:2041 -msgid "Prevent usage of too weak passwords (#883)" -msgstr "" - -#: ../../../CHANGELOG:2042 -msgid "Reduced CSS size by 30% using purgecss" -msgstr "" - -#: ../../../CHANGELOG:2043 -msgid "Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and performance (#862)" -msgstr "" - -#: ../../../CHANGELOG:2044 -msgid "Simplified embedded docker reverse proxy IP configuration (#834)" -msgstr "" - -#: ../../../CHANGELOG:2045 -msgid "Support embeds on public playlists" -msgstr "" - -#: ../../../CHANGELOG:2046 -msgid "Support for M4A/AAC files (#661)" -msgstr "" - -#: ../../../CHANGELOG:2047 -msgid "Switched from Semantic-UI to Fomentic-UI" -msgstr "" - -#: ../../../CHANGELOG:2048 -msgid "Add dropdown menu to track table (#531)" -msgstr "" - -#: ../../../CHANGELOG:2049 -msgid "Display placeholder on homepage when there are no playlists (#892)" -msgstr "" - -#: ../../../CHANGELOG:2050 -msgid "Make album cards height independent (#710)" -msgstr "" - -#: ../../../CHANGELOG:2055 -msgid "Added context strings to en_GB translations so that picking the language changes the interface as expected" -msgstr "" - -#: ../../../CHANGELOG:2056 -msgid "Ensure selected locale is not reset to browser default when refreshing app" -msgstr "" - -#: ../../../CHANGELOG:2057 -msgid "Fix missing license information on track details page (#913)" -msgstr "" - -#: ../../../CHANGELOG:2058 -msgid "Fix regression to quota bar color (#897)" -msgstr "" - -#: ../../../CHANGELOG:2059 -msgid "Fixed a responsive display issues on 1024px wide screens (#904)" -msgstr "" - -#: ../../../CHANGELOG:2060 -msgid "Fixed album art not being retrieved from Ogg/Opus files" -msgstr "" - -#: ../../../CHANGELOG:2061 -msgid "Fixed broken embedded player layout after dependency update (#875)" -msgstr "" - -#: ../../../CHANGELOG:2062 -msgid "Fixed broken external HTTPS request under some scenarios, because of missing PyOpenSSL" -msgstr "" - -#: ../../../CHANGELOG:2063 -msgid "Fixed broken less listened radio (#912)" -msgstr "" - -#: ../../../CHANGELOG:2064 -msgid "Fixed broken URL to artist and album on album and track pages (#871)" -msgstr "" - -#: ../../../CHANGELOG:2065 -msgid "Fixed empty contentType causing client crash in some Subsonic payloads (#893)" -msgstr "" - -#: ../../../CHANGELOG:2066 -msgid "Fixed import crashing with empty cover file or too long values on some fields" -msgstr "" - -#: ../../../CHANGELOG:2067 -msgid "Fixed in-place imported files not playing under nginx when filename contains ? or % (#924)" -msgstr "" - -#: ../../../CHANGELOG:2068 -msgid "Fixed remaining transcoding issue with Subsonic API (#867)" -msgstr "" - -#: ../../../CHANGELOG:2069 -msgid "Fixed search usability issue when browsing artists, albums, radios and playlists (#902)" -msgstr "" - -#: ../../../CHANGELOG:2070 -msgid "Improved performance of /artists, /albums and /tracks API endpoints by a factor 2 (#865)" -msgstr "" - -#: ../../../CHANGELOG:2071 -msgid "Updated docs to ensure streaming works when using Minio/S3 and DSub (#932)" -msgstr "" - -#: ../../../CHANGELOG:2083 -msgid "IISergII" -msgstr "" - -#: ../../../CHANGELOG:2084 -msgid "jiri-novacek" -msgstr "" - -#: ../../../CHANGELOG:2087 -msgid "Koen" -msgstr "" - -#: ../../../CHANGELOG:2088 -msgid "Manuel Cortez" -msgstr "" - -#: ../../../CHANGELOG:2091 -#: ../../../CHANGELOG:2359 -msgid "nouts" -msgstr "" - -#: ../../../CHANGELOG:2092 -#: ../../../CHANGELOG:2362 -msgid "Quentí" -msgstr "" - -#: ../../../CHANGELOG:2094 -#: ../../../CHANGELOG:2364 -msgid "Rodrigo Leite" -msgstr "" - -#: ../../../CHANGELOG:2095 +#: ../../../CHANGELOG.md:804 +#: ../../../CHANGELOG.md:1988 msgid "Romain Failliot" msgstr "" -#: ../../../CHANGELOG:2097 -#: ../../../CHANGELOG:2365 +#: ../../../CHANGELOG.md:805 +#: ../../../CHANGELOG.md:1003 +msgid "Rubén Cabrera" +msgstr "" + +#: ../../../CHANGELOG.md:806 +msgid "Ryan Harg" +msgstr "" + +#: ../../../CHANGELOG.md:807 +msgid "Sergio Varela" +msgstr "" + +#: ../../../CHANGELOG.md:808 +#: ../../../CHANGELOG.md:1006 +#: ../../../CHANGELOG.md:1226 +#: ../../../CHANGELOG.md:1614 +#: ../../../CHANGELOG.md:1989 +msgid "SpcCw" +msgstr "" + +#: ../../../CHANGELOG.md:809 +#: ../../../CHANGELOG.md:1227 +msgid "Stefano Pigozzi" +msgstr "" + +#: ../../../CHANGELOG.md:810 +#: ../../../CHANGELOG.md:838 +#: ../../../CHANGELOG.md:868 +msgid "Thomas" +msgstr "" + +#: ../../../CHANGELOG.md:811 +msgid "Tony Simoes" +msgstr "" + +#: ../../../CHANGELOG.md:813 +#: ../../../CHANGELOG.md:847 +msgid "vachan-maker" +msgstr "" + +#: ../../../CHANGELOG.md:814 +msgid "Virgile Robles" +msgstr "" + +#: ../../../CHANGELOG.md:820 +msgid "Antoine POPINEAU" +msgstr "" + +#: ../../../CHANGELOG.md:824 +#: ../../../CHANGELOG.md:1310 +#: ../../../CHANGELOG.md:1587 +#: ../../../CHANGELOG.md:2029 +msgid "Creak" +msgstr "" + +#: ../../../CHANGELOG.md:827 +msgid "Gerhard Beck" +msgstr "" + +#: ../../../CHANGELOG.md:828 +msgid "Greg Poole" +msgstr "" + +#: ../../../CHANGELOG.md:830 +#: ../../../CHANGELOG.md:1101 +msgid "Kuba Orlik" +msgstr "" + +#: ../../../CHANGELOG.md:831 +msgid "Lunar Control" +msgstr "" + +#: ../../../CHANGELOG.md:833 +msgid "Mateusz Korzeniewski" +msgstr "" + +#: ../../../CHANGELOG.md:840 +msgid "Ville Ranki" +msgstr "" + +#: ../../../CHANGELOG.md:841 +msgid "arkhi" +msgstr "" + +#: ../../../CHANGELOG.md:843 +#: ../../../CHANGELOG.md:990 +#: ../../../CHANGELOG.md:1073 +#: ../../../CHANGELOG.md:2225 +msgid "interfect" +msgstr "" + +#: ../../../CHANGELOG.md:845 +msgid "mal" +msgstr "" + +#: ../../../CHANGELOG.md:856 +msgid "Distopico" +msgstr "" + +#: ../../../CHANGELOG.md:857 +msgid "Fanyx" +msgstr "" + +#: ../../../CHANGELOG.md:865 +msgid "Matthew J." +msgstr "" + +#: ../../../CHANGELOG.md:873 +msgid "thanksd" +msgstr "" + +#: ../../../CHANGELOG.md:875 +msgid "1.1.4 (2021-08-02)" +msgstr "" + +#: ../../../CHANGELOG.md:879 +msgid "Pinned version of asgiref to avoid trouble with latest release. For further information, see #1516" +msgstr "" + +#: ../../../CHANGELOG.md:881 +msgid "1.1.3 (2021-08-02)" +msgstr "" + +#: ../../../CHANGELOG.md:887 +msgid "Test better tagging of Docker Images (#1505)" +msgstr "" + +#: ../../../CHANGELOG.md:891 +msgid "Fix the scrobbler plugin submitting literal \"None\" as MusicBrainz ID (#1498)" +msgstr "" + +#: ../../../CHANGELOG.md:894 +msgid "Implement access control on the moderation views (#1494)" +msgstr "" + +#: ../../../CHANGELOG.md:895 +msgid "Prevent open redirect on login (#1492)" +msgstr "" + +#: ../../../CHANGELOG.md:897 +msgid "1.1.2 (2021-05-19)" +msgstr "" + +#: ../../../CHANGELOG.md:903 +msgid "Added modal to prompt users to log in when subscribing to channels (#1296)" +msgstr "" + +#: ../../../CHANGELOG.md:907 +msgid "Added missing is_playable serializer for the tracks endpoint." +msgstr "" + +#: ../../../CHANGELOG.md:908 +msgid "Fixed minor graphical bug where loaders would appear white in dark theme (#1442)" +msgstr "" + +#: ../../../CHANGELOG.md:909 +msgid "Fixed systemd unit for funkwhale-worker (#1160)" +msgstr "" + +#: ../../../CHANGELOG.md:910 +msgid "Several minor fixes for the Frontend" +msgstr "" + +#: ../../../CHANGELOG.md:912 +msgid "1.1.1 (2021-04-13)" +msgstr "" + +#: ../../../CHANGELOG.md:918 +msgid "Improve UI consistency in artist tracks (#1286)" +msgstr "" + +#: ../../../CHANGELOG.md:919 +msgid "Adds year to album's card and album's base UI" +msgstr "" + +#: ../../../CHANGELOG.md:923 +msgid "Fix playback issues when pausing close the the end of a track (#1324)" +msgstr "" + +#: ../../../CHANGELOG.md:924 +msgid "Fix tracks playing in the background without the ability to control them (#1213) (#1387)" +msgstr "" + +#: ../../../CHANGELOG.md:925 +msgid "Fixed track playback indicator to reset on queue end (#1380)" +msgstr "" + +#: ../../../CHANGELOG.md:926 +msgid "Frontend build tooling is less dependent on `npm` or `yarn` being used (!1285)" +msgstr "" + +#: ../../../CHANGELOG.md:927 +msgid "Fixed a small discrepancy to the subsonic api 1374" +msgstr "" + +#: ../../../CHANGELOG.md:929 +msgid "1.1 (2021-03-10)" +msgstr "" + +#: ../../../CHANGELOG.md:935 +#: ../../../CHANGELOG.md:1028 +msgid "Add number of tracks and discs of an album to API (#1238)" +msgstr "" + +#: ../../../CHANGELOG.md:936 +#: ../../../CHANGELOG.md:1029 +msgid "Add spacing after \"Play all\" button in playlist view (!1271)" +msgstr "" + +#: ../../../CHANGELOG.md:937 +#: ../../../CHANGELOG.md:1030 +msgid "Added a ListenBrainz plugin to submit listenings" +msgstr "" + +#: ../../../CHANGELOG.md:938 +#: ../../../CHANGELOG.md:1031 +msgid "Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294)" +msgstr "" + +#: ../../../CHANGELOG.md:939 +#: ../../../CHANGELOG.md:1032 +msgid "Added new search functions to allow users to more easily search for podcasts in the UI." +msgstr "" + +#: ../../../CHANGELOG.md:940 +#: ../../../CHANGELOG.md:1033 +msgid "Added padding to volume slider to ease mouse control (#1241)" +msgstr "" + +#: ../../../CHANGELOG.md:941 +#: ../../../CHANGELOG.md:1034 +msgid "Logarithmic scale for volume slider (#1222)" +msgstr "" + +#: ../../../CHANGELOG.md:942 +#: ../../../CHANGELOG.md:1035 +msgid "More user-friendly subsonic tokens (#1269)" +msgstr "" + +#: ../../../CHANGELOG.md:943 +#: ../../../CHANGELOG.md:1036 +msgid "Remove manual entry of Import Reference on front-end import (#1284)" +msgstr "" + +#: ../../../CHANGELOG.md:944 +#: ../../../CHANGELOG.md:1038 +msgid "Support AIFF file format (#1243)" +msgstr "" + +#: ../../../CHANGELOG.md:948 +#: ../../../CHANGELOG.md:1042 +msgid "\"Add check for empty/null covers (#1281)\"" +msgstr "" + +#: ../../../CHANGELOG.md:949 +#: ../../../CHANGELOG.md:1043 +msgid "Added an album filter to fix problem where channel entries would show up in the wrong series (#1282)" +msgstr "" + +#: ../../../CHANGELOG.md:950 +#: ../../../CHANGELOG.md:1044 +msgid "Avoid broken Faker version (#1323)" +msgstr "" + +#: ../../../CHANGELOG.md:951 +#: ../../../CHANGELOG.md:1045 +msgid "Changed audio format detection to happen via sniffing and not file extensions (#1274)" +msgstr "" + +#: ../../../CHANGELOG.md:952 +#: ../../../CHANGELOG.md:1046 +msgid "Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289)" +msgstr "" + +#: ../../../CHANGELOG.md:953 +#: ../../../CHANGELOG.md:1047 +msgid "Fix delete library modal closing immediately (#1272)" +msgstr "" + +#: ../../../CHANGELOG.md:954 +#: ../../../CHANGELOG.md:1048 +msgid "Fix public shared remote library radio button being disabled (#1292)" +msgstr "" + +#: ../../../CHANGELOG.md:955 +#: ../../../CHANGELOG.md:1049 +msgid "Fixed an issue that prevented disabling plugins" +msgstr "" + +#: ../../../CHANGELOG.md:956 +#: ../../../CHANGELOG.md:1050 +msgid "Fixed an issue where channel albums don't show up in the album search (#1300)" +msgstr "" + +#: ../../../CHANGELOG.md:957 +#: ../../../CHANGELOG.md:1051 +msgid "Fixed an issue where modals would prevent users being able to interact with channels (#1295)" +msgstr "" + +#: ../../../CHANGELOG.md:958 +#: ../../../CHANGELOG.md:1052 +msgid "Update MediaSession metadata for initially loaded track (#1252)" +msgstr "" + +#: ../../../CHANGELOG.md:959 +#: ../../../CHANGELOG.md:1053 +msgid "Update playback position slider also when track is paused (#1266)" +msgstr "" + +#: ../../../CHANGELOG.md:960 +#: ../../../CHANGELOG.md:1017 +msgid "Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342" +msgstr "" + +#: ../../../CHANGELOG.md:961 +#: ../../../CHANGELOG.md:1018 +msgid "Update pleroma JSON-LD Schema (#1341)" +msgstr "" + +#: ../../../CHANGELOG.md:962 +#: ../../../CHANGELOG.md:1020 +msgid "Pin twisted version to 20.3.0" +msgstr "" + +#: ../../../CHANGELOG.md:964 +#: ../../../CHANGELOG.md:1055 +#: ../../../CHANGELOG.md:1096 +#: ../../../CHANGELOG.md:1255 +msgid "Contributors to this release (development, documentation, reviews):" +msgstr "" + +#: ../../../CHANGELOG.md:966 +#: ../../../CHANGELOG.md:1065 +msgid "Adam Novak" +msgstr "" + +#: ../../../CHANGELOG.md:968 +msgid "alemairebe" +msgstr "" + +#: ../../../CHANGELOG.md:969 +msgid "Alicia Blasco Leon" +msgstr "" + +#: ../../../CHANGELOG.md:970 +#: ../../../CHANGELOG.md:1211 +msgid "anonymous" +msgstr "" + +#: ../../../CHANGELOG.md:971 +#: ../../../CHANGELOG.md:1061 +#: ../../../CHANGELOG.md:1968 +msgid "Amaranthe" +msgstr "" + +#: ../../../CHANGELOG.md:973 +#: ../../../CHANGELOG.md:1213 +msgid "Arne" +msgstr "" + +#: ../../../CHANGELOG.md:975 +#: ../../../CHANGELOG.md:1067 +msgid "Christian Paul" +msgstr "" + +#: ../../../CHANGELOG.md:977 +msgid "Daniel" +msgstr "" + +#: ../../../CHANGELOG.md:978 +msgid "David" +msgstr "" + +#: ../../../CHANGELOG.md:980 +msgid "Eorn le goéland" +msgstr "" + +#: ../../../CHANGELOG.md:981 +#: ../../../CHANGELOG.md:1062 +msgid "Eleos" +msgstr "" + +#: ../../../CHANGELOG.md:982 +#: ../../../CHANGELOG.md:1069 +msgid "Erik Duxstad" +msgstr "" + +#: ../../../CHANGELOG.md:983 +#: ../../../CHANGELOG.md:1059 +#: ../../../CHANGELOG.md:1676 +#: ../../../CHANGELOG.md:1972 +#: ../../../CHANGELOG.md:2032 +msgid "Esteban" +msgstr "" + +#: ../../../CHANGELOG.md:984 +#: ../../../CHANGELOG.md:1070 +msgid "Fred Uggla" +msgstr "" + +#: ../../../CHANGELOG.md:985 +#: ../../../CHANGELOG.md:1060 +#: ../../../CHANGELOG.md:1974 +#: ../../../CHANGELOG.md:2033 +msgid "Freyja Wildes" +msgstr "" + +#: ../../../CHANGELOG.md:988 +#: ../../../CHANGELOG.md:1058 +#: ../../../CHANGELOG.md:1975 +#: ../../../CHANGELOG.md:2034 +msgid "hellekin" +msgstr "" + +#: ../../../CHANGELOG.md:991 +msgid "Jess Jing" +msgstr "" + +#: ../../../CHANGELOG.md:992 +#: ../../../CHANGELOG.md:1063 +#: ../../../CHANGELOG.md:1677 +#: ../../../CHANGELOG.md:1978 +#: ../../../CHANGELOG.md:2035 +msgid "Johannes H." +msgstr "" + +#: ../../../CHANGELOG.md:994 +#: ../../../CHANGELOG.md:1601 +msgid "marzzzello" +msgstr "" + +#: ../../../CHANGELOG.md:996 +#: ../../../CHANGELOG.md:1064 +#: ../../../CHANGELOG.md:1982 +#: ../../../CHANGELOG.md:2036 +msgid "Mehdi" +msgstr "" + +#: ../../../CHANGELOG.md:997 +#: ../../../CHANGELOG.md:1075 +msgid "Nitai Bezerra da Silva" +msgstr "" + +#: ../../../CHANGELOG.md:999 +#: ../../../CHANGELOG.md:1077 +msgid "Pierre Couy" +msgstr "" + +#: ../../../CHANGELOG.md:1001 +#: ../../../CHANGELOG.md:1057 +#: ../../../CHANGELOG.md:1986 +#: ../../../CHANGELOG.md:2037 +msgid "Reg" +msgstr "" + +#: ../../../CHANGELOG.md:1002 +#: ../../../CHANGELOG.md:1078 +msgid "Robert Kaye" +msgstr "" + +#: ../../../CHANGELOG.md:1004 +msgid "Silver Fox" +msgstr "" + +#: ../../../CHANGELOG.md:1005 +msgid "Snack Capt" +msgstr "" + +#: ../../../CHANGELOG.md:1007 +#: ../../../CHANGELOG.md:1079 +msgid "Strom Lin" +msgstr "" + +#: ../../../CHANGELOG.md:1008 +#: ../../../CHANGELOG.md:1230 +msgid "vicdorke" +msgstr "" + +#: ../../../CHANGELOG.md:1009 +msgid "x" +msgstr "" + +#: ../../../CHANGELOG.md:1011 +msgid "1.1-rc2 (2021-03-01)" +msgstr "" + +#: ../../../CHANGELOG.md:1019 +msgid "Revert fork replacement of http-signature since official package breaks federation" +msgstr "" + +#: ../../../CHANGELOG.md:1022 +msgid "1.1-rc1 (2021-02-24)" +msgstr "" + +#: ../../../CHANGELOG.md:1037 +msgid "Replaced forked http-signature dependency with official package (#876)" +msgstr "" + +#: ../../../CHANGELOG.md:1081 +msgid "1.0.1 (2020-10-31)" +msgstr "" + +#: ../../../CHANGELOG.md:1087 +msgid "Added controls to play volume of an album (#1226)" +msgstr "" + +#: ../../../CHANGELOG.md:1088 +msgid "Allow genre tags to be updated when rescanning files in-place (#1246)" +msgstr "" + +#: ../../../CHANGELOG.md:1092 +msgid "Fixed broken install because of upgraded dependencies" +msgstr "" + +#: ../../../CHANGELOG.md:1093 +msgid "Fixed duplication of discs for multi-disc albums in album views (#1228)" +msgstr "" + +#: ../../../CHANGELOG.md:1094 +msgid "Make the generated RSS feed more conformant with w3c specification (#1250)" +msgstr "" + +#: ../../../CHANGELOG.md:1099 +msgid "Cédric Schieli" +msgstr "" + +#: ../../../CHANGELOG.md:1103 +msgid "1.0 (2020-09-09)" +msgstr "" + +#: ../../../CHANGELOG.md:1107 +msgid "Dropped python 3.5 support [manual action required, non-docker only]" +msgstr "" + +#: ../../../CHANGELOG.md:1109 +msgid "With Funkwhale 1.0, we're dropping support for Python 3.5. Before upgrading, ensure `python3 --version` returns `3.6` or higher." +msgstr "" + +#: ../../../CHANGELOG.md:1112 +msgid "If it returns `3.6` or higher, you have nothing to do." +msgstr "" + +#: ../../../CHANGELOG.md:1114 +msgid "If it returns `3.5`, you will need to upgrade your Python version/Host, then recreate your virtual environment:" +msgstr "" + +#: ../../../CHANGELOG.md:1121 +msgid "Increased quality of JPEG thumbnails [manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:1123 +msgid "Default quality for JPEG thumbnails was increased from 70 to 95, as 70 was producing visible artifacts in resized images." +msgstr "" + +#: ../../../CHANGELOG.md:1125 +msgid "Because of this change, existing thumbnails will not load, and you will need to:" +msgstr "" + +#: ../../../CHANGELOG.md:1127 +msgid "delete the `__sized__` directory in your `MEDIA_ROOT` directory" +msgstr "" + +#: ../../../CHANGELOG.md:1128 +msgid "run `python manage.py fw media generate-thumbnails` to regenerate thumbnails with the enhanced quality" +msgstr "" + +#: ../../../CHANGELOG.md:1130 +msgid "If you don't want to regenerate thumbnails, you can keep the old ones by adding `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your .env file." +msgstr "" + +#: ../../../CHANGELOG.md:1132 +#: ../../../CHANGELOG.md:1294 +msgid "Small API breaking change in `/api/v1/libraries`" +msgstr "" + +#: ../../../CHANGELOG.md:1134 +#: ../../../CHANGELOG.md:1296 +msgid "To allow easier crawling of public libraries on a pod,we had to make a slight breaking change to the behaviour of `GET /api/v1/libraries`." +msgstr "" + +#: ../../../CHANGELOG.md:1137 +#: ../../../CHANGELOG.md:1299 +msgid "Before, it returned only libraries owned by the current user." +msgstr "" + +#: ../../../CHANGELOG.md:1139 +#: ../../../CHANGELOG.md:1301 +msgid "Now, it returns all the accessible libraries (including ones from other users and pods)." +msgstr "" + +#: ../../../CHANGELOG.md:1141 +#: ../../../CHANGELOG.md:1303 +msgid "If you are consuming the API via a third-party client and need to retrieve your libraries, use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me`" +msgstr "" + +#: ../../../CHANGELOG.md:1144 +msgid "API breaking change in `/api/v1/albums`" +msgstr "" + +#: ../../../CHANGELOG.md:1146 +msgid "To increase performance, querying `/api/v1/albums` doesn't return album tracks anymore. This caused some performance issues, especially as some albums and series have dozens or even hundreds of tracks." +msgstr "" + +#: ../../../CHANGELOG.md:1149 +msgid "If you want to retrieve tracks for an album, you can query `/api/v1/tracks/?album=<albumid>`." +msgstr "" + +#: ../../../CHANGELOG.md:1151 +msgid "JWT deprecation" +msgstr "" + +#: ../../../CHANGELOG.md:1153 +msgid "API Authentication using JWT is deprecated and will be removed in Funkwhale 1.0. Please use OAuth or application tokens and refer to our API documentation at https://docs.funkwhale.audio/swagger/ for guidance." +msgstr "" + +#: ../../../CHANGELOG.md:1156 +#: ../../../CHANGELOG.md:1494 +msgid "Full list of changes" +msgstr "" + +#: ../../../CHANGELOG.md:1160 +msgid "Allow users to hide compilation artists on the artist search page (#1053)" +msgstr "" + +#: ../../../CHANGELOG.md:1161 +msgid "Can now launch server import from the UI (#1105)" +msgstr "" + +#: ../../../CHANGELOG.md:1162 +msgid "Dedicated, advanced search page (#370)" +msgstr "" + +#: ../../../CHANGELOG.md:1163 +msgid "Persist theme and language settings across sessions (#996)" +msgstr "" + +#: ../../../CHANGELOG.md:1167 +msgid "Add support for unauthenticated users hitting the logout page" +msgstr "" + +#: ../../../CHANGELOG.md:1168 +msgid "Added support for Licence Art Libre (#1088)" +msgstr "" + +#: ../../../CHANGELOG.md:1169 +msgid "Broadcast/handle rejected follows (#858)" +msgstr "" + +#: ../../../CHANGELOG.md:1170 +msgid "Confirm email without requiring the user to validate the form manually (#407)" +msgstr "" + +#: ../../../CHANGELOG.md:1171 +msgid "Display channel and track downloads count (#1178)" +msgstr "" + +#: ../../../CHANGELOG.md:1172 +msgid "Do not include tracks in album API representation (#1102)" +msgstr "" + +#: ../../../CHANGELOG.md:1173 +msgid "Dropped python 3.5 support. Python 3.6 is the minimum required version (#1099)" +msgstr "" + +#: ../../../CHANGELOG.md:1174 +msgid "Improved keyboard accessibility (#1125)" +msgstr "" + +#: ../../../CHANGELOG.md:1175 +msgid "Improved naming of pages for accessibility (#1127)" +msgstr "" + +#: ../../../CHANGELOG.md:1176 +msgid "Improved shuffle behaviour (#1190)" +msgstr "" + +#: ../../../CHANGELOG.md:1177 +msgid "Increased quality of JPEG thumbnails" +msgstr "" + +#: ../../../CHANGELOG.md:1178 +msgid "Lock focus in modals to improve accessibility (#1128)" +msgstr "" + +#: ../../../CHANGELOG.md:1179 +msgid "More consistent search UX on /albums, /artists, /radios and /playlists (#1131)" +msgstr "" + +#: ../../../CHANGELOG.md:1180 +msgid "Play button now replace current queue instead of appending to it (#1083)" +msgstr "" + +#: ../../../CHANGELOG.md:1181 +msgid "Set proper lang attribute on HTML document (#1130)" +msgstr "" + +#: ../../../CHANGELOG.md:1182 +msgid "Use semantic headers for accessibility (#1121)" +msgstr "" + +#: ../../../CHANGELOG.md:1183 +msgid "Users can now update their email address (#292)" +msgstr "" + +#: ../../../CHANGELOG.md:1184 +msgid "[plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and secret are provided" +msgstr "" + +#: ../../../CHANGELOG.md:1185 +msgid "Added a new, large thumbnail size for cover images (#1205" +msgstr "" + +#: ../../../CHANGELOG.md:1186 +msgid "Enforce authentication when viewing remote channels, profiles and libraries (#1210)" +msgstr "" + +#: ../../../CHANGELOG.md:1190 +msgid "Fix broken media support detection (#1180)" +msgstr "" + +#: ../../../CHANGELOG.md:1191 +msgid "Fix layout issue with playbar on landscape tablets (#1144)" +msgstr "" + +#: ../../../CHANGELOG.md:1192 +msgid "Fix random radio so that podcast content is not picked up (#1140)" +msgstr "" + +#: ../../../CHANGELOG.md:1193 +msgid "Fixed an issue with search pages where results would not appear after navigating to another page" +msgstr "" + +#: ../../../CHANGELOG.md:1194 +msgid "Fixed crash with negative track position in file tags (#1193)" +msgstr "" + +#: ../../../CHANGELOG.md:1195 +msgid "Handle access errors scanning directories when importing files" +msgstr "" + +#: ../../../CHANGELOG.md:1196 +#: ../../../CHANGELOG.md:1253 +msgid "Make channel card updated times more humanly readable, add internationalization (#1089)" +msgstr "" + +#: ../../../CHANGELOG.md:1197 +msgid "Ensure search page reloads if another search is submitted in the sidebar (#1197)" +msgstr "" + +#: ../../../CHANGELOG.md:1198 +msgid "Fixed \"scope=subscribed\" on albums, artists, uploads and libraries API (#1217)" +msgstr "" + +#: ../../../CHANGELOG.md:1199 +msgid "Fixed broken federation with pods using allow-listing (#1999)" +msgstr "" + +#: ../../../CHANGELOG.md:1200 +msgid "Fixed broken search when using (, \" or & chars (#1196)" +msgstr "" + +#: ../../../CHANGELOG.md:1201 +msgid "Fixed domains table hidden controls when no domains are found (#1198)" +msgstr "" + +#: ../../../CHANGELOG.md:1205 +msgid "Simplify Docker mono-container installation and upgrade documentation" +msgstr "" + +#: ../../../CHANGELOG.md:1207 +#: ../../../CHANGELOG.md:1579 +msgid "Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects):" +msgstr "" + +#: ../../../CHANGELOG.md:1210 +msgid "Andy Craze" +msgstr "" + +#: ../../../CHANGELOG.md:1215 +#: ../../../CHANGELOG.md:1588 +#: ../../../CHANGELOG.md:1674 +#: ../../../CHANGELOG.md:2220 +msgid "Daniele Lira Mereb" +msgstr "" + +#: ../../../CHANGELOG.md:1216 +msgid "dulz" +msgstr "" + +#: ../../../CHANGELOG.md:1217 +#: ../../../CHANGELOG.md:1592 +#: ../../../CHANGELOG.md:1973 +msgid "Francesc Galí" +msgstr "" + +#: ../../../CHANGELOG.md:1219 +msgid "Kalle Anka" +msgstr "" + +#: ../../../CHANGELOG.md:1220 +msgid "mekind" +msgstr "" + +#: ../../../CHANGELOG.md:1222 +msgid "Puri" +msgstr "" + +#: ../../../CHANGELOG.md:1224 +msgid "Raphaël Ventura" +msgstr "" + +#: ../../../CHANGELOG.md:1225 +msgid "Slimane Selyan Amiri" +msgstr "" + +#: ../../../CHANGELOG.md:1228 +msgid "Sébastien de Melo" +msgstr "" + +#: ../../../CHANGELOG.md:1229 +msgid "Ventura Pérez García" +msgstr "" + +#: ../../../CHANGELOG.md:1231 +#: ../../../CHANGELOG.md:1622 +#: ../../../CHANGELOG.md:1993 +msgid "Xosé M" +msgstr "" + +#: ../../../CHANGELOG.md:1233 +msgid "0.21.2 (2020-07-27)" +msgstr "" + +#: ../../../CHANGELOG.md:1239 +msgid "Added a new ?related=obj_id filter for artists, albums and tracks, based on tags" +msgstr "" + +#: ../../../CHANGELOG.md:1240 +msgid "Can now filter subscribed content through API (#1116)" +msgstr "" + +#: ../../../CHANGELOG.md:1241 +msgid "Support ordering=random for artists, albums, tracks and channels endpoints (#1145)" +msgstr "" + +#: ../../../CHANGELOG.md:1242 +msgid "Use role=alert on forms/toast message to improve accessibility (#1134)" +msgstr "" + +#: ../../../CHANGELOG.md:1246 +msgid "Fix embedded player not working on channel series/album (#1175)" +msgstr "" + +#: ../../../CHANGELOG.md:1247 +msgid "Fixed broken mimetype detection during import (#1165)" +msgstr "" + +#: ../../../CHANGELOG.md:1248 +msgid "Fixed crash when loading recent albums via Subsonic (#1158)" +msgstr "" + +#: ../../../CHANGELOG.md:1249 +msgid "Fixed crash with null help text in admin (#1161)" +msgstr "" + +#: ../../../CHANGELOG.md:1250 +msgid "Fixed invalid metadata when importing multi-artists tracks/albums (#1104)" +msgstr "" + +#: ../../../CHANGELOG.md:1251 +msgid "Fixed player crash when using Funkwhale as a PWA (#1157)" +msgstr "" + +#: ../../../CHANGELOG.md:1252 +msgid "Fixed wrong convert art displaying in some situations (#1138)" +msgstr "" + +#: ../../../CHANGELOG.md:1258 +msgid "Bheesham Persaud" +msgstr "" + +#: ../../../CHANGELOG.md:1261 +msgid "0.21.1 (2020-06-11)" +msgstr "" + +#: ../../../CHANGELOG.md:1267 +msgid "Support a --watch mode with `import_files` to automatically add, update and remove files when filesystem is updated (#721)" +msgstr "" + +#: ../../../CHANGELOG.md:1271 +msgid "Added new channels widget on pod landing page (#1113)" +msgstr "" + +#: ../../../CHANGELOG.md:1272 +msgid "Fix HTML <title> not including instance name in some situations (#1107)" +msgstr "" + +#: ../../../CHANGELOG.md:1273 +msgid "Make URL-building logic more resilient against reverse proxy misconfiguration (#1085)" +msgstr "" + +#: ../../../CHANGELOG.md:1274 +msgid "Removed unused masonry dependency (#1112)" +msgstr "" + +#: ../../../CHANGELOG.md:1275 +msgid "Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154)" +msgstr "" + +#: ../../../CHANGELOG.md:1276 +msgid "Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151)" +msgstr "" + +#: ../../../CHANGELOG.md:1280 +msgid "Added safeguard to ensure local uploads are never purged from cache (#1086)" +msgstr "" + +#: ../../../CHANGELOG.md:1281 +msgid "Ensure firefox password manager dont autofill username in search bar (#1090)" +msgstr "" + +#: ../../../CHANGELOG.md:1282 +msgid "Ensure player doesn't disappear when last queue track is removed manually (#1092)" +msgstr "" + +#: ../../../CHANGELOG.md:1283 +msgid "Ensure tracks linked to skipped upload can be pruned (#1011)" +msgstr "" + +#: ../../../CHANGELOG.md:1284 +msgid "Fix playlist modal only listing 50 first playlists (#1087)" +msgstr "" + +#: ../../../CHANGELOG.md:1285 +msgid "Fixed a wording issue on artist channel page (#1117)" +msgstr "" + +#: ../../../CHANGELOG.md:1286 +msgid "Fixed crash on python 3.5 with cli importer (#1155)" +msgstr "" + +#: ../../../CHANGELOG.md:1287 +msgid "Fixed issue when displaying starred tracks on subsonic (#1082)" +msgstr "" + +#: ../../../CHANGELOG.md:1288 +msgid "Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run `python manage.py fix_uploads --mimetype` to set proper mimetypes on existing uploads." +msgstr "" + +#: ../../../CHANGELOG.md:1289 +msgid "Fixed page not refreshing when switching between My Library and Explore sections (#1091)" +msgstr "" + +#: ../../../CHANGELOG.md:1290 +msgid "Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147)" +msgstr "" + +#: ../../../CHANGELOG.md:1291 +msgid "Fixed wrong album and track count in admin artist API (#1096)" +msgstr "" + +#: ../../../CHANGELOG.md:1292 +msgid "Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078)" +msgstr "" + +#: ../../../CHANGELOG.md:1306 +msgid "Contributors to this release (development, documentation, reviews, testing):" +msgstr "" + +#: ../../../CHANGELOG.md:1311 +msgid "gisforgabriel" +msgstr "" + +#: ../../../CHANGELOG.md:1312 +msgid "Siren" +msgstr "" + +#: ../../../CHANGELOG.md:1315 +msgid "0.21 \"Agate\" (2020-04-24)" +msgstr "" + +#: ../../../CHANGELOG.md:1317 +msgid "This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3" +msgstr "" + +#: ../../../CHANGELOG.md:1319 +msgid "We are truly grateful as well to the dozens of people who contributed to this release with translations, development, documentation, reviews, design, testing, feedback, financial support, third-party projects and integrations… You made it possible!" +msgstr "" + +#: ../../../CHANGELOG.md:1321 +msgid "Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html, there are also additional operations you need to execute, listed in the changelog below (search \"Manual action\")." +msgstr "" + +#: ../../../CHANGELOG.md:1323 +msgid "Channels and podcasts" +msgstr "" + +#: ../../../CHANGELOG.md:1325 +msgid "Funkwhale 0.21 includes a brand new feature: Channels!" +msgstr "" + +#: ../../../CHANGELOG.md:1327 +msgid "Channels can be used as a replacement to public libraries, to publish audio content, both musical and non-musical. They federate with other Funkwhale pods, but also other fediverse software, in particular Mastodon, Pleroma, Friendica and Reel2Bits, meaning people can subscribe to your channel from any of these software. To get started with publication, simply visit your profile and create a channel from there." +msgstr "" + +#: ../../../CHANGELOG.md:1332 +msgid "Each Funkwhale channel also comes with RSS feed that is compatible with existing podcasting applications, like AntennaPod on Android and, within Funkwhale, you can also subscribe to any podcast from its RSS feed!" +msgstr "" + +#: ../../../CHANGELOG.md:1335 +msgid "Many, many thanks to the numerous people who helped with the feature design, development and testing, and in particular to the members of the working group who met every week for months in order to get this done, and the members of other third-party projects who took the time to work with us to ensure compatibility." +msgstr "" + +#: ../../../CHANGELOG.md:1339 +msgid "Redesigned navigation, player and queue" +msgstr "" + +#: ../../../CHANGELOG.md:1341 +msgid "This release includes a full redesign of our navigation, player and queue. Overall, it should provide a better, less confusing experience, especially on mobile devices. This redesign was suggested 14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done!" +msgstr "" + +#: ../../../CHANGELOG.md:1345 +msgid "Improved search bar for searching remote objects" +msgstr "" + +#: ../../../CHANGELOG.md:1347 +msgid "The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly:" +msgstr "" + +#: ../../../CHANGELOG.md:1349 +msgid "Subscribe to a remote library via its URL" +msgstr "" + +#: ../../../CHANGELOG.md:1350 +msgid "Listen a public track from another pod" +msgstr "" + +#: ../../../CHANGELOG.md:1351 +msgid "Subscribe to a channel" +msgstr "" + +#: ../../../CHANGELOG.md:1353 +msgid "Screening for sign-ups and custom sign-up form" +msgstr "" + +#: ../../../CHANGELOG.md:1355 +msgid "Instance admins can now configure their pod so that registrations required manual approval from a moderator. This is especially useful on private or semi-private pods where you don't want to close registrations completely, but don't want spam or unwanted users to join your pod." +msgstr "" + +#: ../../../CHANGELOG.md:1359 +msgid "When this is enabled and a new user register, their request is put in a moderation queue, and moderators are notified by email. When the request is approved or refused, the user is also notified by email." +msgstr "" + +#: ../../../CHANGELOG.md:1362 +msgid "In addition, it's also possible to customize the sign-up form by:" +msgstr "" + +#: ../../../CHANGELOG.md:1364 +msgid "Providing a custom help text, in markdown format" +msgstr "" + +#: ../../../CHANGELOG.md:1365 +msgid "Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods" +msgstr "" + +#: ../../../CHANGELOG.md:1367 +msgid "Federated reports" +msgstr "" + +#: ../../../CHANGELOG.md:1369 +msgid "It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed." +msgstr "" + +#: ../../../CHANGELOG.md:1371 +msgid "This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers." +msgstr "" + +#: ../../../CHANGELOG.md:1373 +msgid "Improved search performance" +msgstr "" + +#: ../../../CHANGELOG.md:1375 +msgid "Our search engine went through a full rewrite to make it faster. This new engine is enabled by default when using the search bar, or when searching for artists, albums and tracks. It leverages PostgreSQL full-text search capabilities." +msgstr "" + +#: ../../../CHANGELOG.md:1379 +msgid "During our tests, we observed huge performance improvements after the switch, by an order of magnitude. This should be especially perceptible on pods with large databases, more modest hardware or hard drives." +msgstr "" + +#: ../../../CHANGELOG.md:1383 +msgid "We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, you can switch back by setting `USE_FULL_TEXT_SEARCH=false` in your `.env` file." +msgstr "" + +#: ../../../CHANGELOG.md:1386 +msgid "Enforced email verification" +msgstr "" + +#: ../../../CHANGELOG.md:1388 +msgid "The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to make email verification mandatory for your users. It defaults to `false`, and doesn't apply to superuser accounts created through the CLI." +msgstr "" + +#: ../../../CHANGELOG.md:1392 +msgid "If you enable this, ensure you have a SMTP server configured too." +msgstr "" + +#: ../../../CHANGELOG.md:1394 +msgid "More reliable CLI importer [manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:1396 +msgid "Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger)" +msgstr "" + +#: ../../../CHANGELOG.md:1398 +msgid "We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly." +msgstr "" + +#: ../../../CHANGELOG.md:1400 +msgid "If you use the `import_files` command, this means you should replace scripts that look like this:" +msgstr "" + +#: ../../../CHANGELOG.md:1406 +msgid "By this:" +msgstr "" + +#: ../../../CHANGELOG.md:1412 +msgid "And Funkwhale will happily import any supported audio file from the specified directory." +msgstr "" + +#: ../../../CHANGELOG.md:1414 +#: ../../../CHANGELOG.md:1505 +msgid "User management through the server CLI" +msgstr "" + +#: ../../../CHANGELOG.md:1416 +msgid "We now support user creation (incl. non-admin accounts), update and removal directly from the server CLI. Typical use cases include:" +msgstr "" + +#: ../../../CHANGELOG.md:1419 +msgid "Changing a user password from the command line" +msgstr "" + +#: ../../../CHANGELOG.md:1420 +msgid "Creating or updating users from deployments scripts or playbooks" +msgstr "" + +#: ../../../CHANGELOG.md:1421 +msgid "Removing or granting permissions or upload quota to multiple users at once" +msgstr "" + +#: ../../../CHANGELOG.md:1422 +msgid "Marking multiple users as inactive" +msgstr "" + +#: ../../../CHANGELOG.md:1424 +msgid "All user-related commands are available under the `python manage.py fw users` namespace. Please refer to the [Admin documentation](https://docs.funkwhale.audio/admin/commands.html#user-management) for more information and instructions." +msgstr "" + +#: ../../../CHANGELOG.md:1428 +msgid "Progressive web app [Manual action suggested, non-docker only]" +msgstr "" + +#: ../../../CHANGELOG.md:1430 +msgid "We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience during offline use, and on mobile devices." +msgstr "" + +#: ../../../CHANGELOG.md:1433 +msgid "In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure the following instruction is present in your nginx configuration:" +msgstr "" + +#: ../../../CHANGELOG.md:1443 +msgid "Postgres docker changed environment variable [manual action required, docker multi-container only]" +msgstr "" + +#: ../../../CHANGELOG.md:1445 +msgid "If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658)" +msgstr "" + +#: ../../../CHANGELOG.md:1447 +msgid "You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust`" +msgstr "" + +#: ../../../CHANGELOG.md:1449 +msgid "Newer deployments aren't affected." +msgstr "" + +#: ../../../CHANGELOG.md:1451 +msgid "Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only]" +msgstr "" + +#: ../../../CHANGELOG.md:1453 +msgid "With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now includes PostgreSQL 11." +msgstr "" + +#: ../../../CHANGELOG.md:1455 +msgid "In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below:" +msgstr "" + +#: ../../../CHANGELOG.md:1484 +msgid "Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, you can remove the backups/old files:" +msgstr "" + +#: ../../../CHANGELOG.md:1498 +msgid "Support for publishing and subscribing to podcasts (#170)" +msgstr "" + +#: ../../../CHANGELOG.md:1499 +msgid "Brand new navigation, queue and player redesign (#594)" +msgstr "" + +#: ../../../CHANGELOG.md:1500 +msgid "Can now browse a library content through the UI (#926)" +msgstr "" + +#: ../../../CHANGELOG.md:1501 +msgid "Federated reports (#1038)" +msgstr "" + +#: ../../../CHANGELOG.md:1502 +msgid "Screening for sign-ups (#1040)" +msgstr "" + +#: ../../../CHANGELOG.md:1503 +msgid "Make it possible to enforce email verification (#1039)" +msgstr "" + +#: ../../../CHANGELOG.md:1504 +msgid "Added a new radio based on another user listenings (#1060)" +msgstr "" + +#: ../../../CHANGELOG.md:1509 +msgid "Added ability to reject library follows from notifications screen (#859)" +msgstr "" + +#: ../../../CHANGELOG.md:1510 +msgid "Added periodic background task and CLI command to associate genre tags to artists and albums based on identical tags found on corresponding tracks (#988)" +msgstr "" + +#: ../../../CHANGELOG.md:1511 +msgid "Added support for CELERYD_CONCURRENCY env var to control the number of worker processes (#997)" +msgstr "" + +#: ../../../CHANGELOG.md:1512 +msgid "Added the ability to sort albums by release date (#1013)" +msgstr "" + +#: ../../../CHANGELOG.md:1513 +msgid "Added two new radios to play your own content or a given library tracks" +msgstr "" + +#: ../../../CHANGELOG.md:1514 +msgid "Advertise list of known nodes on /api/v1/federation/domains and in nodeinfo if stats sharing is enabled" +msgstr "" + +#: ../../../CHANGELOG.md:1515 +msgid "Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012)" +msgstr "" + +#: ../../../CHANGELOG.md:1516 +msgid "Favor local uploads when playing a track with multiple uploads (#1036)" +msgstr "" + +#: ../../../CHANGELOG.md:1517 +msgid "Include only local content in nodeinfo stats, added downloads count" +msgstr "" + +#: ../../../CHANGELOG.md:1518 +msgid "Make media and static files serving more reliable when reverse proxy `X_FORWARDED_*` headers are incorrect (#947)" +msgstr "" + +#: ../../../CHANGELOG.md:1519 +msgid "Order the playlist columns by modification date in the Browse tab (#775)" +msgstr "" + +#: ../../../CHANGELOG.md:1520 +msgid "Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042)" +msgstr "" + +#: ../../../CHANGELOG.md:1521 +msgid "Remember display settings in Album, Artist, Radio and Playlist views (#391)" +msgstr "" + +#: ../../../CHANGELOG.md:1522 +msgid "Removed unnecessary \"Federation music needs approval\" setting (#959)" +msgstr "" + +#: ../../../CHANGELOG.md:1523 +msgid "Replaced our slow research logic by PostgreSQL full-text search (#994)" +msgstr "" + +#: ../../../CHANGELOG.md:1524 +msgid "Support autoplay when loading embed frame from Mastodon and third-party websites (#1041)" +msgstr "" + +#: ../../../CHANGELOG.md:1525 +msgid "Support filtering playlist by name and several additional UX improvements in playlists modal (#974)" +msgstr "" + +#: ../../../CHANGELOG.md:1526 +msgid "Support modifying album cover art through the web UI (#588)" +msgstr "" + +#: ../../../CHANGELOG.md:1527 +msgid "Use a dedicated scope for throttling subsonic to avoid intrusive rate-limiting" +msgstr "" + +#: ../../../CHANGELOG.md:1528 +msgid "Use same markdown widget for all content fields (rules, description, reports, notes, etc.)" +msgstr "" + +#: ../../../CHANGELOG.md:1529 +msgid "CLI Importer is now more reliable and less resource-hungry on large libraries" +msgstr "" + +#: ../../../CHANGELOG.md:1530 +#: ../../../CHANGELOG.md:1554 +msgid "Add support custom domain for S3 storage" +msgstr "" + +#: ../../../CHANGELOG.md:1531 +msgid "Better placeholders for channels when there are no episodes or series" +msgstr "" + +#: ../../../CHANGELOG.md:1532 +msgid "Updated documentation for 0.21 release" +msgstr "" + +#: ../../../CHANGELOG.md:1533 +msgid "Improved performance and error handling when fetching remote attachments" +msgstr "" + +#: ../../../CHANGELOG.md:1537 +msgid "Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961)" +msgstr "" + +#: ../../../CHANGELOG.md:1538 +msgid "Fix issue with browser shortcuts such as search and focus URL not being recognised (#340, #985)" +msgstr "" + +#: ../../../CHANGELOG.md:1539 +msgid "Fixed admin dropdown not showing after login (#1042)" +msgstr "" + +#: ../../../CHANGELOG.md:1540 +msgid "Fixed an issue with celerybeat container failing to restart (#1004)" +msgstr "" + +#: ../../../CHANGELOG.md:1541 +msgid "Fixed invalid displayed number of tracks in playlist (#986)" +msgstr "" + +#: ../../../CHANGELOG.md:1542 +msgid "Fixed issue with recent results not being loaded from the API (#948)" +msgstr "" + +#: ../../../CHANGELOG.md:1543 +msgid "Fixed issue with sorting by album name not working (#960)" +msgstr "" + +#: ../../../CHANGELOG.md:1544 +msgid "Fixed short audio glitch when switching switching to another track with player paused (#970)" +msgstr "" + +#: ../../../CHANGELOG.md:1545 +msgid "Improved deduplication logic to prevent skipped files during import (#348, #474, #557, #740, #928)" +msgstr "" + +#: ../../../CHANGELOG.md:1546 +msgid "More resilient tag parsing with empty release date or album artist (#1037)" +msgstr "" + +#: ../../../CHANGELOG.md:1547 +msgid "More robust importer against malformed dates (#966)" +msgstr "" + +#: ../../../CHANGELOG.md:1548 +msgid "Removed \"nodeinfo disabled\" setting, as nodeinfo is required for the UI to work (#982)" +msgstr "" + +#: ../../../CHANGELOG.md:1549 +msgid "Replaced PDF icon by List icon in playlist placeholder (#943)" +msgstr "" + +#: ../../../CHANGELOG.md:1550 +msgid "Resolve an issue where disc numbers were not taken into consideration when playing an album from the album card (#1006)" +msgstr "" + +#: ../../../CHANGELOG.md:1551 +msgid "Set correct size for album covers in playlist cards (#680)" +msgstr "" + +#: ../../../CHANGELOG.md:1552 +msgid "Remove double spaces in ChannelForm" +msgstr "" + +#: ../../../CHANGELOG.md:1553 +msgid "Deduplicate tags in Audio ActivityPub representation" +msgstr "" + +#: ../../../CHANGELOG.md:1555 +msgid "Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075)" +msgstr "" + +#: ../../../CHANGELOG.md:1556 +msgid "Exclude external podcasts from library home" +msgstr "" + +#: ../../../CHANGELOG.md:1557 +msgid "Fixed broken channel save when description is too long" +msgstr "" + +#: ../../../CHANGELOG.md:1558 +msgid "Fixed 500 error when federation is disabled and application+json is requested" +msgstr "" + +#: ../../../CHANGELOG.md:1559 +msgid "Fixed minor subsonic API crash" +msgstr "" + +#: ../../../CHANGELOG.md:1560 +msgid "Fixed broken local profile page when allow-list is enabled" +msgstr "" + +#: ../../../CHANGELOG.md:1561 +msgid "Fixed issue with confirmation email not sending when signup-approval was enabled" +msgstr "" + +#: ../../../CHANGELOG.md:1562 +msgid "Ensure 0 quota on user is honored" +msgstr "" + +#: ../../../CHANGELOG.md:1563 +msgid "Fixed attachments URL not honoring media URL" +msgstr "" + +#: ../../../CHANGELOG.md:1564 +msgid "Fix grammar in msg string in TrackBase.vue" +msgstr "" + +#: ../../../CHANGELOG.md:1565 +msgid "Fix typo in SubscribeButton.vue" +msgstr "" + +#: ../../../CHANGELOG.md:1567 +msgid "Translations:" +msgstr "" + +#: ../../../CHANGELOG.md:1569 +msgid "Arabic" +msgstr "" + +#: ../../../CHANGELOG.md:1570 +msgid "Catalan" +msgstr "" + +#: ../../../CHANGELOG.md:1571 +msgid "English (United Kingdom)" +msgstr "" + +#: ../../../CHANGELOG.md:1572 +msgid "German" +msgstr "" + +#: ../../../CHANGELOG.md:1573 +msgid "Hungarian" +msgstr "" + +#: ../../../CHANGELOG.md:1574 +msgid "Japanese" +msgstr "" + +#: ../../../CHANGELOG.md:1575 +msgid "Occitan" +msgstr "" + +#: ../../../CHANGELOG.md:1576 +msgid "Portuguese (Brazil)" +msgstr "" + +#: ../../../CHANGELOG.md:1577 +msgid "Russian" +msgstr "" + +#: ../../../CHANGELOG.md:1582 +msgid "annando" +msgstr "" + +#: ../../../CHANGELOG.md:1583 +msgid "Anton Strömkvist" +msgstr "" + +#: ../../../CHANGELOG.md:1584 +msgid "Audrey" +msgstr "" + +#: ../../../CHANGELOG.md:1585 +#: ../../../CHANGELOG.md:1969 +#: ../../../CHANGELOG.md:2217 +msgid "ButterflyOfFire" +msgstr "" + +#: ../../../CHANGELOG.md:1589 +msgid "dashie" +msgstr "" + +#: ../../../CHANGELOG.md:1590 +msgid "Eloisa" +msgstr "" + +#: ../../../CHANGELOG.md:1591 +msgid "eorn" +msgstr "" + +#: ../../../CHANGELOG.md:1593 +msgid "gerhardbeck" +msgstr "" + +#: ../../../CHANGELOG.md:1594 +msgid "GinnyMcQueen" +msgstr "" + +#: ../../../CHANGELOG.md:1595 +msgid "guillermau" +msgstr "" + +#: ../../../CHANGELOG.md:1596 +msgid "Haelwenn" +msgstr "" + +#: ../../../CHANGELOG.md:1597 +msgid "jinxx" +msgstr "" + +#: ../../../CHANGELOG.md:1598 +msgid "Jonathan Aylard" +msgstr "" + +#: ../../../CHANGELOG.md:1600 +msgid "M.G" +msgstr "" + +#: ../../../CHANGELOG.md:1602 +msgid "Mathé Grievink" +msgstr "" + +#: ../../../CHANGELOG.md:1603 +#: ../../../CHANGELOG.md:1983 +#: ../../../CHANGELOG.md:2229 +msgid "Mélanie Chauvel" +msgstr "" + +#: ../../../CHANGELOG.md:1604 +msgid "Mjourdan" +msgstr "" + +#: ../../../CHANGELOG.md:1605 +msgid "Morgan Kesler" +msgstr "" + +#: ../../../CHANGELOG.md:1606 +msgid "Noe Gaumont" +msgstr "" + +#: ../../../CHANGELOG.md:1607 +msgid "Noureddine HADDAG" +msgstr "" + +#: ../../../CHANGELOG.md:1608 +msgid "Ollie" +msgstr "" + +#: ../../../CHANGELOG.md:1609 +msgid "Peter Wickenberg" +msgstr "" + +#: ../../../CHANGELOG.md:1611 +#: ../../../CHANGELOG.md:2234 +msgid "Renon" +msgstr "" + +#: ../../../CHANGELOG.md:1612 +msgid "Satsuki Yanagi" +msgstr "" + +#: ../../../CHANGELOG.md:1613 +msgid "Shlee" +msgstr "" + +#: ../../../CHANGELOG.md:1615 +msgid "techknowlogick" +msgstr "" + +#: ../../../CHANGELOG.md:1616 +msgid "ThibG" +msgstr "" + +#: ../../../CHANGELOG.md:1618 +msgid "unklebonehead" +msgstr "" + +#: ../../../CHANGELOG.md:1619 +msgid "wakest" +msgstr "" + +#: ../../../CHANGELOG.md:1620 +msgid "wxcafé" +msgstr "" + +#: ../../../CHANGELOG.md:1621 +#: ../../../CHANGELOG.md:1992 +msgid "Xaloc" +msgstr "" + +#: ../../../CHANGELOG.md:1624 +msgid "0.20.1 (2019-10-28)" +msgstr "" + +#: ../../../CHANGELOG.md:1628 +#: ../../../CHANGELOG.md:1650 +msgid "Denormalized audio permission logic in a separate table to enhance performance" +msgstr "" + +#: ../../../CHANGELOG.md:1630 +msgid "With this release, we're introducing a performance enhancement that should reduce the load on the database and API servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939)." +msgstr "" + +#: ../../../CHANGELOG.md:1633 +msgid "Under the hood, we now maintain a separate table to link users to the tracks they are allowed to see. This change is **disabled** by default, but should be enabled by default starting in Funkwhale 0.21." +msgstr "" + +#: ../../../CHANGELOG.md:1636 +msgid "If you want to try it now, add `MUSIC_USE_DENORMALIZATION=True` to your `.env` file, restart Funkwhale, and run the following command:" +msgstr "" + +#: ../../../CHANGELOG.md:1643 +msgid "This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual behaviour regarding tracks, albums and artists visibility." +msgstr "" + +#: ../../../CHANGELOG.md:1648 +msgid "Added a retry option for failed uploads (#942)" +msgstr "" + +#: ../../../CHANGELOG.md:1649 +msgid "Added feedback via loading spinner when searching a remote library" +msgstr "" + +#: ../../../CHANGELOG.md:1651 +msgid "Placeholders will now be shown if no content is available across the application (#750)" +msgstr "" + +#: ../../../CHANGELOG.md:1652 +msgid "Reduce the number of simultaneous DB connections under some deployment scenario" +msgstr "" + +#: ../../../CHANGELOG.md:1653 +msgid "Support byYear filtering in Subsonic API (#936)" +msgstr "" + +#: ../../../CHANGELOG.md:1657 +msgid "Ensure password input doesn't overflow outside of container (#933)" +msgstr "" + +#: ../../../CHANGELOG.md:1658 +msgid "Fix audio serving issues under S3/nginx when signatures are enabled" +msgstr "" + +#: ../../../CHANGELOG.md:1659 +msgid "Fix import crash when importing M4A file with no embedded cover (#946)" +msgstr "" + +#: ../../../CHANGELOG.md:1660 +msgid "Fix tag exclusion in custom radios (#950)" +msgstr "" + +#: ../../../CHANGELOG.md:1661 +msgid "Fixed an issue with embed player CSS being purged during build (#935)" +msgstr "" + +#: ../../../CHANGELOG.md:1662 +msgid "Fixed escaped pod name displayed on home/about page (#945)" +msgstr "" + +#: ../../../CHANGELOG.md:1663 +msgid "Fixed pagination in subsonic getSongsByGenre endpoint (#954)" +msgstr "" + +#: ../../../CHANGELOG.md:1664 +msgid "Fixed style glitches in dropdowns" +msgstr "" + +#: ../../../CHANGELOG.md:1668 +msgid "Documented how to create DB extension by hand in case of permission error during migrations (#934)" +msgstr "" + +#: ../../../CHANGELOG.md:1670 +#: ../../../CHANGELOG.md:1966 +msgid "Contributors to this release (translation, development, documentation, reviews, design):" +msgstr "" + +#: ../../../CHANGELOG.md:1673 +msgid "Dag Stenstad" +msgstr "" + +#: ../../../CHANGELOG.md:1678 +msgid "knuxify" +msgstr "" + +#: ../../../CHANGELOG.md:1679 +msgid "Mateus Mattei Garcia" +msgstr "" + +#: ../../../CHANGELOG.md:1682 +msgid "0.20 (2019-10-04)" +msgstr "" + +#: ../../../CHANGELOG.md:1686 +msgid "Support for genres via tags" +msgstr "" + +#: ../../../CHANGELOG.md:1688 +msgid "One of our most requested missing features is now available!" +msgstr "" + +#: ../../../CHANGELOG.md:1690 +msgid "Starting with Funkwhale 0.20, Funkwhale will automatically extract genre information from uploaded files and associate it with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). Please refer to [our tagging documentation](https://docs.funkwhale.audio/users/upload.html#tagging-files) for more information regarding the tagging process." +msgstr "" + +#: ../../../CHANGELOG.md:1696 +msgid "Tags can also be associated with artists and albums, and updated after upload through the UI using the edit system released in Funkwhale 0.19. Tags are also fetched when retrieving content via federation." +msgstr "" + +#: ../../../CHANGELOG.md:1700 +msgid "Tags are used in various places to enhance user experience:" +msgstr "" + +#: ../../../CHANGELOG.md:1702 +msgid "Tags are listed on tracks, albums and artist profiles" +msgstr "" + +#: ../../../CHANGELOG.md:1703 +msgid "Each tag has a dedicated page were you can browse corresponding content and quickly start a radio" +msgstr "" + +#: ../../../CHANGELOG.md:1704 +msgid "The custom radio builder now supports using tags" +msgstr "" + +#: ../../../CHANGELOG.md:1705 +msgid "Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well" +msgstr "" + +#: ../../../CHANGELOG.md:1707 +msgid "If you are a pod admin and want to extract tags from already uploaded content, you run [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) and [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in a `python manage.py shell`." +msgstr "" + +#: ../../../CHANGELOG.md:1710 +msgid "Content and account reports" +msgstr "" + +#: ../../../CHANGELOG.md:1712 +msgid "It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, who can review it and delete reported content, block accounts or take any other action they deem necessary." +msgstr "" + +#: ../../../CHANGELOG.md:1715 +msgid "By default, both anonymous and authenticated users can submit these reports. This makes sure moderators can receive and handle takedown requests and other reports for illegal content that may be sent by third-parties without an account on the pod. However, you can disable anonymous reports completely via your pod settings." +msgstr "" + +#: ../../../CHANGELOG.md:1719 +msgid "Federation of the reports will be supported in a future release." +msgstr "" + +#: ../../../CHANGELOG.md:1721 +#: ../../../CHANGELOG.md:1734 +msgid "For more information about this feature, please check out our documentation:" +msgstr "" + +#: ../../../CHANGELOG.md:1723 +msgid "[User documentation](https://docs.funkwhale.audio/moderator/reports.html)" +msgstr "" + +#: ../../../CHANGELOG.md:1724 +msgid "[Moderator documentation](https://docs.funkwhale.audio/users/reports.html)" +msgstr "" + +#: ../../../CHANGELOG.md:1726 +msgid "Account deletion" +msgstr "" + +#: ../../../CHANGELOG.md:1728 +msgid "Users can now delete their account themselves, without involving an administrator." +msgstr "" + +#: ../../../CHANGELOG.md:1730 +msgid "The deletion process will remove any local data and objects associated with the account, but the username won't be able to new users to avoid impersonation. Deletion is also broadcasted to other known servers on the federation." +msgstr "" + +#: ../../../CHANGELOG.md:1736 +msgid "[User documentation](https://docs.funkwhale.audio/users/account.html)" +msgstr "" + +#: ../../../CHANGELOG.md:1738 +msgid "Landing and about page redesign [Manual action suggested]" +msgstr "" + +#: ../../../CHANGELOG.md:1740 +msgid "In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod configuration. Among other things, the landing page will now include:" +msgstr "" + +#: ../../../CHANGELOG.md:1743 +msgid "your pod and an excerpt from your pod's description" +msgstr "" + +#: ../../../CHANGELOG.md:1744 +#: ../../../CHANGELOG.md:1756 +msgid "your pod banner image, if any" +msgstr "" + +#: ../../../CHANGELOG.md:1745 +#: ../../../CHANGELOG.md:1757 +msgid "your contact email, if any" +msgstr "" + +#: ../../../CHANGELOG.md:1746 +msgid "the login form" +msgstr "" + +#: ../../../CHANGELOG.md:1747 +msgid "the signup form (if registrations are open on your pod)" +msgstr "" + +#: ../../../CHANGELOG.md:1748 +msgid "some basic statistics about your pod" +msgstr "" + +#: ../../../CHANGELOG.md:1749 +msgid "a widget including recently uploaded albums, if anonymous access is enabled" +msgstr "" + +#: ../../../CHANGELOG.md:1751 +msgid "The landing page will still include some information about Funkwhale, but in a less intrusive and proeminent way than before." +msgstr "" + +#: ../../../CHANGELOG.md:1753 +msgid "Additionally, the about page now includes:" +msgstr "" + +#: ../../../CHANGELOG.md:1755 +msgid "your pod name, description, rules and terms" +msgstr "" + +#: ../../../CHANGELOG.md:1758 +msgid "comprehensive statistics about your pod" +msgstr "" + +#: ../../../CHANGELOG.md:1759 +msgid "some info about your pod configuration, such as registration and federation status or the default upload quota for new users" +msgstr "" + +#: ../../../CHANGELOG.md:1761 +msgid "With this redesign, we've added a handful of additional pod settings:" +msgstr "" + +#: ../../../CHANGELOG.md:1763 +msgid "Pod banner image" +msgstr "" + +#: ../../../CHANGELOG.md:1764 +msgid "Contact email" +msgstr "" + +#: ../../../CHANGELOG.md:1765 +msgid "Rules" +msgstr "" + +#: ../../../CHANGELOG.md:1766 +msgid "Terms of service" +msgstr "" + +#: ../../../CHANGELOG.md:1768 +msgid "We recommend taking a few moments to fill these accordingly to your needs, by visiting `/manage/settings`." +msgstr "" + +#: ../../../CHANGELOG.md:1770 +msgid "Allow-list to restrict federation to trusted domains" +msgstr "" + +#: ../../../CHANGELOG.md:1772 +msgid "The Allow-Listing feature grants pod moderators and administrators greater control over federation by allowing you to create a pod-wide allow-list." +msgstr "" + +#: ../../../CHANGELOG.md:1776 +msgid "When allow-listing is enabled, your pod's users will only be able to interact with pods included in the allow-list. Any messages, activity, uploads, or modifications to libraries and playlists will only be shared with pods on the allow-list. Pods which are not included in the allow-list will not have access to your pod's content or messages and will not be able to send anything to your pod." +msgstr "" + +#: ../../../CHANGELOG.md:1785 +msgid "If you want to enable this feature on your pod, or learn more, please refer to [our documentation](https://docs.funkwhale.audio/moderator/listing.html)!" +msgstr "" + +#: ../../../CHANGELOG.md:1787 +msgid "Periodic message to incite people to support their pod and Funkwhale" +msgstr "" + +#: ../../../CHANGELOG.md:1789 +msgid "Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing." +msgstr "" + +#: ../../../CHANGELOG.md:1791 +msgid "If specified by the pod admin, a separate and custom message will also be displayed in a similar way to provide instructions and links to support the pod." +msgstr "" + +#: ../../../CHANGELOG.md:1793 +msgid "Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely." +msgstr "" + +#: ../../../CHANGELOG.md:1795 +msgid "Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only]" +msgstr "" + +#: ../../../CHANGELOG.md:1797 +msgid "To improve the performance, stability and reliability of Funkwhale's web processes, we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as:" +msgstr "" + +#: ../../../CHANGELOG.md:1800 +msgid "zero-downtime upgrades" +msgstr "" + +#: ../../../CHANGELOG.md:1801 +msgid "configurable number of web worker processes" +msgstr "" + +#: ../../../CHANGELOG.md:1803 +msgid "Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne." +msgstr "" + +#: ../../../CHANGELOG.md:1805 +msgid "To benefit from this enhancement on existing instances, you need to add `FUNKWHALE_WEB_WORKERS=1` in your `.env` file (use a higher number if you want to have more web worker processes)." +msgstr "" + +#: ../../../CHANGELOG.md:1808 +msgid "Then, edit your `/etc/systemd/system/funkwhale-server.service` and replace the `ExecStart=` line with `ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}`" +msgstr "" + +#: ../../../CHANGELOG.md:1811 +msgid "Then reload the configuration change with `sudo systemctl daemon-reload` and `sudo systemctl restart funkwhale-server`." +msgstr "" + +#: ../../../CHANGELOG.md:1813 +msgid "Content-Security-Policy and additional security headers [manual action suggested]" +msgstr "" + +#: ../../../CHANGELOG.md:1815 +msgid "To improve the security and reduce the attack surface in case of a successful exploit, we suggest you add the following Content-Security-Policy to your nginx configuration." +msgstr "" + +#: ../../../CHANGELOG.md:1819 +msgid "If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers" +msgstr "" + +#: ../../../CHANGELOG.md:1826 +msgid "**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`:" +msgstr "" + +#: ../../../CHANGELOG.md:1850 +msgid "Then reload nginx with `systemctl reload nginx`." +msgstr "" + +#: ../../../CHANGELOG.md:1852 +msgid "**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`:" +msgstr "" + +#: ../../../CHANGELOG.md:1877 +msgid "Then reload nginx with `docker-compose restart nginx`." +msgstr "" + +#: ../../../CHANGELOG.md:1879 +msgid "Rate limiting" +msgstr "" + +#: ../../../CHANGELOG.md:1881 +msgid "With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error." +msgstr "" + +#: ../../../CHANGELOG.md:1884 +msgid "For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests." +msgstr "" + +#: ../../../CHANGELOG.md:1887 +msgid "You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your `.env` file and restarting the services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/." +msgstr "" + +#: ../../../CHANGELOG.md:1890 +msgid "Broken audio streaming when using S3/Minio and DSub [manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:1892 +msgid "Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage such as Minio, please add the following in your nginx `~ /_protected/media/(.+)` location:" +msgstr "" + +#: ../../../CHANGELOG.md:1901 +msgid "And reload your nginx process." +msgstr "" + +#: ../../../CHANGELOG.md:1903 +msgid "Detail" +msgstr "" + +#: ../../../CHANGELOG.md:1907 +msgid "Added periodical message to incite people to support their pod and Funkwhale (#839)" +msgstr "" + +#: ../../../CHANGELOG.md:1908 +msgid "Admins can now add custom CSS from their pod settings (#879)" +msgstr "" + +#: ../../../CHANGELOG.md:1909 +msgid "Allow-list to restrict federation to trusted domains (#853)" +msgstr "" + +#: ../../../CHANGELOG.md:1910 +msgid "Content and account reports (#890)" +msgstr "" + +#: ../../../CHANGELOG.md:1911 +msgid "Dark theme (#756)" +msgstr "" + +#: ../../../CHANGELOG.md:1912 +msgid "Enforce a configurable rate limit on the API to mitigate abuse (#261)" +msgstr "" + +#: ../../../CHANGELOG.md:1913 +msgid "Redesign of the landing and about pages (#872)" +msgstr "" + +#: ../../../CHANGELOG.md:1914 +msgid "Support for genres, via tags (#432)" +msgstr "" + +#: ../../../CHANGELOG.md:1915 +msgid "Users can now delete their account without admin intervention (#852)" +msgstr "" + +#: ../../../CHANGELOG.md:1919 +msgid "Added a info message on embed wizard when anonymous access to content is disabled (#878)" +msgstr "" + +#: ../../../CHANGELOG.md:1920 +msgid "Added Catalan translation files" +msgstr "" + +#: ../../../CHANGELOG.md:1921 +msgid "Added Czech translation (#844)" +msgstr "" + +#: ../../../CHANGELOG.md:1922 +msgid "Added field to manage user upload quota in Django backend (#903)" +msgstr "" + +#: ../../../CHANGELOG.md:1923 +msgid "Added the option to replace the queue's current contents with a selected album or track (#761)" +msgstr "" + +#: ../../../CHANGELOG.md:1924 +msgid "Artists with no albums will now show track count on artist card (#895)" +msgstr "" + +#: ../../../CHANGELOG.md:1925 +msgid "Ensure API urls answer with and without a trailing slash (#877)" +msgstr "" + +#: ../../../CHANGELOG.md:1926 +msgid "Hardcoded list of supported browsers to avoid unexpected regressions (#854)" +msgstr "" + +#: ../../../CHANGELOG.md:1927 +msgid "Hardened security thanks to CSP and additional HTTP headers (#880)" +msgstr "" + +#: ../../../CHANGELOG.md:1928 +msgid "Improve display of search results by including artist and album data" +msgstr "" + +#: ../../../CHANGELOG.md:1929 +msgid "Increase the security of JWT token generation by using DJANGO_SECRET_KEY as well as user-specific salt for the signature" +msgstr "" + +#: ../../../CHANGELOG.md:1930 +msgid "Mods can now change a library visibility through the admin UI (#548)" +msgstr "" + +#: ../../../CHANGELOG.md:1931 +msgid "New keyboard shortcuts added for enhanced control over audio player (#866)" +msgstr "" + +#: ../../../CHANGELOG.md:1932 +msgid "Now refetch remote ActivityPub artists, albums and tracks to avoid local stale data" +msgstr "" + +#: ../../../CHANGELOG.md:1933 +msgid "Numbers on the stats page will now be formatted in a human readable way and will update with the locale (#873)" +msgstr "" + +#: ../../../CHANGELOG.md:1934 +msgid "Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898)" +msgstr "" + +#: ../../../CHANGELOG.md:1935 +msgid "Prevent usage of too weak passwords (#883)" +msgstr "" + +#: ../../../CHANGELOG.md:1936 +msgid "Reduced CSS size by 30% using purgecss" +msgstr "" + +#: ../../../CHANGELOG.md:1937 +msgid "Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and performance (#862)" +msgstr "" + +#: ../../../CHANGELOG.md:1938 +msgid "Simplified embedded docker reverse proxy IP configuration (#834)" +msgstr "" + +#: ../../../CHANGELOG.md:1939 +msgid "Support embeds on public playlists" +msgstr "" + +#: ../../../CHANGELOG.md:1940 +msgid "Support for M4A/AAC files (#661)" +msgstr "" + +#: ../../../CHANGELOG.md:1941 +msgid "Switched from Semantic-UI to Fomentic-UI" +msgstr "" + +#: ../../../CHANGELOG.md:1942 +msgid "Add dropdown menu to track table (#531)" +msgstr "" + +#: ../../../CHANGELOG.md:1943 +msgid "Display placeholder on homepage when there are no playlists (#892)" +msgstr "" + +#: ../../../CHANGELOG.md:1944 +msgid "Make album cards height independent (#710)" +msgstr "" + +#: ../../../CHANGELOG.md:1948 +msgid "Added context strings to en_GB translations so that picking the language changes the interface as expected" +msgstr "" + +#: ../../../CHANGELOG.md:1949 +msgid "Ensure selected locale is not reset to browser default when refreshing app" +msgstr "" + +#: ../../../CHANGELOG.md:1950 +msgid "Fix missing license information on track details page (#913)" +msgstr "" + +#: ../../../CHANGELOG.md:1951 +msgid "Fix regression to quota bar color (#897)" +msgstr "" + +#: ../../../CHANGELOG.md:1952 +msgid "Fixed a responsive display issues on 1024px wide screens (#904)" +msgstr "" + +#: ../../../CHANGELOG.md:1953 +msgid "Fixed album art not being retrieved from Ogg/Opus files" +msgstr "" + +#: ../../../CHANGELOG.md:1954 +msgid "Fixed broken embedded player layout after dependency update (#875)" +msgstr "" + +#: ../../../CHANGELOG.md:1955 +msgid "Fixed broken external HTTPS request under some scenarios, because of missing PyOpenSSL" +msgstr "" + +#: ../../../CHANGELOG.md:1956 +msgid "Fixed broken less listened radio (#912)" +msgstr "" + +#: ../../../CHANGELOG.md:1957 +msgid "Fixed broken URL to artist and album on album and track pages (#871)" +msgstr "" + +#: ../../../CHANGELOG.md:1958 +msgid "Fixed empty contentType causing client crash in some Subsonic payloads (#893)" +msgstr "" + +#: ../../../CHANGELOG.md:1959 +msgid "Fixed import crashing with empty cover file or too long values on some fields" +msgstr "" + +#: ../../../CHANGELOG.md:1960 +msgid "Fixed in-place imported files not playing under nginx when filename contains ? or % (#924)" +msgstr "" + +#: ../../../CHANGELOG.md:1961 +msgid "Fixed remaining transcoding issue with Subsonic API (#867)" +msgstr "" + +#: ../../../CHANGELOG.md:1962 +msgid "Fixed search usability issue when browsing artists, albums, radios and playlists (#902)" +msgstr "" + +#: ../../../CHANGELOG.md:1963 +msgid "Improved performance of /artists, /albums and /tracks API endpoints by a factor 2 (#865)" +msgstr "" + +#: ../../../CHANGELOG.md:1964 +msgid "Updated docs to ensure streaming works when using Minio/S3 and DSub (#932)" +msgstr "" + +#: ../../../CHANGELOG.md:1976 +msgid "IISergII" +msgstr "" + +#: ../../../CHANGELOG.md:1977 +msgid "jiri-novacek" +msgstr "" + +#: ../../../CHANGELOG.md:1980 +msgid "Koen" +msgstr "" + +#: ../../../CHANGELOG.md:1981 +msgid "Manuel Cortez" +msgstr "" + +#: ../../../CHANGELOG.md:1984 +#: ../../../CHANGELOG.md:2230 +msgid "nouts" +msgstr "" + +#: ../../../CHANGELOG.md:1985 +#: ../../../CHANGELOG.md:2233 +msgid "Quentí" +msgstr "" + +#: ../../../CHANGELOG.md:1987 +#: ../../../CHANGELOG.md:2235 +msgid "Rodrigo Leite" +msgstr "" + +#: ../../../CHANGELOG.md:1990 +#: ../../../CHANGELOG.md:2236 msgid "Sylke Vicious" msgstr "" -#: ../../../CHANGELOG:2098 +#: ../../../CHANGELOG.md:1991 msgid "Tobias Reisinger" msgstr "" -#: ../../../CHANGELOG:2104 +#: ../../../CHANGELOG.md:1995 msgid "0.19.1 (2019-06-28)" msgstr "" -#: ../../../CHANGELOG:2111 +#: ../../../CHANGELOG.md:2001 msgid "The currently playing track is now highlighted with an orange play icon (#832)" msgstr "" -#: ../../../CHANGELOG:2112 +#: ../../../CHANGELOG.md:2002 msgid "Support for importing files with no album tag (#122)" msgstr "" -#: ../../../CHANGELOG:2113 +#: ../../../CHANGELOG.md:2003 msgid "Redirect from / to /library when user is logged in (#864)" msgstr "" -#: ../../../CHANGELOG:2114 +#: ../../../CHANGELOG.md:2004 msgid "Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867)" msgstr "" -#: ../../../CHANGELOG:2115 +#: ../../../CHANGELOG.md:2005 msgid "Added button to search for objects on Discogs (#368)" msgstr "" -#: ../../../CHANGELOG:2116 +#: ../../../CHANGELOG.md:2006 msgid "Added copy-to-clipboard button with Subsonic password input (#814)" msgstr "" -#: ../../../CHANGELOG:2117 +#: ../../../CHANGELOG.md:2007 msgid "Added opus to the list of supported mimetypes and extensions (#868)" msgstr "" -#: ../../../CHANGELOG:2118 +#: ../../../CHANGELOG.md:2008 msgid "Aligned search headers with search results in the sidebar (#708)" msgstr "" -#: ../../../CHANGELOG:2119 +#: ../../../CHANGELOG.md:2009 msgid "Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807)" msgstr "" -#: ../../../CHANGELOG:2120 +#: ../../../CHANGELOG.md:2010 msgid "Favorites radio will not be visible if the user does not have any favorites (#419)" msgstr "" -#: ../../../CHANGELOG:2125 +#: ../../../CHANGELOG.md:2014 msgid "Ensure empty but optional fields in file metadata don't error during import (#850)" msgstr "" -#: ../../../CHANGELOG:2126 +#: ../../../CHANGELOG.md:2015 msgid "Fix broken upload for specific files when using S3 storage (#857)" msgstr "" -#: ../../../CHANGELOG:2127 +#: ../../../CHANGELOG.md:2016 msgid "Fixed broken translation on home and track detail page (#833)" msgstr "" -#: ../../../CHANGELOG:2128 +#: ../../../CHANGELOG.md:2017 msgid "Fixed broken user admin for users with non-digit or letters in their username (#869)" msgstr "" -#: ../../../CHANGELOG:2129 +#: ../../../CHANGELOG.md:2018 msgid "Fixed invalid file extension for transcoded tracks (#848)" msgstr "" -#: ../../../CHANGELOG:2130 +#: ../../../CHANGELOG.md:2019 msgid "Fixed issue with French translation for \"Start radio\" (#849)" msgstr "" -#: ../../../CHANGELOG:2131 +#: ../../../CHANGELOG.md:2020 msgid "Fixed issue with player changing height when hovering over the volume slider (#838)" msgstr "" -#: ../../../CHANGELOG:2132 +#: ../../../CHANGELOG.md:2021 msgid "Fixed secondary menus truncated on narrow screens (#855)" msgstr "" -#: ../../../CHANGELOG:2133 +#: ../../../CHANGELOG.md:2022 msgid "Fixed wrong og:image url when using S3 storage (#851)" msgstr "" -#: ../../../CHANGELOG:2134 +#: ../../../CHANGELOG.md:2023 msgid "Hide pod statistics on about page if those are disabled (#835)" msgstr "" -#: ../../../CHANGELOG:2135 +#: ../../../CHANGELOG.md:2024 msgid "Use ASCII filename before upload to S3 to avoid playback issues (#847)" msgstr "" -#: ../../../CHANGELOG:2138 +#: ../../../CHANGELOG.md:2026 msgid "Contributors to this release (committers and reviewers):" msgstr "" -#: ../../../CHANGELOG:2142 +#: ../../../CHANGELOG.md:2030 msgid "ealgase" msgstr "" -#: ../../../CHANGELOG:2153 +#: ../../../CHANGELOG.md:2039 msgid "0.19.0 (2019-05-16)" msgstr "" -#: ../../../CHANGELOG:2160 +#: ../../../CHANGELOG.md:2043 msgid "Edits on tracks, albums and artists" msgstr "" -#: ../../../CHANGELOG:2162 +#: ../../../CHANGELOG.md:2045 msgid "Funkwhale was a bit annoying when it camed to metadata. Tracks, albums and artists profiles were created from audio file tags, but basically immutable after that (unless you had admin access to Django's UI, which wasn't ideal to do this kind of changes)." msgstr "" -#: ../../../CHANGELOG:2166 +#: ../../../CHANGELOG.md:2049 msgid "With this release, everyone can suggest changes on track, album and artist pages. Users with the \"library\" permission can review suggested edits in a dedicated interface and apply/reject them." msgstr "" -#: ../../../CHANGELOG:2170 +#: ../../../CHANGELOG.md:2053 msgid "Approved edits are broadcasted via federation, to ensure other instances get the information too." msgstr "" -#: ../../../CHANGELOG:2173 +#: ../../../CHANGELOG.md:2056 msgid "Not all fields are currently modifiable using this feature. Especially, it's not possible to suggest a new album cover, or reassign a track to a different album or artist. Those will be implemented in a future release." msgstr "" -#: ../../../CHANGELOG:2178 +#: ../../../CHANGELOG.md:2060 msgid "Admin UI for tracks, albums, artists, libraries and uploads" msgstr "" -#: ../../../CHANGELOG:2180 +#: ../../../CHANGELOG.md:2062 msgid "As part of our ongoing effort to make Funkwhale easier to manage for instance owners, this release includes a brand new administration interface to deal with:" msgstr "" -#: ../../../CHANGELOG:2183 +#: ../../../CHANGELOG.md:2065 msgid "tracks" msgstr "" -#: ../../../CHANGELOG:2184 +#: ../../../CHANGELOG.md:2066 msgid "albums" msgstr "" -#: ../../../CHANGELOG:2185 +#: ../../../CHANGELOG.md:2067 msgid "artists" msgstr "" -#: ../../../CHANGELOG:2186 +#: ../../../CHANGELOG.md:2068 msgid "libraries" msgstr "" -#: ../../../CHANGELOG:2187 +#: ../../../CHANGELOG.md:2069 msgid "uploads" msgstr "" -#: ../../../CHANGELOG:2189 +#: ../../../CHANGELOG.md:2071 msgid "You can use this UI to quickly search for any object, delete objects in batch, understand where they are coming from etc. This new UI should remove the need to go through Django's admin in the vast majority of cases (but also includes a link to Django's admin when needed)." msgstr "" -#: ../../../CHANGELOG:2194 +#: ../../../CHANGELOG.md:2075 msgid "Artist hiding in the interface" msgstr "" -#: ../../../CHANGELOG:2196 +#: ../../../CHANGELOG.md:2077 msgid "It's now possible for users to hide artists they don't want to see." msgstr "" -#: ../../../CHANGELOG:2198 +#: ../../../CHANGELOG.md:2079 msgid "Content linked to hidden artists will not show up in the interface anymore. Especially:" msgstr "" -#: ../../../CHANGELOG:2200 +#: ../../../CHANGELOG.md:2081 msgid "Hidden artists tracks are removed from the current queue" msgstr "" -#: ../../../CHANGELOG:2201 +#: ../../../CHANGELOG.md:2082 msgid "Starting a playlist will skip tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2202 +#: ../../../CHANGELOG.md:2083 msgid "Recently favorited, recently listened and recently added widgets on the homepage won't include content from hidden artists" msgstr "" -#: ../../../CHANGELOG:2203 +#: ../../../CHANGELOG.md:2084 msgid "Radio suggestions will exclude tracks from hidden artists" msgstr "" -#: ../../../CHANGELOG:2204 +#: ../../../CHANGELOG.md:2085 msgid "Hidden artists won't appear in Subsonic apps" msgstr "" -#: ../../../CHANGELOG:2206 +#: ../../../CHANGELOG.md:2087 msgid "Results linked to hidden artists will continue to show up in search results and their profile page remains accessible." msgstr "" -#: ../../../CHANGELOG:2209 +#: ../../../CHANGELOG.md:2089 msgid "OAuth2 authorization for better integration with third-party apps" msgstr "" -#: ../../../CHANGELOG:2211 +#: ../../../CHANGELOG.md:2091 msgid "Funkwhale now support the OAuth2 authorization and authentication protocol which will allow third-party apps to interact with Funkwhale on behalf of users." msgstr "" -#: ../../../CHANGELOG:2214 +#: ../../../CHANGELOG.md:2094 msgid "This feature makes it possible to build third-party apps that have the same capabilities as Funkwhale's Web UI. The only exception at the moment is for actions that requires special permissions, such as modifying instance settings or moderation (but this will be enabled in a future release)." msgstr "" -#: ../../../CHANGELOG:2219 +#: ../../../CHANGELOG.md:2099 msgid "If you want to start building an app on top of Funkwhale's API, please check-out https://docs.funkwhale.audio/api.html and https://docs.funkwhale.audio/developers/authentication.html." msgstr "" -#: ../../../CHANGELOG:2223 +#: ../../../CHANGELOG.md:2102 msgid "Better error handling and display during import" msgstr "" -#: ../../../CHANGELOG:2225 +#: ../../../CHANGELOG.md:2104 msgid "Funkwhale should now be more resilient to missing tags in imported files, and give you more insights when something goes wrong, including the specific tags that were missing or invalid, and additional debug information to share in your support requests." msgstr "" -#: ../../../CHANGELOG:2229 +#: ../../../CHANGELOG.md:2108 msgid "This information is available in all pages that list uploads, when clicking on the button next to the upload status." msgstr "" -#: ../../../CHANGELOG:2232 +#: ../../../CHANGELOG.md:2110 msgid "Support for S3-compatible storages to store media files" msgstr "" -#: ../../../CHANGELOG:2234 +#: ../../../CHANGELOG.md:2112 msgid "Storing all media files on the Funkwhale server itself may not be possible or desirable in all scenarios. You can now configure Funkwhale to store those files in a S3 bucket instead." msgstr "" -#: ../../../CHANGELOG:2238 +#: ../../../CHANGELOG.md:2116 msgid "Check-out https://docs.funkwhale.audio/admin/external-storages.html if you want to use this feature." msgstr "" -#: ../../../CHANGELOG:2242 +#: ../../../CHANGELOG.md:2119 msgid "Prune library command" msgstr "" -#: ../../../CHANGELOG:2244 +#: ../../../CHANGELOG.md:2121 msgid "Users are often surprised by Funkwhale's tendency to keep track, album and artist metadata even if no associated files exist." msgstr "" -#: ../../../CHANGELOG:2247 -msgid "To help with that, we now offer a ``prune_library`` management command you can run to purge your database from obsolete entries. `Please refer to our documentation for usage instructions <https://docs.funkwhale.audio/admin/commands.html#pruning-library>`__." +#: ../../../CHANGELOG.md:2124 +msgid "To help with that, we now offer a `prune_library` management command you can run to purge your database from obsolete entries. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-library)." msgstr "" -#: ../../../CHANGELOG:2252 +#: ../../../CHANGELOG.md:2127 msgid "Check in-place files command" msgstr "" -#: ../../../CHANGELOG:2254 +#: ../../../CHANGELOG.md:2129 msgid "When using in-place import with a living audio library, you'll quite often rename or remove files from the file system. Unfortunately, Funkwhale keeps a reference to those files in the database, which results in unplayable tracks." msgstr "" -#: ../../../CHANGELOG:2258 -msgid "To help with that, we now offer a ``check_inplace_files`` management command you can run to purge your database from obsolete files. `Please refer to our documentation for usage instructions <https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database>`__." +#: ../../../CHANGELOG.md:2133 +msgid "To help with that, we now offer a `check_inplace_files` management command you can run to purge your database from obsolete files. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database)." msgstr "" -#: ../../../CHANGELOG:2265 +#: ../../../CHANGELOG.md:2138 msgid "Added albums view. Similar to artists view, it's viewable by clicking on the \"Albums\" link on the top bar. (#356)" msgstr "" -#: ../../../CHANGELOG:2266 +#: ../../../CHANGELOG.md:2139 msgid "Allow artists hiding (#701)" msgstr "" -#: ../../../CHANGELOG:2267 +#: ../../../CHANGELOG.md:2140 msgid "Change the document title to display current track information. (#359)" msgstr "" -#: ../../../CHANGELOG:2268 +#: ../../../CHANGELOG.md:2141 msgid "Display a confirmation dialog when adding duplicate songs to a playlist (#784)" msgstr "" -#: ../../../CHANGELOG:2269 +#: ../../../CHANGELOG.md:2142 msgid "Improved error handling and display during import (#252, #718, #583, #501, #544)" msgstr "" -#: ../../../CHANGELOG:2270 +#: ../../../CHANGELOG.md:2143 msgid "Support embedding full artist discographies (#747)" msgstr "" -#: ../../../CHANGELOG:2271 +#: ../../../CHANGELOG.md:2144 msgid "Support metadata update on tracks, albums and artists and broadcast those on the federation (#689)" msgstr "" -#: ../../../CHANGELOG:2272 +#: ../../../CHANGELOG.md:2145 msgid "Support OAuth2 authorization for better integration with third-party apps (#752)" msgstr "" -#: ../../../CHANGELOG:2273 +#: ../../../CHANGELOG.md:2146 msgid "Support S3-compatible storages for media files (#565)" msgstr "" -#: ../../../CHANGELOG:2278 +#: ../../../CHANGELOG.md:2150 msgid "[Experimental] Added a new \"Similar\" radio based on users history (suggested by @gordon)" msgstr "" -#: ../../../CHANGELOG:2279 +#: ../../../CHANGELOG.md:2151 msgid "Added a \"load more\" button on artist pages to load more tracks/albums (#719)" msgstr "" -#: ../../../CHANGELOG:2280 +#: ../../../CHANGELOG.md:2152 msgid "Added a `check_inplace_files` management command to remove purge the database from references to in-place imported files that don't exist on disk anymore (#781)" msgstr "" -#: ../../../CHANGELOG:2281 +#: ../../../CHANGELOG.md:2153 msgid "Added a prune_library management command to remove obsolete metadata from the database (#777)" msgstr "" -#: ../../../CHANGELOG:2282 +#: ../../../CHANGELOG.md:2154 msgid "Added admin options to disable login for users, ensure related content is deleted when deleting a user account (#809)" msgstr "" -#: ../../../CHANGELOG:2283 +#: ../../../CHANGELOG.md:2155 msgid "Added standardized translation context for all strings in the frontend to give accurate hints to translators." msgstr "" -#: ../../../CHANGELOG:2284 -msgid "Added twitter:* meta tags to detect tracks and albums players automatically on more sites (#578) Improved responsiveness of embedded player" +#: ../../../CHANGELOG.md:2156 +msgid "Added twitter:\\* meta tags to detect tracks and albums players automatically on more sites (#578) Improved responsiveness of embedded player" msgstr "" -#: ../../../CHANGELOG:2286 +#: ../../../CHANGELOG.md:2158 msgid "Advertise the list of supported upload extensions in the Nodeinfo endpoint (#808)" msgstr "" -#: ../../../CHANGELOG:2287 +#: ../../../CHANGELOG.md:2159 msgid "Better handling of follow/accept messages to avoid and recover from desync between instances (#830)" msgstr "" -#: ../../../CHANGELOG:2288 +#: ../../../CHANGELOG.md:2160 msgid "Better workflow for connecting to another instance (#715)" msgstr "" -#: ../../../CHANGELOG:2290 +#: ../../../CHANGELOG.md:2162 msgid "Changing the instance used is now better integrated in the App, and it is checked that the chosen instance and the suggested instances are valid and running Funkwhale servers." msgstr "" -#: ../../../CHANGELOG:2291 +#: ../../../CHANGELOG.md:2164 msgid "Bumped dependencies to latest versions (#815)" msgstr "" -#: ../../../CHANGELOG:2292 +#: ../../../CHANGELOG.md:2165 msgid "Descriptions will now be shown underneath user libraries (#768)" msgstr "" -#: ../../../CHANGELOG:2293 +#: ../../../CHANGELOG.md:2166 msgid "Don't store unhandled ActivityPub messages in database (#776)" msgstr "" -#: ../../../CHANGELOG:2294 +#: ../../../CHANGELOG.md:2167 msgid "Enhanced the design of the embed wizard. (!619)" msgstr "" -#: ../../../CHANGELOG:2295 +#: ../../../CHANGELOG.md:2168 msgid "Ensure the footer always stays at the bottom of the page" msgstr "" -#: ../../../CHANGELOG:2296 +#: ../../../CHANGELOG.md:2169 msgid "Expose an instance-level actor (service@domain) in nodeinfo endpoint (#689)" msgstr "" -#: ../../../CHANGELOG:2297 +#: ../../../CHANGELOG.md:2170 msgid "Improved readability of logo (#385)" msgstr "" -#: ../../../CHANGELOG:2298 +#: ../../../CHANGELOG.md:2171 msgid "Keep persistent connections to the database instead of recreating a new one for each request" msgstr "" -#: ../../../CHANGELOG:2299 +#: ../../../CHANGELOG.md:2172 msgid "Labels for privacy levels are now consistently grabbed from a common source instead of being hardcoded every time they are needed." msgstr "" -#: ../../../CHANGELOG:2300 +#: ../../../CHANGELOG.md:2173 msgid "Merged artist/album buttons with title text on artist and album pages (#725)" msgstr "" -#: ../../../CHANGELOG:2301 +#: ../../../CHANGELOG.md:2174 msgid "Now honor maxBitrate parameter in Subsonic API (#802)" msgstr "" -#: ../../../CHANGELOG:2302 +#: ../../../CHANGELOG.md:2175 msgid "Preload next track in queue (#572)" msgstr "" -#: ../../../CHANGELOG:2303 +#: ../../../CHANGELOG.md:2176 msgid "Reduced app size for regular users by moving admin-related code in a dedicated chunk (#805)" msgstr "" -#: ../../../CHANGELOG:2304 +#: ../../../CHANGELOG.md:2177 msgid "Removed broken/instable lyrics feature (#799)" msgstr "" -#: ../../../CHANGELOG:2305 +#: ../../../CHANGELOG.md:2178 msgid "Show remaining storage space during import and prevent file upload if not enough space is remaining (#550)" msgstr "" -#: ../../../CHANGELOG:2306 +#: ../../../CHANGELOG.md:2179 msgid "The buttons displaying an icon now always show a little divider between the icon and the text. (!620)" msgstr "" -#: ../../../CHANGELOG:2307 +#: ../../../CHANGELOG.md:2180 msgid "Use attributedTo instead of actor in library ActivityPub payload (#619)" msgstr "" -#: ../../../CHANGELOG:2308 +#: ../../../CHANGELOG.md:2181 msgid "Use network/depends_on instead of links in docker-compose.yml (!716)" msgstr "" -#: ../../../CHANGELOG:2313 +#: ../../../CHANGELOG.md:2185 msgid "Add missing command from contributing file (#754)" msgstr "" -#: ../../../CHANGELOG:2314 +#: ../../../CHANGELOG.md:2186 msgid "Add required envvar for dev environment (!668)" msgstr "" -#: ../../../CHANGELOG:2315 +#: ../../../CHANGELOG.md:2187 msgid "Added env variable to set AWS region and signature version to serve media without proxy (#826)" msgstr "" -#: ../../../CHANGELOG:2316 +#: ../../../CHANGELOG.md:2188 msgid "Allow users with dots in their usernames to request a subsonic password (#798)" msgstr "" -#: ../../../CHANGELOG:2317 +#: ../../../CHANGELOG.md:2189 msgid "Better handling of featuring/multi-artist tracks tagged with MusicBrainz (#782)" msgstr "" -#: ../../../CHANGELOG:2318 +#: ../../../CHANGELOG.md:2190 msgid "Do not consider tracks as duplicates during import if they have different positions (#740)" msgstr "" -#: ../../../CHANGELOG:2319 +#: ../../../CHANGELOG.md:2191 msgid "Ensure all our ActivityPub fetches are authenticated (#758)" msgstr "" -#: ../../../CHANGELOG:2320 +#: ../../../CHANGELOG.md:2192 msgid "Ensure correct track duration and playable status when browsing radios (#812)" msgstr "" -#: ../../../CHANGELOG:2321 +#: ../../../CHANGELOG.md:2193 msgid "Fixed alignment/size issue with some buttons (#702)" msgstr "" -#: ../../../CHANGELOG:2322 +#: ../../../CHANGELOG.md:2194 msgid "Fixed an encoding issue with instance name on about page (#828)" msgstr "" -#: ../../../CHANGELOG:2323 +#: ../../../CHANGELOG.md:2195 msgid "Fixed cover not showing in queue/player when playing tracks from \"albums\" tab (#795)" msgstr "" -#: ../../../CHANGELOG:2324 +#: ../../../CHANGELOG.md:2196 msgid "Fixed crashing upload processing on invalid date format (#718)" msgstr "" -#: ../../../CHANGELOG:2325 +#: ../../../CHANGELOG.md:2197 msgid "Fixed dev command for fake data creation (!664)" msgstr "" -#: ../../../CHANGELOG:2326 +#: ../../../CHANGELOG.md:2198 msgid "Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824)" msgstr "" -#: ../../../CHANGELOG:2327 +#: ../../../CHANGELOG.md:2199 msgid "Fixed invalid required fields in Upload django's admin (#819)" msgstr "" -#: ../../../CHANGELOG:2328 +#: ../../../CHANGELOG.md:2200 msgid "Fixed issue with querying the albums api endpoint (#356)" msgstr "" -#: ../../../CHANGELOG:2329 +#: ../../../CHANGELOG.md:2201 msgid "Fixed non-transparent background for volume range on Firefox (#722)" msgstr "" -#: ../../../CHANGELOG:2330 +#: ../../../CHANGELOG.md:2202 msgid "Fixed overflowing input on account detail page (#791)" msgstr "" -#: ../../../CHANGELOG:2331 +#: ../../../CHANGELOG.md:2203 msgid "Fixed unplayable radios for anonymous users (#563)" msgstr "" -#: ../../../CHANGELOG:2332 +#: ../../../CHANGELOG.md:2204 msgid "Prevent skipping on file import if album_mbid is different (#772)" msgstr "" -#: ../../../CHANGELOG:2333 +#: ../../../CHANGELOG.md:2205 msgid "Use proper site name/domain in emails (#806)" msgstr "" -#: ../../../CHANGELOG:2334 +#: ../../../CHANGELOG.md:2206 msgid "Width of filter menus for radios has been set to stop text from overlapping the borders" msgstr "" -#: ../../../CHANGELOG:2339 +#: ../../../CHANGELOG.md:2210 msgid "Document how to use Redis over unix sockets (#770)" msgstr "" -#: ../../../CHANGELOG:2341 +#: ../../../CHANGELOG.md:2212 msgid "Contributors to this release (committers and translators):" msgstr "" -#: ../../../CHANGELOG:2343 +#: ../../../CHANGELOG.md:2214 msgid "Ale London" msgstr "" -#: ../../../CHANGELOG:2344 +#: ../../../CHANGELOG.md:2215 msgid "Alexander" msgstr "" -#: ../../../CHANGELOG:2345 +#: ../../../CHANGELOG.md:2216 msgid "Ben Finney" msgstr "" -#: ../../../CHANGELOG:2348 +#: ../../../CHANGELOG.md:2219 msgid "Damien Nicolas" msgstr "" -#: ../../../CHANGELOG:2351 +#: ../../../CHANGELOG.md:2222 msgid "Elza Gelez" msgstr "" -#: ../../../CHANGELOG:2352 +#: ../../../CHANGELOG.md:2223 msgid "gerry_the_hat" msgstr "" -#: ../../../CHANGELOG:2353 +#: ../../../CHANGELOG.md:2224 msgid "gordon" msgstr "" -#: ../../../CHANGELOG:2355 +#: ../../../CHANGELOG.md:2226 msgid "jake" msgstr "" -#: ../../../CHANGELOG:2356 +#: ../../../CHANGELOG.md:2227 msgid "Jee" msgstr "" -#: ../../../CHANGELOG:2360 +#: ../../../CHANGELOG.md:2231 msgid "Pierrick" msgstr "" -#: ../../../CHANGELOG:2361 +#: ../../../CHANGELOG.md:2232 msgid "Qasim Ali" msgstr "" -#: ../../../CHANGELOG:2366 +#: ../../../CHANGELOG.md:2237 msgid "Thomas Brockmöller" msgstr "" -#: ../../../CHANGELOG:2367 +#: ../../../CHANGELOG.md:2238 msgid "Tixie" msgstr "" -#: ../../../CHANGELOG:2368 +#: ../../../CHANGELOG.md:2239 msgid "Vierkantor" msgstr "" -#: ../../../CHANGELOG:2369 +#: ../../../CHANGELOG.md:2240 msgid "Von" msgstr "" -#: ../../../CHANGELOG:2370 +#: ../../../CHANGELOG.md:2241 msgid "Zach Halasz" msgstr "" -#: ../../../CHANGELOG:2373 +#: ../../../CHANGELOG.md:2243 msgid "0.18.3 (2019-03-21)" msgstr "" -#: ../../../CHANGELOG:2380 +#: ../../../CHANGELOG.md:2247 msgid "Avoid mixed content when deploying mono-container behind proxy [Manual action required]" msgstr "" -#: ../../../CHANGELOG:2382 -msgid "*You are only concerned if you use the mono-container docker deployment behind a reverse proxy*" +#: ../../../CHANGELOG.md:2249 +msgid "_You are only concerned if you use the mono-container docker deployment behind a reverse proxy_" msgstr "" -#: ../../../CHANGELOG:2384 -msgid "Because of `an issue in our mono-container configuration <https://github.com/thetarkus/docker-funkwhale/issues/19>`_, users deploying Funkwhale via docker using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) when browsing the Web UI." +#: ../../../CHANGELOG.md:2251 +msgid "Because of [an issue in our mono-container configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), users deploying Funkwhale via docker using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) when browsing the Web UI." msgstr "" -#: ../../../CHANGELOG:2388 -msgid "This is fixed in this release, but on existing deployments, you'll need to add ``NESTED_PROXY=1`` in your container environment (either in your ``.env`` file, or via your container management tool), then recreate your funkwhale container." +#: ../../../CHANGELOG.md:2255 +msgid "This is fixed in this release, but on existing deployments, you'll need to add `NESTED_PROXY=1` in your container environment (either in your `.env` file, or via your container management tool), then recreate your funkwhale container." msgstr "" -#: ../../../CHANGELOG:2394 +#: ../../../CHANGELOG.md:2260 msgid "Added title on hover for truncated content (#766)" msgstr "" -#: ../../../CHANGELOG:2395 +#: ../../../CHANGELOG.md:2261 msgid "Ask for confirmation before leaving upload page if there is a an upload in process (#630)" msgstr "" -#: ../../../CHANGELOG:2396 +#: ../../../CHANGELOG.md:2262 msgid "Exclude in-place imported files from quota computation (#570)" msgstr "" -#: ../../../CHANGELOG:2397 +#: ../../../CHANGELOG.md:2263 msgid "Truncate filename in library file table to ensure correct display of the table. (#735)" msgstr "" -#: ../../../CHANGELOG:2402 +#: ../../../CHANGELOG.md:2267 msgid "Avoid mixed content when deploying mono-container behind HTTPS proxy (thetarkus/docker-funkwhale#19)" msgstr "" -#: ../../../CHANGELOG:2403 +#: ../../../CHANGELOG.md:2268 msgid "Display new notifications immediately on notifications page (#729)" msgstr "" -#: ../../../CHANGELOG:2404 +#: ../../../CHANGELOG.md:2269 msgid "Ensure cover art from uploaded files is picked up properly on existing albums (#757)" msgstr "" -#: ../../../CHANGELOG:2405 +#: ../../../CHANGELOG.md:2270 msgid "Fixed a crash when federating a track with unspecified position" msgstr "" -#: ../../../CHANGELOG:2406 +#: ../../../CHANGELOG.md:2271 msgid "Fixed broken Activity and Actor modules in django admin (#767)" msgstr "" -#: ../../../CHANGELOG:2407 +#: ../../../CHANGELOG.md:2272 msgid "Fixed broken sample apache configuration (#764)" msgstr "" -#: ../../../CHANGELOG:2408 +#: ../../../CHANGELOG.md:2273 msgid "Fixed constant and unpredictable reordering during file upload (#716)" msgstr "" -#: ../../../CHANGELOG:2409 +#: ../../../CHANGELOG.md:2274 msgid "Fixed delivering of local activities causing unintended side effects, such as rollbacking changes (#737)" msgstr "" -#: ../../../CHANGELOG:2410 +#: ../../../CHANGELOG.md:2275 msgid "Fixed escaping issues in translated strings (#652)" msgstr "" -#: ../../../CHANGELOG:2411 +#: ../../../CHANGELOG.md:2276 msgid "Fixed saving moderation policy when clicking on \"Cancel\" (#751)" msgstr "" -#: ../../../CHANGELOG:2412 +#: ../../../CHANGELOG.md:2277 msgid "i18n: Update page title when changing the App's language. (#511)" msgstr "" -#: ../../../CHANGELOG:2413 +#: ../../../CHANGELOG.md:2278 msgid "Include disc number in Subsonic responses (#765)" msgstr "" -#: ../../../CHANGELOG:2414 +#: ../../../CHANGELOG.md:2279 msgid "Do not send notification when rejecting a follow on a local library (#743)" msgstr "" -#: ../../../CHANGELOG:2419 +#: ../../../CHANGELOG.md:2283 msgid "Added documentation on mono-container docker upgrade (#713)" msgstr "" -#: ../../../CHANGELOG:2420 +#: ../../../CHANGELOG.md:2284 msgid "Added documentation to set up let's encrypt certificate (#745)" msgstr "" -#: ../../../CHANGELOG:2424 +#: ../../../CHANGELOG.md:2286 msgid "0.18.2 (2019-02-13)" msgstr "" -#: ../../../CHANGELOG:2431 +#: ../../../CHANGELOG.md:2292 msgid "Added a 'fix_federation_ids' management command to deal with protocol/domain issues in federation IDs after deployments (#706)" msgstr "" -#: ../../../CHANGELOG:2433 +#: ../../../CHANGELOG.md:2294 msgid "Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705)" msgstr "" -#: ../../../CHANGELOG:2438 +#: ../../../CHANGELOG.md:2298 msgid "Downgraded channels dependency to 2.1.6 to fix denied uploads (#697)" msgstr "" -#: ../../../CHANGELOG:2439 +#: ../../../CHANGELOG.md:2299 msgid "Fixed cards display issues on medium/small screens (#707)" msgstr "" -#: ../../../CHANGELOG:2440 +#: ../../../CHANGELOG.md:2300 msgid "Fixed Embed component name that could lead to issue when developping on OSX (#696)" msgstr "" -#: ../../../CHANGELOG:2441 +#: ../../../CHANGELOG.md:2301 msgid "Fixed resizing issues for album cards on artist pages (#694)" msgstr "" -#: ../../../CHANGELOG:2445 +#: ../../../CHANGELOG.md:2303 msgid "0.18.1 (2019-01-29)" msgstr "" -#: ../../../CHANGELOG:2452 +#: ../../../CHANGELOG.md:2307 msgid "Fix Gzip compression to avoid BREACH exploit [security] [manual action required]" msgstr "" -#: ../../../CHANGELOG:2454 +#: ../../../CHANGELOG.md:2309 msgid "In the 0.18 release, we've enabled Gzip compression by default for various content types, including HTML and JSON. Unfortunately, enabling Gzip compression on such content types could make BREACH-type exploits possible." msgstr "" -#: ../../../CHANGELOG:2458 -msgid "We've removed the risky content-types from our nginx template files, to ensure new instances are safe, however, if you already have an instance, you need to double check that your host nginx virtualhost do not include the following values for the ``gzip_types`` settings::" +#: ../../../CHANGELOG.md:2313 +msgid "We've removed the risky content-types from our nginx template files, to ensure new instances are safe, however, if you already have an instance, you need to double check that your host nginx virtualhost do not include the following values for the `gzip_types` settings:" msgstr "" -#: ../../../CHANGELOG:2472 -msgid "For convenience, you can also replace the whole setting with the following snippet::" +#: ../../../CHANGELOG.md:2329 +msgid "For convenience, you can also replace the whole setting with the following snippet:" msgstr "" -#: ../../../CHANGELOG:2493 +#: ../../../CHANGELOG.md:2352 msgid "Many thanks to @jibec for the report!" msgstr "" -#: ../../../CHANGELOG:2496 +#: ../../../CHANGELOG.md:2354 msgid "Fix Apache configuration file for 0.18 [manual action required]" msgstr "" -#: ../../../CHANGELOG:2498 +#: ../../../CHANGELOG.md:2356 msgid "The way front is served has changed since 0.18. The Apache configuration can't serve 0.18 properly, leading to blank screens." msgstr "" -#: ../../../CHANGELOG:2500 -msgid "If you are on an Apache setup, you will have to replace the `<Location \"/api\">` block with the following::" +#: ../../../CHANGELOG.md:2358 +msgid "If you are on an Apache setup, you will have to replace the `<Location \"/api\">` block with the following:" msgstr "" -#: ../../../CHANGELOG:2510 -msgid "And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way::" +#: ../../../CHANGELOG.md:2370 +msgid "And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way:" msgstr "" -#: ../../../CHANGELOG:2521 -msgid "In case you are using custom css and theming, you also need to match this block::" +#: ../../../CHANGELOG.md:2383 +msgid "In case you are using custom css and theming, you also need to match this block:" msgstr "" -#: ../../../CHANGELOG:2532 +#: ../../../CHANGELOG.md:2395 msgid "Added name attributes on all inputs to improve UX, especially with password managers (#686)" msgstr "" -#: ../../../CHANGELOG:2533 +#: ../../../CHANGELOG.md:2396 msgid "Disable makemigrations in production and misleading message when running migrate (#685)" msgstr "" -#: ../../../CHANGELOG:2534 +#: ../../../CHANGELOG.md:2397 msgid "Display progress during file upload" msgstr "" -#: ../../../CHANGELOG:2535 +#: ../../../CHANGELOG.md:2398 msgid "Hide pagination when there is only one page of results (#681)" msgstr "" -#: ../../../CHANGELOG:2536 +#: ../../../CHANGELOG.md:2399 msgid "Include shared/public playlists in Subsonic API responses (#684)" msgstr "" -#: ../../../CHANGELOG:2537 +#: ../../../CHANGELOG.md:2400 msgid "Use proper locale for date-related/duration strings (#670)" msgstr "" -#: ../../../CHANGELOG:2542 +#: ../../../CHANGELOG.md:2404 msgid "Fix transcoding of in-place imported tracks (#688)" msgstr "" -#: ../../../CHANGELOG:2543 +#: ../../../CHANGELOG.md:2405 msgid "Fixed celery worker defaulting to development settings instead of production" msgstr "" -#: ../../../CHANGELOG:2544 +#: ../../../CHANGELOG.md:2406 msgid "Fixed crashing Django admin when loading track detail page (#666)" msgstr "" -#: ../../../CHANGELOG:2545 +#: ../../../CHANGELOG.md:2407 msgid "Fixed list icon alignment on landing page (#668)" msgstr "" -#: ../../../CHANGELOG:2546 +#: ../../../CHANGELOG.md:2408 msgid "Fixed overescaping issue in notifications and album page (#676)" msgstr "" -#: ../../../CHANGELOG:2547 +#: ../../../CHANGELOG.md:2409 msgid "Fixed wrong number of affected elements in bulk action modal (#683)" msgstr "" -#: ../../../CHANGELOG:2548 +#: ../../../CHANGELOG.md:2410 msgid "Fixed wrong URL in documentation for funkwhale_proxy.conf file when deploying using Docker" msgstr "" -#: ../../../CHANGELOG:2549 +#: ../../../CHANGELOG.md:2411 msgid "Make Apache configuration file work with 0.18 changes (#667)" msgstr "" -#: ../../../CHANGELOG:2550 +#: ../../../CHANGELOG.md:2412 msgid "Removed potential BREACH exploit because of Gzip compression (#678)" msgstr "" -#: ../../../CHANGELOG:2551 +#: ../../../CHANGELOG.md:2413 msgid "Upgraded kombu to fix an incompatibility with redis>=3" msgstr "" -#: ../../../CHANGELOG:2556 +#: ../../../CHANGELOG.md:2417 msgid "Added user upload documentation at https://docs.funkwhale.audio/users/upload.html" msgstr "" -#: ../../../CHANGELOG:2560 +#: ../../../CHANGELOG.md:2419 msgid "0.18 \"Naomi\" (2019-01-22)" msgstr "" -#: ../../../CHANGELOG:2562 +#: ../../../CHANGELOG.md:2421 msgid "This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale. Her positivity, love and support have been incredibly helpful and helped shape the project as you can enjoy it today. Thank you so much Naomi <3" msgstr "" -#: ../../../CHANGELOG:2566 +#: ../../../CHANGELOG.md:2425 msgid "Many thanks to the dozens of people that contributed to this release: translators, developers, bug hunters, admins and backers. You made it possible!" msgstr "" -#: ../../../CHANGELOG:2569 -msgid "Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html, ensure you also execute the instructions marked with ``[manual action required]`` and ``[manual action suggested]``." +#: ../../../CHANGELOG.md:2428 +msgid "Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html, ensure you also execute the instructions marked with `[manual action required]` and `[manual action suggested]`." msgstr "" -#: ../../../CHANGELOG:2573 -msgid "See ``Full changelog`` below for an exhaustive list of changes!" +#: ../../../CHANGELOG.md:2431 +msgid "See `Full changelog` below for an exhaustive list of changes!" msgstr "" -#: ../../../CHANGELOG:2576 +#: ../../../CHANGELOG.md:2433 msgid "Audio transcoding is back!" msgstr "" -#: ../../../CHANGELOG:2578 +#: ../../../CHANGELOG.md:2435 msgid "After removal of our first, buggy transcoding implementation, we're proud to announce that this feature is back. It is enabled by default, and can be configured/disabled in your instance settings!" msgstr "" -#: ../../../CHANGELOG:2582 +#: ../../../CHANGELOG.md:2439 msgid "This feature works in the browser, with federated/non-federated tracks and using Subsonic clients. Transcoded tracks are generated on the fly, and cached for a configurable amount of time, to reduce the load on the server." msgstr "" -#: ../../../CHANGELOG:2588 +#: ../../../CHANGELOG.md:2443 msgid "Licensing and copyright information" msgstr "" -#: ../../../CHANGELOG:2590 +#: ../../../CHANGELOG.md:2445 msgid "Funkwhale is now able to parse copyright and license data from file and store this information. Apart from displaying it on each track detail page, no additional behaviour is currently implemented to use this new data, but this will change in future releases." msgstr "" -#: ../../../CHANGELOG:2595 +#: ../../../CHANGELOG.md:2450 msgid "License and copyright data is also broadcasted over federation." msgstr "" -#: ../../../CHANGELOG:2597 -msgid "License matching is done on the content of the ``License`` tag in the files, with a fallback on the ``Copyright`` tag." +#: ../../../CHANGELOG.md:2452 +msgid "License matching is done on the content of the `License` tag in the files, with a fallback on the `Copyright` tag." msgstr "" -#: ../../../CHANGELOG:2600 +#: ../../../CHANGELOG.md:2455 msgid "Funkwhale will successfully extract licensing data for the following licenses:" msgstr "" -#: ../../../CHANGELOG:2602 +#: ../../../CHANGELOG.md:2457 msgid "Creative Commons 0 (Public Domain)" msgstr "" -#: ../../../CHANGELOG:2603 +#: ../../../CHANGELOG.md:2458 msgid "Creative Commons 1.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2604 +#: ../../../CHANGELOG.md:2459 msgid "Creative Commons 2.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2605 +#: ../../../CHANGELOG.md:2460 msgid "Creative Commons 2.5 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2606 +#: ../../../CHANGELOG.md:2461 msgid "Creative Commons 3.0 (All declinations and countries)" msgstr "" -#: ../../../CHANGELOG:2607 +#: ../../../CHANGELOG.md:2462 msgid "Creative Commons 4.0 (All declinations)" msgstr "" -#: ../../../CHANGELOG:2609 +#: ../../../CHANGELOG.md:2464 msgid "Support for other licenses such as Art Libre or WTFPL will be added in future releases." msgstr "" -#: ../../../CHANGELOG:2613 +#: ../../../CHANGELOG.md:2466 msgid "Instance-level moderation tools" msgstr "" -#: ../../../CHANGELOG:2615 +#: ../../../CHANGELOG.md:2468 msgid "This release includes a first set of moderation tools that will give more control to admins about the way their instance federates with other instance and accounts on the network. Using these tools, it's now possible to:" msgstr "" -#: ../../../CHANGELOG:2619 +#: ../../../CHANGELOG.md:2472 msgid "Browse known accounts and domains, and associated data (storage size, software version, etc.)" msgstr "" -#: ../../../CHANGELOG:2620 +#: ../../../CHANGELOG.md:2473 msgid "Purge data belonging to given accounts and domains" msgstr "" -#: ../../../CHANGELOG:2621 +#: ../../../CHANGELOG.md:2474 msgid "Block or partially restrict interactions with any account or domain" msgstr "" -#: ../../../CHANGELOG:2623 +#: ../../../CHANGELOG.md:2476 msgid "All those features are usable using a brand new \"moderation\" permission, meaning you can appoint one or multiple moderators to help with this task." msgstr "" -#: ../../../CHANGELOG:2626 +#: ../../../CHANGELOG.md:2479 msgid "I'd like to thank all Mastodon contributors, because some of the these tools are heavily inspired from what's being done in Mastodon. Thank you so much!" msgstr "" -#: ../../../CHANGELOG:2631 +#: ../../../CHANGELOG.md:2482 msgid "Iframe widget to embed public tracks and albums [manual action required]" msgstr "" -#: ../../../CHANGELOG:2633 +#: ../../../CHANGELOG.md:2484 msgid "Funkwhale now supports embedding a lightweight audio player on external websites for album and tracks that are available in public libraries. Important pages, such as artist, album and track pages also include OpenGraph tags that will enable previews on compatible apps (like sharing a Funkwhale track link on Mastodon or Twitter)." msgstr "" -#: ../../../CHANGELOG:2639 +#: ../../../CHANGELOG.md:2490 msgid "To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have to modify your nginx configuration when upgrading to keep your instance working." msgstr "" -#: ../../../CHANGELOG:2642 -msgid "**On docker setups**, edit your ``/srv/funkwhale/nginx/funkwhale.template`` and replace the ``location /api/`` and `location /` blocks by the following snippets::" +#: ../../../CHANGELOG.md:2493 +msgid "**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template` and replace the `location /api/` and `location /` blocks by the following snippets:" msgstr "" -#: ../../../CHANGELOG:2656 +#: ../../../CHANGELOG.md:2509 msgid "The change of configuration will be picked when restarting your nginx container." msgstr "" -#: ../../../CHANGELOG:2658 -msgid "**On non-docker setups**, edit your ``/etc/nginx/sites-available/funkwhale.conf`` file, and replace the ``location /api/`` and `location /` blocks by the following snippets::" +#: ../../../CHANGELOG.md:2511 +msgid "**On non-docker setups**, edit your `/etc/nginx/sites-available/funkwhale.conf` file, and replace the `location /api/` and `location /` blocks by the following snippets:" msgstr "" -#: ../../../CHANGELOG:2673 -msgid "Replace ``${FUNKWHALE_FRONTEND_PATH}`` by the corresponding variable from your .env file, which should be ``/srv/funkwhale/front/dist`` by default, then reload your nginx process with ``sudo systemctl reload nginx``." +#: ../../../CHANGELOG.md:2527 +msgid "Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from your .env file, which should be `/srv/funkwhale/front/dist` by default, then reload your nginx process with `sudo systemctl reload nginx`." msgstr "" -#: ../../../CHANGELOG:2679 +#: ../../../CHANGELOG.md:2531 msgid "Alternative docker deployment method" msgstr "" -#: ../../../CHANGELOG:2681 +#: ../../../CHANGELOG.md:2533 msgid "Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale, we're now able to provide an alternative and easier Docker deployment method!" msgstr "" -#: ../../../CHANGELOG:2684 +#: ../../../CHANGELOG.md:2536 msgid "In contrast with our current, multi-container offer, this method integrates all Funkwhale processes and services (database, redis, etc.) into a single, easier to deploy container." msgstr "" -#: ../../../CHANGELOG:2687 +#: ../../../CHANGELOG.md:2539 msgid "Both methods will coexist in parallel, as each one has pros and cons. You can learn more about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html!" msgstr "" -#: ../../../CHANGELOG:2691 +#: ../../../CHANGELOG.md:2542 msgid "Automatically load .env file" msgstr "" -#: ../../../CHANGELOG:2693 -msgid "On non-docker deployments, earlier versions required you to source the config/.env file before launching any Funkwhale command, with ``export $(cat config/.env | grep -v ^# | xargs)`` This led to more complex and error prone deployment / setup." +#: ../../../CHANGELOG.md:2544 +msgid "On non-docker deployments, earlier versions required you to source the config/.env file before launching any Funkwhale command, with `export $(cat config/.env | grep -v ^# | xargs)` This led to more complex and error prone deployment / setup." msgstr "" -#: ../../../CHANGELOG:2697 +#: ../../../CHANGELOG.md:2548 msgid "This is not the case anymore, and Funkwhale will automatically load this file if it's available." msgstr "" -#: ../../../CHANGELOG:2701 +#: ../../../CHANGELOG.md:2550 msgid "Delete pre 0.17 federated tracks [manual action suggested]" msgstr "" -#: ../../../CHANGELOG:2703 +#: ../../../CHANGELOG.md:2552 msgid "If you were using Funkwhale before the 0.17 release and federated with other instances, it's possible that you still have some unplayable federated files in the database." msgstr "" -#: ../../../CHANGELOG:2706 +#: ../../../CHANGELOG.md:2555 msgid "To purge the database of those entries, you can run the following command:" msgstr "" -#: ../../../CHANGELOG:2708 -#: ../../../CHANGELOG:3259 -#: ../../../CHANGELOG:3282 -msgid "On docker setups::" -msgstr "" - -#: ../../../CHANGELOG:2712 -#: ../../../CHANGELOG:3263 -#: ../../../CHANGELOG:3286 -msgid "On non-docker setups::" -msgstr "" - -#: ../../../CHANGELOG:2718 -msgid "Enable gzip compression [manual action suggested]" -msgstr "" - -#: ../../../CHANGELOG:2720 -msgid "Gzip compression will be enabled on new instances by default and will reduce the amount of bandwidth consumed by your instance." -msgstr "" - -#: ../../../CHANGELOG:2723 -msgid "If you want to benefit from gzip compression on your instance, edit your reverse proxy virtualhost file (located at ``/etc/nginx/sites-available/funkwhale.conf``) and add the following snippet in the server block, then reload your nginx server::" -msgstr "" - -#: ../../../CHANGELOG:2759 -msgid "Full changelog" -msgstr "" - -#: ../../../CHANGELOG:2763 -msgid "Allow embedding of albums and tracks available in public libraries via an <iframe> (#578)" -msgstr "" - -#: ../../../CHANGELOG:2764 -msgid "Audio transcoding is back! (#272)" -msgstr "" - -#: ../../../CHANGELOG:2765 -msgid "First set of instance level moderation tools (#580, !521)" -msgstr "" - -#: ../../../CHANGELOG:2766 -msgid "Store licensing and copyright information from file metadata, if available (#308)" -msgstr "" - -#: ../../../CHANGELOG:2771 -msgid "Add UI elements for multi-disc albums (#631)" -msgstr "" - -#: ../../../CHANGELOG:2772 -msgid "Added alternative funkwhale/all-in-one docker image (#614)" -msgstr "" - -#: ../../../CHANGELOG:2773 -msgid "Broadcast library updates (name, description, visibility) over federation" -msgstr "" - -#: ../../../CHANGELOG:2774 -msgid "Based Docker image on alpine to have a smaller (and faster to build) image" -msgstr "" - -#: ../../../CHANGELOG:2775 -msgid "Improved front-end performance by stripping unused dependencies, reducing bundle size and enabling gzip compression" -msgstr "" - -#: ../../../CHANGELOG:2777 -msgid "Improved accessibility by using main/section/nav tags and aria-labels in most critical places (#612)" -msgstr "" - -#: ../../../CHANGELOG:2778 -msgid "The progress bar in the player now display loading state / buffer loading (#586)" -msgstr "" - -#: ../../../CHANGELOG:2779 -msgid "Added \"type: funkwhale\" and \"funkwhale-version\" in Subsonic responses (#573)" -msgstr "" - -#: ../../../CHANGELOG:2780 -msgid "Documented keyboard shortcuts, list is now available by pressing \"h\" or in the footer (#611)" -msgstr "" - -#: ../../../CHANGELOG:2781 -msgid "Documented which Subsonic endpoints are implemented (#575)" -msgstr "" - -#: ../../../CHANGELOG:2782 -msgid "Hide invitation code field during signup when it's not required (#410)" -msgstr "" - -#: ../../../CHANGELOG:2783 -msgid "Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present" -msgstr "" - -#: ../../../CHANGELOG:2784 -msgid "Improved keyboard accessibility on player, queue and various controls (#576)" -msgstr "" - -#: ../../../CHANGELOG:2785 -msgid "Improved performance when listing playable tracks, albums and artists" -msgstr "" - -#: ../../../CHANGELOG:2786 -msgid "Increased default upload limit from 30 to 100MB (#654)" -msgstr "" - -#: ../../../CHANGELOG:2787 -msgid "Load env file in config/.env automatically to avoid sourcing it by hand (#626)" -msgstr "" - -#: ../../../CHANGELOG:2788 -msgid "More resilient date parsing during audio import, will not crash anymore on invalid dates (#622)" -msgstr "" - -#: ../../../CHANGELOG:2790 -msgid "Now start radios immediately, skipping any existing tracks in queue (#585)" -msgstr "" - -#: ../../../CHANGELOG:2791 -msgid "Officially support connecting to a password protected redis server, with the redis://:password@localhost:6379/0 scheme (#640)" -msgstr "" - -#: ../../../CHANGELOG:2793 -msgid "Performance improvement when fetching favorites, down to a single, small http request" -msgstr "" - -#: ../../../CHANGELOG:2794 -msgid "Removed \"Activity\" page, since all the data is available on the \"Browse\" page (#600)" -msgstr "" - -#: ../../../CHANGELOG:2795 -msgid "Removed the need to specify the DJANGO_ALLOWED_HOSTS variable" -msgstr "" - -#: ../../../CHANGELOG:2796 -msgid "Restructured the footer, added useful links and removed unused content" -msgstr "" - -#: ../../../CHANGELOG:2797 -msgid "Show short entries first in search results to improve UX" -msgstr "" - -#: ../../../CHANGELOG:2798 -msgid "Store disc number and order tracks by disc number / position) (#507)" -msgstr "" - -#: ../../../CHANGELOG:2799 -msgid "Strip EXIF metadata from uploaded avatars to avoid leaking private data (#374)" -msgstr "" - -#: ../../../CHANGELOG:2800 -msgid "Support blind key rotation in HTTP Signatures (#658)" -msgstr "" - -#: ../../../CHANGELOG:2801 -msgid "Support setting a server URL in settings.json (#650)" -msgstr "" - -#: ../../../CHANGELOG:2802 -msgid "Updated default docker postgres version from 9.4 to 11 (#656)" -msgstr "" - -#: ../../../CHANGELOG:2803 -msgid "Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657)" -msgstr "" - -#: ../../../CHANGELOG:2804 -msgid "Improved test suite speed by reducing / disabling expensive operations (#648)" -msgstr "" - -#: ../../../CHANGELOG:2809 -msgid "Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469)" -msgstr "" - -#: ../../../CHANGELOG:2810 -msgid "Upgraded core dependencies to fix websocket/messaging issues and possible memory leaks (#643)" -msgstr "" - -#: ../../../CHANGELOG:2811 -msgid "Fix \".None\" extension when downloading Flac file (#473)" -msgstr "" - -#: ../../../CHANGELOG:2812 -msgid "Fixed None extension when downloading an in-place imported file (#621)" -msgstr "" - -#: ../../../CHANGELOG:2813 -msgid "Added a script to prune pre 0.17 federated tracks (#564)" -msgstr "" - -#: ../../../CHANGELOG:2814 -msgid "Advertise public libraries properly in ActivityPub representations (#553)" -msgstr "" - -#: ../../../CHANGELOG:2815 -msgid "Allow opus file upload (#598)" -msgstr "" - -#: ../../../CHANGELOG:2816 -msgid "Do not display \"view on MusicBrainz\" button if we miss the mbid (#422)" -msgstr "" - -#: ../../../CHANGELOG:2817 -msgid "Do not try to create unaccent extension if it's already present (#663)" -msgstr "" - -#: ../../../CHANGELOG:2818 -msgid "Ensure admin links in sidebar are displayed for users with relevant permissions, and only them (#597)" -msgstr "" - -#: ../../../CHANGELOG:2819 -msgid "Fix broken websocket connection under Chrome browser (#589)" -msgstr "" - -#: ../../../CHANGELOG:2820 -msgid "Fix play button not starting playback with empty queue (#632)" -msgstr "" - -#: ../../../CHANGELOG:2821 -msgid "Fixed a styling inconsistency on about page when instance description was missing (#659)" -msgstr "" - -#: ../../../CHANGELOG:2822 -msgid "Fixed a UI discrepancy in playlist tracks count (#647)" -msgstr "" - -#: ../../../CHANGELOG:2823 -msgid "Fixed greyed tracks in radio builder and detail page (#637)" -msgstr "" - -#: ../../../CHANGELOG:2824 -msgid "Fixed inconsistencies in subsonic error responses (#616)" -msgstr "" - -#: ../../../CHANGELOG:2825 -msgid "Fixed incorrect icon for \"next track\" in player control (#613)" -msgstr "" - -#: ../../../CHANGELOG:2826 -msgid "Fixed malformed search string when redirecting to LyricsWiki (#608)" -msgstr "" - -#: ../../../CHANGELOG:2827 -msgid "Fixed missing track count on various library cards (#581)" -msgstr "" - -#: ../../../CHANGELOG:2828 -msgid "Fixed skipped track when appending multiple tracks to the queue under certain conditions (#209)" -msgstr "" - -#: ../../../CHANGELOG:2829 -msgid "Fixed wrong album/track count on artist page (#599)" -msgstr "" - -#: ../../../CHANGELOG:2830 -msgid "Hide unplayable/empty playlists in \"Browse playlist\" pages (#424)" -msgstr "" - -#: ../../../CHANGELOG:2831 -msgid "Initial UI render using correct language from browser (#644)" -msgstr "" - -#: ../../../CHANGELOG:2832 -msgid "Invalid URI for reverse proxy websocket with apache (#617)" -msgstr "" - -#: ../../../CHANGELOG:2833 -msgid "Properly encode Wikipedia and lyrics search urls (#470)" -msgstr "" - -#: ../../../CHANGELOG:2834 -msgid "Refresh profile after user settings update to avoid cache issues (#606)" -msgstr "" - -#: ../../../CHANGELOG:2835 -msgid "Use role=button instead of empty links for player controls (#610)" -msgstr "" - -#: ../../../CHANGELOG:2840 -msgid "Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642)" -msgstr "" - -#: ../../../CHANGELOG:2841 -msgid "Document how to find and use library id when importing files in CLI (#562)" -msgstr "" - -#: ../../../CHANGELOG:2842 -msgid "Fix documentation typos (#645)" -msgstr "" - -#: ../../../CHANGELOG:2846 -msgid "0.17 (2018-10-07)" -msgstr "" - -#: ../../../CHANGELOG:2849 -msgid "Per user libraries" -msgstr "" - -#: ../../../CHANGELOG:2851 -msgid "This release contains a big change in music management. This has a lot of impact on how Funkwhale behaves, and you should have a look at https://docs.funkwhale.audio/upgrading/0.17.html for information about what changed and how to migrate." -msgstr "" - -#: ../../../CHANGELOG:2859 -msgid "Per user libraries (#463, also fixes #160 and #147)" -msgstr "" - -#: ../../../CHANGELOG:2860 -msgid "Authentication using a LDAP directory (#194)" -msgstr "" - -#: ../../../CHANGELOG:2865 -msgid "Add configuration option to set Musicbrainz hostname" -msgstr "" - -#: ../../../CHANGELOG:2866 -msgid "Add sign up link in the sidebar (#408)" -msgstr "" - -#: ../../../CHANGELOG:2867 -msgid "Added a library widget to display libraries associated with a track, album and artist (#551)" -msgstr "" - -#: ../../../CHANGELOG:2869 -msgid "Ensure from_activity field is not required in django's admin (#546)" -msgstr "" - -#: ../../../CHANGELOG:2870 -msgid "Move setting link from profile page to the sidebar (#406)" -msgstr "" - -#: ../../../CHANGELOG:2871 -msgid "Simplified and less error-prone nginx setup (#358)" -msgstr "" - -#: ../../../CHANGELOG:2875 -msgid "Do not restart current song when rordering queue, deleting tracks from queue or adding tracks to queue (#464)" -msgstr "" - -#: ../../../CHANGELOG:2877 -msgid "Fix broken icons in playlist editor (#515)" -msgstr "" - -#: ../../../CHANGELOG:2878 -msgid "Fixed a few untranslated strings (#559)" -msgstr "" - -#: ../../../CHANGELOG:2879 -msgid "Fixed split album when importing from federation (#346)" -msgstr "" - -#: ../../../CHANGELOG:2880 -msgid "Fixed toggle mute in volume bar does not restore previous volume level (#514)" -msgstr "" - -#: ../../../CHANGELOG:2881 -msgid "Fixed wrong env file URL and display bugs in deployment documentation (#520)" -msgstr "" - -#: ../../../CHANGELOG:2882 -msgid "Fixed wrong title in PlayButton (#435)" -msgstr "" - -#: ../../../CHANGELOG:2883 -msgid "Remove transparency on artist page button (#517)" -msgstr "" - -#: ../../../CHANGELOG:2884 -msgid "Set sane width default for ui cards and center play button (#530)" -msgstr "" - -#: ../../../CHANGELOG:2885 -msgid "Updated wrong icon and copy in play button dropdown (#436)" -msgstr "" - -#: ../../../CHANGELOG:2890 -msgid "Fixed wrong URLs for docker / nginx files in documentation (#537)" -msgstr "" - -#: ../../../CHANGELOG:2895 -msgid "Added a merge request template and more documentation about the changelog" -msgstr "" - -#: ../../../CHANGELOG:2899 -msgid "Using a LDAP directory to authenticate to your Funkwhale instance" -msgstr "" - -#: ../../../CHANGELOG:2901 -msgid "Funkwhale now support LDAP as an authentication source: you can configure your instance to delegate login to a LDAP directory, which is especially useful when you have an existing directory and don't want to manage users manually." -msgstr "" - -#: ../../../CHANGELOG:2906 -msgid "You can use this authentication backend side by side with the classic one." -msgstr "" - -#: ../../../CHANGELOG:2908 -msgid "Have a look at https://docs.funkwhale.audio/installation/ldap.html for detailed instructions on how to set this up." -msgstr "" - -#: ../../../CHANGELOG:2913 -msgid "Simplified nginx setup [Docker: Manual action required]" -msgstr "" - -#: ../../../CHANGELOG:2915 -msgid "We've received a lot of user feedback regarding our installation process, and it seems the proxy part is the one which is the most confusing and difficult. Unfortunately, this is also the one where errors and mistakes can completely break the application." -msgstr "" - -#: ../../../CHANGELOG:2920 -msgid "To make things easier for everyone, we now offer a simplified deployment process for the reverse proxy part. This will make upgrade of the proxy configuration significantly easier on docker deployments." -msgstr "" - -#: ../../../CHANGELOG:2924 -msgid "On non-docker instances, you have nothing to do." -msgstr "" - -#: ../../../CHANGELOG:2926 -msgid "If you have a dockerized instance, here is the upgrade path." -msgstr "" - -#: ../../../CHANGELOG:2928 -msgid "First, tweak your .env file::" -msgstr "" - -#: ../../../CHANGELOG:2940 -msgid "Then, add the following block at the end of your docker-compose.yml file::" -msgstr "" - -#: ../../../CHANGELOG:2975 -msgid "By doing that, you'll enable a dockerized nginx that will automatically be configured to serve your Funkwhale instance." -msgstr "" - -#: ../../../CHANGELOG:2978 -msgid "Download the required configuration files for the nginx container:" -msgstr "" - -#: ../../../CHANGELOG:2987 -msgid "Update the funkwhale.conf configuration of your server's reverse-proxy::" -msgstr "" - -#: ../../../CHANGELOG:3033 -msgid "Check that your configuration is valid then reload:" -msgstr "" - -#: ../../../CHANGELOG:3035 -msgid "sudo nginx -t sudo systemctl reload nginx" -msgstr "" - -#: ../../../CHANGELOG:3040 -msgid "0.16.3 (2018-08-21)" -msgstr "" - -#: ../../../CHANGELOG:3042 -#: ../../../CHANGELOG:3058 -#: ../../../CHANGELOG:3072 -#: ../../../CHANGELOG:3147 -#: ../../../CHANGELOG:3380 -#: ../../../CHANGELOG:3462 -#: ../../../CHANGELOG:3584 -#: ../../../CHANGELOG:4141 -msgid "Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html" -msgstr "" - -#: ../../../CHANGELOG:3047 -msgid "Fixed front-end not contacting the proper path on the API (!385)" -msgstr "" - -#: ../../../CHANGELOG:3051 -msgid "0.16.2 (2018-08-21)" -msgstr "" - -#: ../../../CHANGELOG:3055 -msgid "**This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.**" -msgstr "" - -#: ../../../CHANGELOG:3063 -msgid "Ensure we always have a default api url set on first load to avoid displaying the instance picker (#490)" -msgstr "" - -#: ../../../CHANGELOG:3065 -msgid "Fixed CLI importer syntax error because of async reserved keyword usage (#494)" -msgstr "" - -#: ../../../CHANGELOG:3070 -msgid "0.16.1 (2018-08-19)" -msgstr "" - -#: ../../../CHANGELOG:3077 -msgid "Make funkwhale themable by loading external stylesheets (#456)" -msgstr "" - -#: ../../../CHANGELOG:3081 -msgid "Add link to admin on \"Staff member\" button (#202)" -msgstr "" - -#: ../../../CHANGELOG:3082 -msgid "Can now add a description to radios and better radio cards (#331)" -msgstr "" - -#: ../../../CHANGELOG:3083 -msgid "Display track duration in track tables (#461)" -msgstr "" - -#: ../../../CHANGELOG:3084 -msgid "More permissive default permissions for front-end files (#388)" -msgstr "" - -#: ../../../CHANGELOG:3085 -msgid "Simpler configuration and toolchain for the front-end using vue-cli (!375)" -msgstr "" - -#: ../../../CHANGELOG:3086 -msgid "Use Howler to manage audio instead of our own dirty/untested code (#392)" -msgstr "" - -#: ../../../CHANGELOG:3091 -msgid "Fix alignment issue on top bar in Admin tabs (#395)" -msgstr "" - -#: ../../../CHANGELOG:3092 -msgid "Fix Apache2 permission issue preventing `/media` folder from being served correctly (#389)" -msgstr "" - -#: ../../../CHANGELOG:3094 -msgid "Fix loading on browse page lists causing them to go down, and dimming over the top bar (#468)" -msgstr "" - -#: ../../../CHANGELOG:3096 -msgid "Fixed (again): administration section not showing up in sidebar after login (#245)" -msgstr "" - -#: ../../../CHANGELOG:3098 -msgid "Fixed audio mimetype not showing up on track detail and list (#459)" -msgstr "" - -#: ../../../CHANGELOG:3099 -msgid "Fixed broken audio playback on Chrome and invisible volume control (#390)" -msgstr "" - -#: ../../../CHANGELOG:3100 -msgid "Fixed broken federation import on big imports due to missing transaction logic (#397)" -msgstr "" - -#: ../../../CHANGELOG:3102 -msgid "Fixed crash on artist pages when no cover is available (#457)" -msgstr "" - -#: ../../../CHANGELOG:3103 -msgid "Fixed favorited status of tracks not appearing in interface (#398)" -msgstr "" - -#: ../../../CHANGELOG:3104 -msgid "Fixed invitation code not prefilled in form when accessing invitation link (#476)" -msgstr "" - -#: ../../../CHANGELOG:3106 -msgid "Fixed typos in scheduled tasks configuration (#487)" -msgstr "" - -#: ../../../CHANGELOG:3107 -msgid "Removed release date error in case of empty date (#478)" -msgstr "" - -#: ../../../CHANGELOG:3108 -msgid "Removed white on white artist button on hover, on Album page (#393)" -msgstr "" - -#: ../../../CHANGELOG:3109 -msgid "Smarter date parsing during import by replacing arrow with pendulum (#376)" -msgstr "" - -#: ../../../CHANGELOG:3110 -msgid "Display public playlists properly for anonymous users (#488)" -msgstr "" - -#: ../../../CHANGELOG:3113 -#: ../../../CHANGELOG:3205 -msgid "i18n:" -msgstr "" - -#: ../../../CHANGELOG:3115 -msgid "Added portuguese, spanish and german translations" -msgstr "" - -#: ../../../CHANGELOG:3119 -msgid "Custom themes for Funkwhale" -msgstr "" - -#: ../../../CHANGELOG:3121 -msgid "If you ever wanted to give a custom look and feel to your instance, this is now possible." -msgstr "" - -#: ../../../CHANGELOG:3123 -msgid "Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more!" -msgstr "" - -#: ../../../CHANGELOG:3127 -msgid "Fix Apache2 configuration file for media block [Manual action required]" -msgstr "" - -#: ../../../CHANGELOG:3129 -msgid "The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served." -msgstr "" - -#: ../../../CHANGELOG:3131 -msgid "On Apache2 setups, you have to replace the following line::" -msgstr "" - -#: ../../../CHANGELOG:3135 -msgid "with::" -msgstr "" - -#: ../../../CHANGELOG:3139 -msgid "You can now restart your server::" -msgstr "" - -#: ../../../CHANGELOG:3145 -msgid "0.16 (2018-07-22)" -msgstr "" - -#: ../../../CHANGELOG:3152 -msgid "Complete redesign of the library home and playlist pages (#284)" -msgstr "" - -#: ../../../CHANGELOG:3153 -msgid "Expose ActivityPub actors for users (#317)" -msgstr "" - -#: ../../../CHANGELOG:3154 -msgid "Implemented a basic but functional Github-like search on federated tracks list (#344)" -msgstr "" - -#: ../../../CHANGELOG:3156 -msgid "Internationalized interface as well as translations for Arabic, French, Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167)" -msgstr "" - -#: ../../../CHANGELOG:3158 -msgid "Users can now upload an avatar in their settings page (#257)" -msgstr "" - -#: ../../../CHANGELOG:3163 -msgid "Added feedback when creating/updating radio (#302)" -msgstr "" - -#: ../../../CHANGELOG:3164 -msgid "Apply restrictions to username characters during signup" -msgstr "" - -#: ../../../CHANGELOG:3165 -msgid "Autoselect best language based on browser configuration (#386)" -msgstr "" - -#: ../../../CHANGELOG:3166 -msgid "Can now order tracks on federated track list (#326)" -msgstr "" - -#: ../../../CHANGELOG:3167 -msgid "Can now relaunch pending import jobs from the web interface (#323)" -msgstr "" - -#: ../../../CHANGELOG:3168 -msgid "Ensure we do not display pagination on single pages (#334)" -msgstr "" - -#: ../../../CHANGELOG:3169 -msgid "Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_PATH in the deployment .env file (#350)" -msgstr "" - -#: ../../../CHANGELOG:3171 -msgid "Make some space for the volume slider to allow precise control (#318)" -msgstr "" - -#: ../../../CHANGELOG:3172 -msgid "Removed django-cacheops dependency" -msgstr "" - -#: ../../../CHANGELOG:3173 -msgid "Store track artist and album artist separately (#237) Better handling of tracks with a different artist than the album artist" -msgstr "" - -#: ../../../CHANGELOG:3175 -msgid "The navigation bar of Library is now fixed (#375)" -msgstr "" - -#: ../../../CHANGELOG:3176 -msgid "Use thumbnails for avatars and covers to reduce bandwidth" -msgstr "" - -#: ../../../CHANGELOG:3181 -msgid "Ensure 750 permissions on CI artifacts (#332)" -msgstr "" - -#: ../../../CHANGELOG:3182 -msgid "Ensure images are not cropped in queue (#337)" -msgstr "" - -#: ../../../CHANGELOG:3183 -msgid "Ensure we do not import artists with empty names (#351)" -msgstr "" - -#: ../../../CHANGELOG:3184 -msgid "Fix notifications not closing when clicking on the cross (#366)" -msgstr "" - -#: ../../../CHANGELOG:3185 -msgid "Fix the most annoying offset in the whole fediverse (#369)" -msgstr "" - -#: ../../../CHANGELOG:3186 -msgid "Fixed persistent message in playlist modal (#304)" -msgstr "" - -#: ../../../CHANGELOG:3187 -msgid "Fixed unfiltered results in favorites API (#384)" -msgstr "" - -#: ../../../CHANGELOG:3188 -msgid "Raise a warning instead of crashing when getting a broken path in file import (#138)" -msgstr "" - -#: ../../../CHANGELOG:3190 -msgid "Remove parallelization of uploads during import to avoid crashing small servers (#382)" -msgstr "" - -#: ../../../CHANGELOG:3192 -msgid "Subsonic API login is now case insensitive (#339)" -msgstr "" - -#: ../../../CHANGELOG:3193 -msgid "Validate Date header in HTTP Signatures (#328)" -msgstr "" - -#: ../../../CHANGELOG:3198 -msgid "Added troubleshotting and technical overview documentation (#256)" -msgstr "" - -#: ../../../CHANGELOG:3199 -msgid "Arch Linux installation steps" -msgstr "" - -#: ../../../CHANGELOG:3200 -msgid "Document that users can use Ultrasonic on Android (#316)" -msgstr "" - -#: ../../../CHANGELOG:3201 -msgid "Fixed a couple of typos" -msgstr "" - -#: ../../../CHANGELOG:3202 -msgid "Some cosmetic improvements to the doc" -msgstr "" - -#: ../../../CHANGELOG:3207 -msgid "Arabic translation (!302)" -msgstr "" - -#: ../../../CHANGELOG:3208 -msgid "Polish translation (!304)" -msgstr "" - -#: ../../../CHANGELOG:3212 -msgid "Library home and playlist page overhaul" -msgstr "" - -#: ../../../CHANGELOG:3214 -msgid "The library home page have been completely redesigned to include:" -msgstr "" - -#: ../../../CHANGELOG:3216 -msgid "other users activity (listenings, playlists and favorites)" -msgstr "" - -#: ../../../CHANGELOG:3217 -msgid "recently imported albums" -msgstr "" - -#: ../../../CHANGELOG:3219 -msgid "We think this new version showcases more music in a more useful way, let us know what you think about it!" -msgstr "" - -#: ../../../CHANGELOG:3222 -msgid "The playlist page have been updated as well." -msgstr "" - -#: ../../../CHANGELOG:3226 -msgid "Internationalized interface" -msgstr "" - -#: ../../../CHANGELOG:3228 -msgid "After months of work, we're proud to announce our interface is now ready for internationalization." -msgstr "" - -#: ../../../CHANGELOG:3231 -msgid "Translators have already started the work of translating Funkwhale in 8 different languages, and we're ready to add more as needed." -msgstr "" - -#: ../../../CHANGELOG:3234 -msgid "You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/" -msgstr "" - -#: ../../../CHANGELOG:3238 -msgid "Better handling of tracks with a different artist than the album artist" -msgstr "" - -#: ../../../CHANGELOG:3240 -msgid "Some tracks involve a different artist than the album artist (e.g. a featuring) and Funkwhale has been known to do weird things when importing such tracks, resulting in albums that contained a single track, for instance." -msgstr "" - -#: ../../../CHANGELOG:3244 -msgid "The situation should be improved with this release, as Funkwhale is now able to store separately the track and album artist, and display it properly in the interface." -msgstr "" - -#: ../../../CHANGELOG:3249 -msgid "Users now have an ActivityPub Actor [Manual action required]" -msgstr "" - -#: ../../../CHANGELOG:3251 -msgid "In the process of implementing federation for user activity such as listening history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation." -msgstr "" - -#: ../../../CHANGELOG:3254 -msgid "This does not means the federation is working, but this is a needed step to implement it." -msgstr "" - -#: ../../../CHANGELOG:3256 -msgid "Those profiles will be created automatically for new users, but you have to run a command to create them for existing users." -msgstr "" - -#: ../../../CHANGELOG:3267 -msgid "This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times." -msgstr "" - -#: ../../../CHANGELOG:3271 -msgid "Image thumbnails [Manual action required]" -msgstr "" - -#: ../../../CHANGELOG:3273 -msgid "To reduce bandwidth usage on slow or limited connexions and improve performance in general, we now use smaller images in the front-end. For instance, if you have an album cover with a 1000x1000 pixel size, we will create smaller versions of this image (50x50, 200x200, 400x400) and reference those resized version when we don't actually need the original image." -msgstr "" - -#: ../../../CHANGELOG:3279 -msgid "Thumbnail will be created automatically for new objects, however, you have to launch a manual command to deal with existing ones." -msgstr "" - -#: ../../../CHANGELOG:3290 -msgid "This should be quite fast but may take up to a few minutes depending on the number of albums you have in database. It is safe to interrupt the process or rerun it multiple times." -msgstr "" - -#: ../../../CHANGELOG:3295 -msgid "Improved search on federated tracks list" -msgstr "" - -#: ../../../CHANGELOG:3297 -msgid "Having a powerful but easy-to-use search is important but difficult to achieve, especially if you do not want to have a real complex search interface." -msgstr "" - -#: ../../../CHANGELOG:3300 -msgid "Github does a pretty good job with that, using a structured but simple query system (See https://help.github.com/articles/searching-issues-and-pull-requests/#search-only-issues-or-pull-requests)." -msgstr "" - -#: ../../../CHANGELOG:3303 -msgid "This release implements a limited but working subset of this query system. You can use it only on the federated tracks list (/manage/federation/tracks) at the moment, but depending on feedback it will be rolled-out on other pages as well." -msgstr "" - -#: ../../../CHANGELOG:3306 -msgid "This is the type of query you can run:" -msgstr "" - -#: ../../../CHANGELOG:3308 -msgid "``hello world``: search for \"hello\" and \"world\" in all the available fields" -msgstr "" - -#: ../../../CHANGELOG:3309 -msgid "``hello in:artist`` search for results where artist name is \"hello\"" -msgstr "" - -#: ../../../CHANGELOG:3310 -msgid "``spring in:artist,album`` search for results where artist name or album title contain \"spring\"" -msgstr "" - -#: ../../../CHANGELOG:3311 -msgid "``artist:hello`` search for results where artist name equals \"hello\"" -msgstr "" - -#: ../../../CHANGELOG:3312 -msgid "``artist:\"System of a Down\" domain:instance.funkwhale`` search for results where artist name equals \"System of a Down\" and inside \"instance.funkwhale\" library" -msgstr "" - -#: ../../../CHANGELOG:3316 -msgid "Ensure MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_* are set explicitly [Manual action required]" -msgstr "" - -#: ../../../CHANGELOG:3318 -msgid "In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing some deployment issues on non-docker setups when people forgot to uncomment them." -msgstr "" - -#: ../../../CHANGELOG:3321 -msgid "From now on, those variables are uncommented, and will also be used on docker setups to mount the volumes automatically in the docker-compose.yml file. This has been a source of headache as well in some deployments, where you had to update both the .env file and the compose file." -msgstr "" - -#: ../../../CHANGELOG:3326 -msgid "This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH), whose values are now used directly to set up the proper Docker volumes." -msgstr "" - -#: ../../../CHANGELOG:3329 -msgid "This will only affect new deployments though. If you want to benefit from this on an existing instance, do a backup of your ``.env`` and ``docker-compose.yml`` files and apply the following changes:" -msgstr "" - -#: ../../../CHANGELOG:3332 -msgid "Ensure ``MEDIA_ROOT`` is uncommented in your .env file and match the absolute path where media files are stored on your host (``/srv/funkwhale/data/media`` by default)" -msgstr "" - -#: ../../../CHANGELOG:3334 -msgid "Ensure ``STATIC_ROOT`` is uncommented in your .env file and match the absolute path where static files are stored on your host (``/srv/funkwhale/data/static`` by default)" -msgstr "" - -#: ../../../CHANGELOG:3338 -msgid "If you use in-place import:" -msgstr "" - -#: ../../../CHANGELOG:3337 -msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to ``/music``" -msgstr "" - -#: ../../../CHANGELOG:3338 -msgid "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files are stored (``/srv/funkwhale/data/music`` by default)" -msgstr "" - -#: ../../../CHANGELOG:3346 -msgid "Edit your docker-compose.yml file to reflect the changes:" -msgstr "" - -#: ../../../CHANGELOG:3341 -msgid "Search for volumes (there should be two occurrences) that contains ``/app/funkwhale_api/media`` on the right side, and replace the whole line with ``- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"``" -msgstr "" - -#: ../../../CHANGELOG:3343 -msgid "Search for a volume that contains ``/app/staticfiles`` on the right side, and replace the whole line with ``- \"${STATIC_ROOT}:${STATIC_ROOT}\"``" -msgstr "" - -#: ../../../CHANGELOG:3345 -msgid "If you use in-place import, search for volumes (there should be two occurrences) that contains ``/music:ro`` on the right side, and replace the whole line with ``- \"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"``" -msgstr "" - -#: ../../../CHANGELOG:3348 -msgid "In the end, the ``volumes`` directives of your containers should look like that::" -msgstr "" - -#: ../../../CHANGELOG:3366 -msgid "Removed Cacheops dependency" -msgstr "" - -#: ../../../CHANGELOG:3368 -msgid "We removed one of our dependency named django-cacheops. It was unly used in a few places, and not playing nice with other dependencies." -msgstr "" - -#: ../../../CHANGELOG:3371 -msgid "You can safely remove this dependency in your environment with ``pip uninstall django-cacheops`` if you're not using docker." -msgstr "" - -#: ../../../CHANGELOG:3374 -msgid "You can also safely remove any ``CACHEOPS_ENABLED`` setting from your environment file." -msgstr "" - -#: ../../../CHANGELOG:3378 -msgid "0.15 (2018-06-24)" -msgstr "" - -#: ../../../CHANGELOG:3385 -msgid "Added admin interface to manage import requests (#190)" -msgstr "" - -#: ../../../CHANGELOG:3386 -msgid "Added replace flag during import to replace already present tracks with a new version of their track file (#222)" -msgstr "" - -#: ../../../CHANGELOG:3388 -msgid "Funkwhale's front-end can now point to any instance (#327) Removed front-end and back-end coupling" -msgstr "" - -#: ../../../CHANGELOG:3390 -msgid "Management interface for users (#212)" -msgstr "" - -#: ../../../CHANGELOG:3391 -msgid "New invite system (#248) New invite system" -msgstr "" - -#: ../../../CHANGELOG:3396 -msgid "Added \"TV\" to the list of highlighted words during YouTube import (#154)" -msgstr "" - -#: ../../../CHANGELOG:3397 -msgid "Command line import now accepts unlimited args (#242)" -msgstr "" - -#: ../../../CHANGELOG:3402 -msgid "Expose track files date in manage API (#307)" -msgstr "" - -#: ../../../CHANGELOG:3403 -msgid "Fixed current track restart/hiccup when shuffling queue, deleting track from queue or reordering (#310)" -msgstr "" - -#: ../../../CHANGELOG:3405 -msgid "Include user's current private playlists on playlist list (#302)" -msgstr "" - -#: ../../../CHANGELOG:3406 -msgid "Remove link to generic radios, since they don't have detail pages (#324)" -msgstr "" - -#: ../../../CHANGELOG:3411 -msgid "Document that Funkwhale may be installed with YunoHost (#325)" -msgstr "" - -#: ../../../CHANGELOG:3412 -msgid "Documented a saner layout with symlinks for in-place imports (#254)" -msgstr "" - -#: ../../../CHANGELOG:3413 -msgid "Upgrade documentation now use the correct user on non-docker setups (#265)" -msgstr "" - -#: ../../../CHANGELOG:3417 -msgid "Invite system" -msgstr "" - -#: ../../../CHANGELOG:3419 -msgid "On closed instances, it has always been a little bit painful to create accounts by hand for new users. This release solve that by adding invitations." -msgstr "" - -#: ../../../CHANGELOG:3422 -msgid "You can generate invitation codes via the \"users\" admin interface (you'll find a link in the sidebar). Those codes are valid for 14 days, and can be used once to create a new account on the instance, even if registrations are closed." -msgstr "" - -#: ../../../CHANGELOG:3426 -msgid "By default, we generate a random code for invitations, but you can also use custom codes if you need to print them or make them fancier ;)" -msgstr "" - -#: ../../../CHANGELOG:3429 -msgid "Invitations generation and management requires the \"settings\" permission." -msgstr "" - -#: ../../../CHANGELOG:3433 -msgid "Removed front-end and back-end coupling" -msgstr "" - -#: ../../../CHANGELOG:3435 -msgid "Even though Funkwhale's front-end has always been a Single Page Application, talking to an API, it was only able to talk to an API on the same domain." -msgstr "" - -#: ../../../CHANGELOG:3438 -msgid "There was no real technical justification behind this (only laziness), and it was also blocking interesting use cases:" -msgstr "" - -#: ../../../CHANGELOG:3441 -msgid "Use multiple customized versions of the front-end with the same instance" -msgstr "" - -#: ../../../CHANGELOG:3442 -msgid "Use a customized version of the front-end with multiple instances" -msgstr "" - -#: ../../../CHANGELOG:3443 -msgid "Use a locally hosted front-end with a remote API, which is especially useful in development" -msgstr "" - -#: ../../../CHANGELOG:3445 -msgid "From now on, Funkwhale's front-end can connect to any Funkwhale server. You can change the server you are connecting to in the footer." -msgstr "" - -#: ../../../CHANGELOG:3448 -msgid "Fixing this also unlocked a really interesting feature in our development/review workflow: by leveraging Gitlab CI and review apps, we are now able to deploy automatically live versions of a merge request, making it possible for anyone to review front-end changes easily, without the need to install a local environment." -msgstr "" - -#: ../../../CHANGELOG:3455 -msgid "0.14.2 (2018-06-16)" -msgstr "" - -#: ../../../CHANGELOG:3459 -msgid "This release contains a fix for a permission issue. You should upgrade as soon as possible. Read the changelog below for more details." -msgstr "" - -#: ../../../CHANGELOG:3467 -msgid "Added feedback on shuffle button (#262)" -msgstr "" - -#: ../../../CHANGELOG:3468 -msgid "Added multiple warnings in the documentation that you should never run makemigrations yourself (#291)" -msgstr "" - -#: ../../../CHANGELOG:3470 -msgid "Album cover served in http (#264)" -msgstr "" - -#: ../../../CHANGELOG:3471 -msgid "Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25) (!252)" -msgstr "" - -#: ../../../CHANGELOG:3473 -msgid "Display file size in human format during file upload (#289)" -msgstr "" - -#: ../../../CHANGELOG:3474 -msgid "Switch from BSD-3 licence to AGPL-3 licence (#280)" -msgstr "" - -#: ../../../CHANGELOG:3478 -msgid "Ensure radios can only be edited and deleted by their owners (#311)" -msgstr "" - -#: ../../../CHANGELOG:3479 -msgid "Fixed admin menu not showing after login (#245)" -msgstr "" - -#: ../../../CHANGELOG:3480 -msgid "Fixed broken pagination in Subsonic API (#295)" -msgstr "" - -#: ../../../CHANGELOG:3481 -msgid "Fixed duplicated websocket connection on timeline (#287)" -msgstr "" - -#: ../../../CHANGELOG:3486 -msgid "Improved documentation about in-place imports setup (#298)" -msgstr "" - -#: ../../../CHANGELOG:3491 -msgid "Added Black and flake8 checks in CI to ensure consistent code styling and formatting (#297)" -msgstr "" - -#: ../../../CHANGELOG:3493 -msgid "Added bug and feature issue templates (#299)" -msgstr "" - -#: ../../../CHANGELOG:3497 -msgid "Permission issues on radios" -msgstr "" - -#: ../../../CHANGELOG:3499 -msgid "Because of an error in the way we checked user permissions on radios, public radios could be deleted by any logged-in user, even if they were not the owner of the radio." -msgstr "" - -#: ../../../CHANGELOG:3503 -msgid "We recommend instances owners to upgrade as fast as possible to avoid any abuse and data loss." -msgstr "" - -#: ../../../CHANGELOG:3508 -msgid "Funkwhale is now licenced under AGPL-3" -msgstr "" - -#: ../../../CHANGELOG:3510 -msgid "Following the recent switch made by PixelFed (https://github.com/dansup/pixelfed/issues/143), we decided along with the community to relicence Funkwhale under the AGPL-3 licence. We did this switch for various reasons:" -msgstr "" - -#: ../../../CHANGELOG:3515 -msgid "This is better aligned with other fediverse software" -msgstr "" - -#: ../../../CHANGELOG:3516 -msgid "It prohibits anyone to distribute closed-source and proprietary forks of Funkwhale" -msgstr "" - -#: ../../../CHANGELOG:3518 -msgid "As end users and instance owners, this does not change anything. You can continue to use Funkwhale exactly as you did before :)" -msgstr "" - -#: ../../../CHANGELOG:3523 -msgid "Apache support for websocket" -msgstr "" - -#: ../../../CHANGELOG:3525 -msgid "Up until now, our Apache2 configuration was not working with websockets. This is now solved by adding this at the beginning of your Apache2 configuration file::" -msgstr "" - -#: ../../../CHANGELOG:3530 -msgid "And this, before the \"/api\" block::" -msgstr "" - -#: ../../../CHANGELOG:3535 -msgid "Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available." -msgstr "" - -#: ../../../CHANGELOG:3539 -msgid "Serving album covers in https (Apache2 proxy)" -msgstr "" - -#: ../../../CHANGELOG:3541 -msgid "Two issues are addressed here. The first one was about Django replying with mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` allows Django to know that the client is using https, and that the reply must be https as well." -msgstr "" - -#: ../../../CHANGELOG:3546 -msgid "Second issue was a problem of permission causing Apache a denied access to album cover folder. It is solved by adding another block for this path in the Apache configuration file for funkwhale." -msgstr "" - -#: ../../../CHANGELOG:3550 -msgid "Here is how to modify your `funkwhale.conf` apache2 configuration::" -msgstr "" - -#: ../../../CHANGELOG:3571 -msgid "About the makemigrations warning" -msgstr "" - -#: ../../../CHANGELOG:3573 -msgid "You may sometimes get the following warning while applying migrations::" -msgstr "" - -#: ../../../CHANGELOG:3577 -msgid "This is a warning, not an error, and it can be safely ignored. Never run the ``makemigrations`` command yourself." -msgstr "" - -#: ../../../CHANGELOG:3582 -msgid "0.14.1 (2018-06-06)" -msgstr "" - -#: ../../../CHANGELOG:3588 -msgid "Display server version in the footer (#270)" -msgstr "" - -#: ../../../CHANGELOG:3589 -msgid "fix_track_files will now update files with bad mimetype (and not only the one with no mimetype) (#273)" -msgstr "" - -#: ../../../CHANGELOG:3591 -msgid "Huge performance boost (~x5 to x7) during CLI import that queries MusicBrainz (#288)" -msgstr "" - -#: ../../../CHANGELOG:3593 -msgid "Removed alpha-state transcoding support (#271)" -msgstr "" - -#: ../../../CHANGELOG:3597 -msgid "Broken logging statement during import error (#274)" -msgstr "" - -#: ../../../CHANGELOG:3598 -msgid "Broken search bar on library home (#278)" -msgstr "" - -#: ../../../CHANGELOG:3599 -msgid "Do not crash when importing track with an artist that do not match the release artist (#237)" -msgstr "" - -#: ../../../CHANGELOG:3601 -msgid "Do not crash when tag contains multiple uuids with a / separator (#267)" -msgstr "" - -#: ../../../CHANGELOG:3602 -msgid "Ensure we do not store bad mimetypes (such as application/x-empty) (#266)" -msgstr "" - -#: ../../../CHANGELOG:3603 -msgid "Fix broken \"play all\" button that played only 25 tracks (#281)" -msgstr "" - -#: ../../../CHANGELOG:3604 -msgid "Fixed broken track download modal (overflow and wrong URL) (#239)" -msgstr "" - -#: ../../../CHANGELOG:3605 -msgid "Removed hardcoded size limit in file upload widget (#275)" -msgstr "" - -#: ../../../CHANGELOG:3610 -msgid "Added warning about _protected/music location in nginx configuration (#247)" -msgstr "" - -#: ../../../CHANGELOG:3614 -msgid "Removed alpha-state transcoding (#271)" -msgstr "" - -#: ../../../CHANGELOG:3616 -msgid "A few months ago, a basic transcoding feature was implemented. Due to the way this feature was designed, it was slow, CPU intensive on the server side, and very tightly coupled to the reverse-proxy configuration, preventing it to work Apache2, for instance. It was also not compatible with Subsonic clients." -msgstr "" - -#: ../../../CHANGELOG:3621 -msgid "Based on that, we're currently removing support for transcoding **in its current state**. The work on a better designed transcoding feature can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272." -msgstr "" - -#: ../../../CHANGELOG:3625 -msgid "You don't have to do anything on your side, but you may want to remove the now obsolete configuration from your reverse proxy file (nginx only)::" -msgstr "" - -#: ../../../CHANGELOG:3670 -msgid "0.14 (2018-06-02)" -msgstr "" - -#: ../../../CHANGELOG:3673 -#: ../../../CHANGELOG:3877 -#: ../../../CHANGELOG:3998 -msgid "Upgrade instructions are available at" -msgstr "" - -#: ../../../CHANGELOG:3673 -#: ../../../CHANGELOG:3877 -#: ../../../CHANGELOG:3998 -msgid "https://docs.funkwhale.audio/upgrading.html" -msgstr "" - -#: ../../../CHANGELOG:3677 -msgid "Admins can now configure default permissions that will be granted to all registered users (#236)" -msgstr "" - -#: ../../../CHANGELOG:3679 -msgid "Files management interface for users with \"library\" permission (#223)" -msgstr "" - -#: ../../../CHANGELOG:3680 -msgid "New action table component for quick and efficient batch actions (#228) This is implemented on the federated tracks pages, but will be included in other pages as well depending on the feedback." -msgstr "" - -#: ../../../CHANGELOG:3687 -msgid "Added a new \"upload\" permission that allows user to launch import and view their own imports (#230)" -msgstr "" - -#: ../../../CHANGELOG:3689 -msgid "Added Support for OggTheora in import." -msgstr "" - -#: ../../../CHANGELOG:3690 -msgid "Autoremove media files on model instance deletion (#241)" -msgstr "" - -#: ../../../CHANGELOG:3691 -msgid "Can now import a whole remote library at once thanks to new Action Table component (#164)" -msgstr "" - -#: ../../../CHANGELOG:3693 -msgid "Can now use album covers from flac/mp3 metadata and separate file in track directory (#219)" -msgstr "" - -#: ../../../CHANGELOG:3695 -msgid "Implemented getCovertArt in Subsonic API to serve album covers (#258)" -msgstr "" - -#: ../../../CHANGELOG:3696 -msgid "Implemented scrobble endpoint of subsonic API, listenings are now tracked correctly from third party apps that use this endpoint (#260)" -msgstr "" - -#: ../../../CHANGELOG:3698 -msgid "Retructured music API to increase performance and remove useless endpoints (#224)" -msgstr "" - -#: ../../../CHANGELOG:3704 -msgid "Consistent constraints/checks for URL size (#207)" -msgstr "" - -#: ../../../CHANGELOG:3705 -msgid "Display proper total number of tracks on radio detail (#225)" -msgstr "" - -#: ../../../CHANGELOG:3706 -msgid "Do not crash on flac import if musicbrainz tags are missing (#214)" -msgstr "" - -#: ../../../CHANGELOG:3707 -msgid "Empty save button in radio builder (#226)" -msgstr "" - -#: ../../../CHANGELOG:3708 -msgid "Ensure anonymous users can use the app if the instance is configured accordingly (#229)" -msgstr "" - -#: ../../../CHANGELOG:3710 -msgid "Ensure inactive users cannot get auth tokens (#218) This was already the case bug we missed some checks" -msgstr "" - -#: ../../../CHANGELOG:3712 -msgid "File-upload import now supports Flac files (#213)" -msgstr "" - -#: ../../../CHANGELOG:3713 -msgid "File-upload importer should now work properly, assuming files are tagged (#106)" -msgstr "" - -#: ../../../CHANGELOG:3715 -msgid "Fixed a few broken translations strings (#227)" -msgstr "" - -#: ../../../CHANGELOG:3716 -msgid "Fixed broken ordering in front-end lists (#179)" -msgstr "" - -#: ../../../CHANGELOG:3717 -msgid "Fixed ignored page_size parameter on artist and favorites list (#240)" -msgstr "" - -#: ../../../CHANGELOG:3718 -msgid "Read ID3Tag Tracknumber from TRCK (#220)" -msgstr "" - -#: ../../../CHANGELOG:3719 -msgid "We now fetch album covers regardless of the import methods (#231)" -msgstr "" - -#: ../../../CHANGELOG:3723 -msgid "Added missing subsonic configuration block in deployment vhost files (#249)" -msgstr "" - -#: ../../../CHANGELOG:3724 -msgid "Moved upgrade doc under install doc in TOC (#251)" -msgstr "" - -#: ../../../CHANGELOG:3729 -msgid "Removed acoustid support, as the integration was buggy and error-prone (#106)" -msgstr "" - -#: ../../../CHANGELOG:3733 -msgid "Files management interface" -msgstr "" - -#: ../../../CHANGELOG:3735 -msgid "This is the first bit of an ongoing work that will span several releases, to bring more powerful library management features to Funkwhale. This iteration includes a basic file management interface where users with the \"library\" permission can list and search available files, order them using various criteria (size, bitrate, duration...) and delete them." -msgstr "" - -#: ../../../CHANGELOG:3742 -msgid "New \"upload\" permission" -msgstr "" - -#: ../../../CHANGELOG:3744 -msgid "This new permission is helpful if you want to give upload/import rights to some users, but don't want them to be able to manage the library as a whole: although there are no controls yet for managing library in the fron-end, subsequent release will introduce management interfaces for artists, files, etc." -msgstr "" - -#: ../../../CHANGELOG:3750 -msgid "Because of that, users with the \"library\" permission will have much more power, and will also be able to remove content from the platform. On the other hand, users with the \"upload\" permission will only have the ability to add new content." -msgstr "" - -#: ../../../CHANGELOG:3755 -msgid "Also, this release also includes a new feature called \"default permissions\": those are permissions that are granted to every users on the platform. On public/open instances, this will play well with the \"upload\" permission since everyone will be able to contribute to the instance library without an admin giving the permission to every single user." -msgstr "" - -#: ../../../CHANGELOG:3762 -msgid "Smarter album cover importer" -msgstr "" - -#: ../../../CHANGELOG:3764 -msgid "In earlier versions, covers where only imported when launching a YouTube import. Starting from this release, covers will be imported regardless of the import mode (file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers in the following order:" -msgstr "" - -#: ../../../CHANGELOG:3769 -msgid "In the imported file itself (FLAC/MP3 only)" -msgstr "" - -#: ../../../CHANGELOG:3770 -msgid "In a cover.jpg or cover.png in the file directory" -msgstr "" - -#: ../../../CHANGELOG:3771 -msgid "By fetching cover art from Musibrainz, assuming the file is tagged correctly" -msgstr "" - -#: ../../../CHANGELOG:3773 -msgid "This will only work for newly imported tracks and albums though. In the future, we may offer an option to refetch album covers from the interface, but in the meantime, you can use the following snippet:" -msgstr "" - -#: ../../../CHANGELOG:3791 -msgid "Then launch it::" -msgstr "" - -#: ../../../CHANGELOG:3806 -msgid "Depending on your number of albums, the previous snippet may take some time to execute. You can interrupt it at any time using ctrl-c and relaunch it later, as it's idempotent." -msgstr "" - -#: ../../../CHANGELOG:3811 -msgid "Music API changes" -msgstr "" - -#: ../../../CHANGELOG:3813 -msgid "This release includes an API break. Even though the API is advertised as unstable, and not documented, here is a brief explanation of the change in case you are using the API in a client or in a script. Summary of the changes:" -msgstr "" - -#: ../../../CHANGELOG:3817 -msgid "``/api/v1/artists`` does not includes a list of tracks anymore. It was to heavy to return all of this data all the time. You can get all tracks for an artist using ``/api/v1/tracks?artist=artist_id``" -msgstr "" - -#: ../../../CHANGELOG:3820 -msgid "Additionally, ``/api/v1/tracks`` now support an ``album`` filter to filter tracks matching an album" -msgstr "" - -#: ../../../CHANGELOG:3822 -msgid "``/api/v1/artists/search``, ``/api/v1/albums/search`` and ``/api/v1/tracks/search`` endpoints are removed. Use ``/api/v1/{artists|albums|tracks}/?q=yourquery`` instead. It's also more powerful, since you can combine search with other filters and ordering options." -msgstr "" - -#: ../../../CHANGELOG:3826 -msgid "``/api/v1/requests/import-requests/search`` endpoint is removed as well. Use ``/api/v1/requests/import-requests/?q=yourquery`` instead. It's also more powerful, since you can combine search with other filters and ordering options." -msgstr "" - -#: ../../../CHANGELOG:3831 -msgid "Of course, the front-end was updated to work with the new API, so this should not impact end-users in any way, apart from slight performance gains." -msgstr "" - -#: ../../../CHANGELOG:3836 -msgid "The API is still not stable and may evolve again in the future. API freeze will come at a later point." -msgstr "" - -#: ../../../CHANGELOG:3840 -msgid "Flac files imports via upload" -msgstr "" - -#: ../../../CHANGELOG:3842 -msgid "You have nothing to do to benefit from this, however, since Flac files tend to be a lot bigger than other files, you may want to increase the ``client_max_body_size`` value in your Nginx configuration if you plan to upload flac files." -msgstr "" - -#: ../../../CHANGELOG:3848 -msgid "Missing subsonic configuration block in vhost files" -msgstr "" - -#: ../../../CHANGELOG:3850 -msgid "Because of a missing block in the sample Nginx and Apache configurations, instances that were deployed after the 0.13 release are likely to be unable to answer to Subsonic clients (the missing bits were properly documented in the changelog)." -msgstr "" - -#: ../../../CHANGELOG:3855 -msgid "Ensure you have the following snippets in your Nginx or Apache configuration if you plan to use the Subsonic API." -msgstr "" - -#: ../../../CHANGELOG:3858 -msgid "Nginx::" -msgstr "" - -#: ../../../CHANGELOG:3865 -msgid "Apache2::" -msgstr "" - -#: ../../../CHANGELOG:3874 -msgid "0.13 (2018-05-19)" -msgstr "" - -#: ../../../CHANGELOG:3881 -msgid "Can now import and play flac files (#157)" -msgstr "" - -#: ../../../CHANGELOG:3882 -msgid "Simpler permission system (#152)" -msgstr "" - -#: ../../../CHANGELOG:3883 -msgid "Store file length, size and bitrate (#195)" -msgstr "" - -#: ../../../CHANGELOG:3884 -msgid "We now have a brand new instance settings interface in the front-end (#206)" -msgstr "" - -#: ../../../CHANGELOG:3889 -msgid "Disabled browsable HTML API in production (#205)" -msgstr "" - -#: ../../../CHANGELOG:3890 -msgid "Instances can now indicate on the nodeinfo endpoint if they want to remain private (#200)" -msgstr "" - -#: ../../../CHANGELOG:3896 -msgid ".well-known/nodeinfo endpoint can now answer to request with Accept: application/json (#197)" -msgstr "" - -#: ../../../CHANGELOG:3898 -msgid "Fixed escaping issue of track name in playlist modal (#201)" -msgstr "" - -#: ../../../CHANGELOG:3899 -msgid "Fixed missing dot when downloading file (#204)" -msgstr "" - -#: ../../../CHANGELOG:3900 -msgid "In-place imported tracks with non-ascii characters don't break reverse-proxy serving (#196)" -msgstr "" - -#: ../../../CHANGELOG:3902 -msgid "Removed Python 3.6 dependency (secrets module) (#198)" -msgstr "" - -#: ../../../CHANGELOG:3903 -msgid "Uplayable tracks are now properly disabled in the interface (#199)" -msgstr "" - -#: ../../../CHANGELOG:3907 -msgid "Instance settings interface" -msgstr "" - -#: ../../../CHANGELOG:3909 -msgid "Prior to this release, the only way to update instance settings (such as instance description, signup policy, federation configuration, etc.) was using the admin interface provided by Django (the back-end framework which power the API)." -msgstr "" - -#: ../../../CHANGELOG:3913 -msgid "This interface worked, but was not really-user friendly and intuitive." -msgstr "" - -#: ../../../CHANGELOG:3915 -msgid "Starting from this release, we now offer a dedicated interface directly in the front-end. You can view and edit all your instance settings from here, assuming you have the required permissions." -msgstr "" - -#: ../../../CHANGELOG:3919 -msgid "This interface is available at ``/manage/settings`` and via link in the sidebar." -msgstr "" - -#: ../../../CHANGELOG:3923 -msgid "Storage of bitrate, size and length in database" -msgstr "" - -#: ../../../CHANGELOG:3925 -msgid "Starting with this release, when importing files, Funkwhale will store additional information about audio files:" -msgstr "" - -#: ../../../CHANGELOG:3928 -msgid "Bitrate" -msgstr "" - -#: ../../../CHANGELOG:3929 -msgid "Size (in bytes)" -msgstr "" - -#: ../../../CHANGELOG:3930 -msgid "Duration" -msgstr "" - -#: ../../../CHANGELOG:3932 -msgid "This change is not retroactive, meaning already imported files will lack those information. The interface and API should work as before in such case, however, we offer a command to deal with legacy files and populate the missing values." -msgstr "" - -#: ../../../CHANGELOG:3936 -#: ../../../CHANGELOG:3976 +#: ../../../CHANGELOG.md:2557 +#: ../../../CHANGELOG.md:3088 +#: ../../../CHANGELOG.md:3113 +#: ../../../CHANGELOG.md:3735 +#: ../../../CHANGELOG.md:3772 msgid "On docker setups:" msgstr "" -#: ../../../CHANGELOG:3943 -#: ../../../CHANGELOG:3982 +#: ../../../CHANGELOG.md:2563 +#: ../../../CHANGELOG.md:3094 +#: ../../../CHANGELOG.md:3119 +#: ../../../CHANGELOG.md:3741 +#: ../../../CHANGELOG.md:3778 msgid "On non-docker setups:" msgstr "" -#: ../../../CHANGELOG:3952 +#: ../../../CHANGELOG.md:2569 +msgid "Enable gzip compression [manual action suggested]" +msgstr "" + +#: ../../../CHANGELOG.md:2571 +msgid "Gzip compression will be enabled on new instances by default and will reduce the amount of bandwidth consumed by your instance." +msgstr "" + +#: ../../../CHANGELOG.md:2574 +msgid "If you want to benefit from gzip compression on your instance, edit your reverse proxy virtualhost file (located at `/etc/nginx/sites-available/funkwhale.conf`) and add the following snippet in the server block, then reload your nginx server:" +msgstr "" + +#: ../../../CHANGELOG.md:2611 +msgid "Full changelog" +msgstr "" + +#: ../../../CHANGELOG.md:2615 +msgid "Allow embedding of albums and tracks available in public libraries via an <iframe> (#578)" +msgstr "" + +#: ../../../CHANGELOG.md:2616 +msgid "Audio transcoding is back! (#272)" +msgstr "" + +#: ../../../CHANGELOG.md:2617 +msgid "First set of instance level moderation tools (#580, !521)" +msgstr "" + +#: ../../../CHANGELOG.md:2618 +msgid "Store licensing and copyright information from file metadata, if available (#308)" +msgstr "" + +#: ../../../CHANGELOG.md:2622 +msgid "Add UI elements for multi-disc albums (#631)" +msgstr "" + +#: ../../../CHANGELOG.md:2623 +msgid "Added alternative funkwhale/all-in-one docker image (#614)" +msgstr "" + +#: ../../../CHANGELOG.md:2624 +msgid "Broadcast library updates (name, description, visibility) over federation" +msgstr "" + +#: ../../../CHANGELOG.md:2625 +msgid "Based Docker image on alpine to have a smaller (and faster to build) image" +msgstr "" + +#: ../../../CHANGELOG.md:2626 +msgid "Improved front-end performance by stripping unused dependencies, reducing bundle size and enabling gzip compression" +msgstr "" + +#: ../../../CHANGELOG.md:2628 +msgid "Improved accessibility by using main/section/nav tags and aria-labels in most critical places (#612)" +msgstr "" + +#: ../../../CHANGELOG.md:2629 +msgid "The progress bar in the player now display loading state / buffer loading (#586)" +msgstr "" + +#: ../../../CHANGELOG.md:2630 +msgid "Added \"type: funkwhale\" and \"funkwhale-version\" in Subsonic responses (#573)" +msgstr "" + +#: ../../../CHANGELOG.md:2631 +msgid "Documented keyboard shortcuts, list is now available by pressing \"h\" or in the footer (#611)" +msgstr "" + +#: ../../../CHANGELOG.md:2632 +msgid "Documented which Subsonic endpoints are implemented (#575)" +msgstr "" + +#: ../../../CHANGELOG.md:2633 +msgid "Hide invitation code field during signup when it's not required (#410)" +msgstr "" + +#: ../../../CHANGELOG.md:2634 +msgid "Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present" +msgstr "" + +#: ../../../CHANGELOG.md:2635 +msgid "Improved keyboard accessibility on player, queue and various controls (#576)" +msgstr "" + +#: ../../../CHANGELOG.md:2636 +msgid "Improved performance when listing playable tracks, albums and artists" +msgstr "" + +#: ../../../CHANGELOG.md:2637 +msgid "Increased default upload limit from 30 to 100MB (#654)" +msgstr "" + +#: ../../../CHANGELOG.md:2638 +msgid "Load env file in config/.env automatically to avoid sourcing it by hand (#626)" +msgstr "" + +#: ../../../CHANGELOG.md:2639 +msgid "More resilient date parsing during audio import, will not crash anymore on invalid dates (#622)" +msgstr "" + +#: ../../../CHANGELOG.md:2641 +msgid "Now start radios immediately, skipping any existing tracks in queue (#585)" +msgstr "" + +#: ../../../CHANGELOG.md:2642 +msgid "Officially support connecting to a password protected redis server, with the redis://:password@localhost:6379/0 scheme (#640)" +msgstr "" + +#: ../../../CHANGELOG.md:2644 +msgid "Performance improvement when fetching favorites, down to a single, small http request" +msgstr "" + +#: ../../../CHANGELOG.md:2645 +msgid "Removed \"Activity\" page, since all the data is available on the \"Browse\" page (#600)" +msgstr "" + +#: ../../../CHANGELOG.md:2646 +msgid "Removed the need to specify the DJANGO_ALLOWED_HOSTS variable" +msgstr "" + +#: ../../../CHANGELOG.md:2647 +msgid "Restructured the footer, added useful links and removed unused content" +msgstr "" + +#: ../../../CHANGELOG.md:2648 +msgid "Show short entries first in search results to improve UX" +msgstr "" + +#: ../../../CHANGELOG.md:2649 +msgid "Store disc number and order tracks by disc number / position) (#507)" +msgstr "" + +#: ../../../CHANGELOG.md:2650 +msgid "Strip EXIF metadata from uploaded avatars to avoid leaking private data (#374)" +msgstr "" + +#: ../../../CHANGELOG.md:2651 +msgid "Support blind key rotation in HTTP Signatures (#658)" +msgstr "" + +#: ../../../CHANGELOG.md:2652 +msgid "Support setting a server URL in settings.json (#650)" +msgstr "" + +#: ../../../CHANGELOG.md:2653 +msgid "Updated default docker postgres version from 9.4 to 11 (#656)" +msgstr "" + +#: ../../../CHANGELOG.md:2654 +msgid "Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657)" +msgstr "" + +#: ../../../CHANGELOG.md:2655 +msgid "Improved test suite speed by reducing / disabling expensive operations (#648)" +msgstr "" + +#: ../../../CHANGELOG.md:2659 +msgid "Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469)" +msgstr "" + +#: ../../../CHANGELOG.md:2660 +msgid "Upgraded core dependencies to fix websocket/messaging issues and possible memory leaks (#643)" +msgstr "" + +#: ../../../CHANGELOG.md:2661 +msgid "Fix \".None\" extension when downloading Flac file (#473)" +msgstr "" + +#: ../../../CHANGELOG.md:2662 +msgid "Fixed None extension when downloading an in-place imported file (#621)" +msgstr "" + +#: ../../../CHANGELOG.md:2663 +msgid "Added a script to prune pre 0.17 federated tracks (#564)" +msgstr "" + +#: ../../../CHANGELOG.md:2664 +msgid "Advertise public libraries properly in ActivityPub representations (#553)" +msgstr "" + +#: ../../../CHANGELOG.md:2665 +msgid "Allow opus file upload (#598)" +msgstr "" + +#: ../../../CHANGELOG.md:2666 +msgid "Do not display \"view on MusicBrainz\" button if we miss the mbid (#422)" +msgstr "" + +#: ../../../CHANGELOG.md:2667 +msgid "Do not try to create unaccent extension if it's already present (#663)" +msgstr "" + +#: ../../../CHANGELOG.md:2668 +msgid "Ensure admin links in sidebar are displayed for users with relevant permissions, and only them (#597)" +msgstr "" + +#: ../../../CHANGELOG.md:2669 +msgid "Fix broken websocket connection under Chrome browser (#589)" +msgstr "" + +#: ../../../CHANGELOG.md:2670 +msgid "Fix play button not starting playback with empty queue (#632)" +msgstr "" + +#: ../../../CHANGELOG.md:2671 +msgid "Fixed a styling inconsistency on about page when instance description was missing (#659)" +msgstr "" + +#: ../../../CHANGELOG.md:2672 +msgid "Fixed a UI discrepancy in playlist tracks count (#647)" +msgstr "" + +#: ../../../CHANGELOG.md:2673 +msgid "Fixed greyed tracks in radio builder and detail page (#637)" +msgstr "" + +#: ../../../CHANGELOG.md:2674 +msgid "Fixed inconsistencies in subsonic error responses (#616)" +msgstr "" + +#: ../../../CHANGELOG.md:2675 +msgid "Fixed incorrect icon for \"next track\" in player control (#613)" +msgstr "" + +#: ../../../CHANGELOG.md:2676 +msgid "Fixed malformed search string when redirecting to LyricsWiki (#608)" +msgstr "" + +#: ../../../CHANGELOG.md:2677 +msgid "Fixed missing track count on various library cards (#581)" +msgstr "" + +#: ../../../CHANGELOG.md:2678 +msgid "Fixed skipped track when appending multiple tracks to the queue under certain conditions (#209)" +msgstr "" + +#: ../../../CHANGELOG.md:2679 +msgid "Fixed wrong album/track count on artist page (#599)" +msgstr "" + +#: ../../../CHANGELOG.md:2680 +msgid "Hide unplayable/empty playlists in \"Browse playlist\" pages (#424)" +msgstr "" + +#: ../../../CHANGELOG.md:2681 +msgid "Initial UI render using correct language from browser (#644)" +msgstr "" + +#: ../../../CHANGELOG.md:2682 +msgid "Invalid URI for reverse proxy websocket with apache (#617)" +msgstr "" + +#: ../../../CHANGELOG.md:2683 +msgid "Properly encode Wikipedia and lyrics search urls (#470)" +msgstr "" + +#: ../../../CHANGELOG.md:2684 +msgid "Refresh profile after user settings update to avoid cache issues (#606)" +msgstr "" + +#: ../../../CHANGELOG.md:2685 +msgid "Use role=button instead of empty links for player controls (#610)" +msgstr "" + +#: ../../../CHANGELOG.md:2689 +msgid "Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642)" +msgstr "" + +#: ../../../CHANGELOG.md:2690 +msgid "Document how to find and use library id when importing files in CLI (#562)" +msgstr "" + +#: ../../../CHANGELOG.md:2691 +msgid "Fix documentation typos (#645)" +msgstr "" + +#: ../../../CHANGELOG.md:2693 +msgid "0.17 (2018-10-07)" +msgstr "" + +#: ../../../CHANGELOG.md:2695 +msgid "Per user libraries" +msgstr "" + +#: ../../../CHANGELOG.md:2697 +msgid "This release contains a big change in music management. This has a lot of impact on how Funkwhale behaves, and you should have a look at https://docs.funkwhale.audio/upgrading/0.17.html for information about what changed and how to migrate." +msgstr "" + +#: ../../../CHANGELOG.md:2704 +msgid "Per user libraries (#463, also fixes #160 and #147)" +msgstr "" + +#: ../../../CHANGELOG.md:2705 +msgid "Authentication using a LDAP directory (#194)" +msgstr "" + +#: ../../../CHANGELOG.md:2709 +msgid "Add configuration option to set Musicbrainz hostname" +msgstr "" + +#: ../../../CHANGELOG.md:2710 +msgid "Add sign up link in the sidebar (#408)" +msgstr "" + +#: ../../../CHANGELOG.md:2711 +msgid "Added a library widget to display libraries associated with a track, album and artist (#551)" +msgstr "" + +#: ../../../CHANGELOG.md:2713 +msgid "Ensure from_activity field is not required in django's admin (#546)" +msgstr "" + +#: ../../../CHANGELOG.md:2714 +msgid "Move setting link from profile page to the sidebar (#406)" +msgstr "" + +#: ../../../CHANGELOG.md:2715 +msgid "Simplified and less error-prone nginx setup (#358)" +msgstr "" + +#: ../../../CHANGELOG.md:2719 +msgid "Do not restart current song when rordering queue, deleting tracks from queue or adding tracks to queue (#464)" +msgstr "" + +#: ../../../CHANGELOG.md:2721 +msgid "Fix broken icons in playlist editor (#515)" +msgstr "" + +#: ../../../CHANGELOG.md:2722 +msgid "Fixed a few untranslated strings (#559)" +msgstr "" + +#: ../../../CHANGELOG.md:2723 +msgid "Fixed split album when importing from federation (#346)" +msgstr "" + +#: ../../../CHANGELOG.md:2724 +msgid "Fixed toggle mute in volume bar does not restore previous volume level (#514)" +msgstr "" + +#: ../../../CHANGELOG.md:2725 +msgid "Fixed wrong env file URL and display bugs in deployment documentation (#520)" +msgstr "" + +#: ../../../CHANGELOG.md:2726 +msgid "Fixed wrong title in PlayButton (#435)" +msgstr "" + +#: ../../../CHANGELOG.md:2727 +msgid "Remove transparency on artist page button (#517)" +msgstr "" + +#: ../../../CHANGELOG.md:2728 +msgid "Set sane width default for ui cards and center play button (#530)" +msgstr "" + +#: ../../../CHANGELOG.md:2729 +msgid "Updated wrong icon and copy in play button dropdown (#436)" +msgstr "" + +#: ../../../CHANGELOG.md:2733 +msgid "Fixed wrong URLs for docker / nginx files in documentation (#537)" +msgstr "" + +#: ../../../CHANGELOG.md:2737 +msgid "Added a merge request template and more documentation about the changelog" +msgstr "" + +#: ../../../CHANGELOG.md:2739 +msgid "Using a LDAP directory to authenticate to your Funkwhale instance" +msgstr "" + +#: ../../../CHANGELOG.md:2741 +msgid "Funkwhale now support LDAP as an authentication source: you can configure your instance to delegate login to a LDAP directory, which is especially useful when you have an existing directory and don't want to manage users manually." +msgstr "" + +#: ../../../CHANGELOG.md:2746 +msgid "You can use this authentication backend side by side with the classic one." +msgstr "" + +#: ../../../CHANGELOG.md:2748 +msgid "Have a look at https://docs.funkwhale.audio/installation/ldap.html for detailed instructions on how to set this up." +msgstr "" + +#: ../../../CHANGELOG.md:2751 +msgid "Simplified nginx setup [Docker: Manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:2753 +msgid "We've received a lot of user feedback regarding our installation process, and it seems the proxy part is the one which is the most confusing and difficult. Unfortunately, this is also the one where errors and mistakes can completely break the application." +msgstr "" + +#: ../../../CHANGELOG.md:2758 +msgid "To make things easier for everyone, we now offer a simplified deployment process for the reverse proxy part. This will make upgrade of the proxy configuration significantly easier on docker deployments." +msgstr "" + +#: ../../../CHANGELOG.md:2762 +msgid "On non-docker instances, you have nothing to do." +msgstr "" + +#: ../../../CHANGELOG.md:2764 +msgid "If you have a dockerized instance, here is the upgrade path." +msgstr "" + +#: ../../../CHANGELOG.md:2766 +msgid "First, tweak your .env file:" +msgstr "" + +#: ../../../CHANGELOG.md:2780 +msgid "Then, add the following block at the end of your docker-compose.yml file:" +msgstr "" + +#: ../../../CHANGELOG.md:2818 +msgid "By doing that, you'll enable a dockerized nginx that will automatically be configured to serve your Funkwhale instance." +msgstr "" + +#: ../../../CHANGELOG.md:2821 +msgid "Download the required configuration files for the nginx container:" +msgstr "" + +#: ../../../CHANGELOG.md:2830 +msgid "Update the funkwhale.conf configuration of your server's reverse-proxy:" +msgstr "" + +#: ../../../CHANGELOG.md:2881 +msgid "Check that your configuration is valid then reload:" +msgstr "" + +#: ../../../CHANGELOG.md:2888 +msgid "0.16.3 (2018-08-21)" +msgstr "" + +#: ../../../CHANGELOG.md:2890 +#: ../../../CHANGELOG.md:2903 +#: ../../../CHANGELOG.md:2915 +#: ../../../CHANGELOG.md:2988 +#: ../../../CHANGELOG.md:3210 +#: ../../../CHANGELOG.md:3283 +#: ../../../CHANGELOG.md:3398 +#: ../../../CHANGELOG.md:3483 +#: ../../../CHANGELOG.md:3681 +#: ../../../CHANGELOG.md:3791 +#: ../../../CHANGELOG.md:3934 +msgid "Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html" +msgstr "" + +#: ../../../CHANGELOG.md:2895 +msgid "Fixed front-end not contacting the proper path on the API (!385)" +msgstr "" + +#: ../../../CHANGELOG.md:2897 +msgid "0.16.2 (2018-08-21)" +msgstr "" + +#: ../../../CHANGELOG.md:2900 +msgid "**This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.**" +msgstr "" + +#: ../../../CHANGELOG.md:2908 +msgid "Ensure we always have a default api url set on first load to avoid displaying the instance picker (#490)" +msgstr "" + +#: ../../../CHANGELOG.md:2910 +msgid "Fixed CLI importer syntax error because of async reserved keyword usage (#494)" +msgstr "" + +#: ../../../CHANGELOG.md:2913 +msgid "0.16.1 (2018-08-19)" +msgstr "" + +#: ../../../CHANGELOG.md:2920 +msgid "Make funkwhale themable by loading external stylesheets (#456)" +msgstr "" + +#: ../../../CHANGELOG.md:2924 +msgid "Add link to admin on \"Staff member\" button (#202)" +msgstr "" + +#: ../../../CHANGELOG.md:2925 +msgid "Can now add a description to radios and better radio cards (#331)" +msgstr "" + +#: ../../../CHANGELOG.md:2926 +msgid "Display track duration in track tables (#461)" +msgstr "" + +#: ../../../CHANGELOG.md:2927 +msgid "More permissive default permissions for front-end files (#388)" +msgstr "" + +#: ../../../CHANGELOG.md:2928 +msgid "Simpler configuration and toolchain for the front-end using vue-cli (!375)" +msgstr "" + +#: ../../../CHANGELOG.md:2929 +msgid "Use Howler to manage audio instead of our own dirty/untested code (#392)" +msgstr "" + +#: ../../../CHANGELOG.md:2933 +msgid "Fix alignment issue on top bar in Admin tabs (#395)" +msgstr "" + +#: ../../../CHANGELOG.md:2934 +msgid "Fix Apache2 permission issue preventing `/media` folder from being served correctly (#389)" +msgstr "" + +#: ../../../CHANGELOG.md:2936 +msgid "Fix loading on browse page lists causing them to go down, and dimming over the top bar (#468)" +msgstr "" + +#: ../../../CHANGELOG.md:2938 +msgid "Fixed (again): administration section not showing up in sidebar after login (#245)" +msgstr "" + +#: ../../../CHANGELOG.md:2940 +msgid "Fixed audio mimetype not showing up on track detail and list (#459)" +msgstr "" + +#: ../../../CHANGELOG.md:2941 +msgid "Fixed broken audio playback on Chrome and invisible volume control (#390)" +msgstr "" + +#: ../../../CHANGELOG.md:2942 +msgid "Fixed broken federation import on big imports due to missing transaction logic (#397)" +msgstr "" + +#: ../../../CHANGELOG.md:2944 +msgid "Fixed crash on artist pages when no cover is available (#457)" +msgstr "" + +#: ../../../CHANGELOG.md:2945 +msgid "Fixed favorited status of tracks not appearing in interface (#398)" +msgstr "" + +#: ../../../CHANGELOG.md:2946 +msgid "Fixed invitation code not prefilled in form when accessing invitation link (#476)" +msgstr "" + +#: ../../../CHANGELOG.md:2948 +msgid "Fixed typos in scheduled tasks configuration (#487)" +msgstr "" + +#: ../../../CHANGELOG.md:2949 +msgid "Removed release date error in case of empty date (#478)" +msgstr "" + +#: ../../../CHANGELOG.md:2950 +msgid "Removed white on white artist button on hover, on Album page (#393)" +msgstr "" + +#: ../../../CHANGELOG.md:2951 +msgid "Smarter date parsing during import by replacing arrow with pendulum (#376)" +msgstr "" + +#: ../../../CHANGELOG.md:2952 +msgid "Display public playlists properly for anonymous users (#488)" +msgstr "" + +#: ../../../CHANGELOG.md:2954 +#: ../../../CHANGELOG.md:3042 +msgid "i18n:" +msgstr "" + +#: ../../../CHANGELOG.md:2956 +msgid "Added portuguese, spanish and german translations" +msgstr "" + +#: ../../../CHANGELOG.md:2958 +msgid "Custom themes for Funkwhale" +msgstr "" + +#: ../../../CHANGELOG.md:2960 +msgid "If you ever wanted to give a custom look and feel to your instance, this is now possible." +msgstr "" + +#: ../../../CHANGELOG.md:2962 +msgid "Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more!" +msgstr "" + +#: ../../../CHANGELOG.md:2964 +msgid "Fix Apache2 configuration file for media block [Manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:2966 +msgid "The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served." +msgstr "" + +#: ../../../CHANGELOG.md:2968 +msgid "On Apache2 setups, you have to replace the following line:" +msgstr "" + +#: ../../../CHANGELOG.md:2974 +msgid "with:" +msgstr "" + +#: ../../../CHANGELOG.md:2980 +msgid "You can now restart your server:" +msgstr "" + +#: ../../../CHANGELOG.md:2986 +msgid "0.16 (2018-07-22)" +msgstr "" + +#: ../../../CHANGELOG.md:2993 +msgid "Complete redesign of the library home and playlist pages (#284)" +msgstr "" + +#: ../../../CHANGELOG.md:2994 +msgid "Expose ActivityPub actors for users (#317)" +msgstr "" + +#: ../../../CHANGELOG.md:2995 +msgid "Implemented a basic but functional Github-like search on federated tracks list (#344)" +msgstr "" + +#: ../../../CHANGELOG.md:2997 +msgid "Internationalized interface as well as translations for Arabic, French, Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167)" +msgstr "" + +#: ../../../CHANGELOG.md:2999 +msgid "Users can now upload an avatar in their settings page (#257)" +msgstr "" + +#: ../../../CHANGELOG.md:3003 +msgid "Added feedback when creating/updating radio (#302)" +msgstr "" + +#: ../../../CHANGELOG.md:3004 +msgid "Apply restrictions to username characters during signup" +msgstr "" + +#: ../../../CHANGELOG.md:3005 +msgid "Autoselect best language based on browser configuration (#386)" +msgstr "" + +#: ../../../CHANGELOG.md:3006 +msgid "Can now order tracks on federated track list (#326)" +msgstr "" + +#: ../../../CHANGELOG.md:3007 +msgid "Can now relaunch pending import jobs from the web interface (#323)" +msgstr "" + +#: ../../../CHANGELOG.md:3008 +msgid "Ensure we do not display pagination on single pages (#334)" +msgstr "" + +#: ../../../CHANGELOG.md:3009 +msgid "Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and MUSIC_DIRECTORY_PATH in the deployment .env file (#350)" +msgstr "" + +#: ../../../CHANGELOG.md:3011 +msgid "Make some space for the volume slider to allow precise control (#318)" +msgstr "" + +#: ../../../CHANGELOG.md:3012 +msgid "Removed django-cacheops dependency" +msgstr "" + +#: ../../../CHANGELOG.md:3013 +msgid "Store track artist and album artist separately (#237) Better handling of tracks with a different artist than the album artist" +msgstr "" + +#: ../../../CHANGELOG.md:3015 +msgid "The navigation bar of Library is now fixed (#375)" +msgstr "" + +#: ../../../CHANGELOG.md:3016 +msgid "Use thumbnails for avatars and covers to reduce bandwidth" +msgstr "" + +#: ../../../CHANGELOG.md:3020 +msgid "Ensure 750 permissions on CI artifacts (#332)" +msgstr "" + +#: ../../../CHANGELOG.md:3021 +msgid "Ensure images are not cropped in queue (#337)" +msgstr "" + +#: ../../../CHANGELOG.md:3022 +msgid "Ensure we do not import artists with empty names (#351)" +msgstr "" + +#: ../../../CHANGELOG.md:3023 +msgid "Fix notifications not closing when clicking on the cross (#366)" +msgstr "" + +#: ../../../CHANGELOG.md:3024 +msgid "Fix the most annoying offset in the whole fediverse (#369)" +msgstr "" + +#: ../../../CHANGELOG.md:3025 +msgid "Fixed persistent message in playlist modal (#304)" +msgstr "" + +#: ../../../CHANGELOG.md:3026 +msgid "Fixed unfiltered results in favorites API (#384)" +msgstr "" + +#: ../../../CHANGELOG.md:3027 +msgid "Raise a warning instead of crashing when getting a broken path in file import (#138)" +msgstr "" + +#: ../../../CHANGELOG.md:3029 +msgid "Remove parallelization of uploads during import to avoid crashing small servers (#382)" +msgstr "" + +#: ../../../CHANGELOG.md:3031 +msgid "Subsonic API login is now case insensitive (#339)" +msgstr "" + +#: ../../../CHANGELOG.md:3032 +msgid "Validate Date header in HTTP Signatures (#328)" +msgstr "" + +#: ../../../CHANGELOG.md:3036 +msgid "Added troubleshotting and technical overview documentation (#256)" +msgstr "" + +#: ../../../CHANGELOG.md:3037 +msgid "Arch Linux installation steps" +msgstr "" + +#: ../../../CHANGELOG.md:3038 +msgid "Document that users can use Ultrasonic on Android (#316)" +msgstr "" + +#: ../../../CHANGELOG.md:3039 +msgid "Fixed a couple of typos" +msgstr "" + +#: ../../../CHANGELOG.md:3040 +msgid "Some cosmetic improvements to the doc" +msgstr "" + +#: ../../../CHANGELOG.md:3044 +msgid "Arabic translation (!302)" +msgstr "" + +#: ../../../CHANGELOG.md:3045 +msgid "Polish translation (!304)" +msgstr "" + +#: ../../../CHANGELOG.md:3047 +msgid "Library home and playlist page overhaul" +msgstr "" + +#: ../../../CHANGELOG.md:3049 +msgid "The library home page have been completely redesigned to include:" +msgstr "" + +#: ../../../CHANGELOG.md:3051 +msgid "other users activity (listenings, playlists and favorites)" +msgstr "" + +#: ../../../CHANGELOG.md:3052 +msgid "recently imported albums" +msgstr "" + +#: ../../../CHANGELOG.md:3054 +msgid "We think this new version showcases more music in a more useful way, let us know what you think about it!" +msgstr "" + +#: ../../../CHANGELOG.md:3057 +msgid "The playlist page have been updated as well." +msgstr "" + +#: ../../../CHANGELOG.md:3059 +msgid "Internationalized interface" +msgstr "" + +#: ../../../CHANGELOG.md:3061 +msgid "After months of work, we're proud to announce our interface is now ready for internationalization." +msgstr "" + +#: ../../../CHANGELOG.md:3064 +msgid "Translators have already started the work of translating Funkwhale in 8 different languages, and we're ready to add more as needed." +msgstr "" + +#: ../../../CHANGELOG.md:3067 +msgid "You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/" +msgstr "" + +#: ../../../CHANGELOG.md:3069 +msgid "Better handling of tracks with a different artist than the album artist" +msgstr "" + +#: ../../../CHANGELOG.md:3071 +msgid "Some tracks involve a different artist than the album artist (e.g. a featuring) and Funkwhale has been known to do weird things when importing such tracks, resulting in albums that contained a single track, for instance." +msgstr "" + +#: ../../../CHANGELOG.md:3075 +msgid "The situation should be improved with this release, as Funkwhale is now able to store separately the track and album artist, and display it properly in the interface." +msgstr "" + +#: ../../../CHANGELOG.md:3078 +msgid "Users now have an ActivityPub Actor [Manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:3080 +msgid "In the process of implementing federation for user activity such as listening history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation." +msgstr "" + +#: ../../../CHANGELOG.md:3083 +msgid "This does not means the federation is working, but this is a needed step to implement it." +msgstr "" + +#: ../../../CHANGELOG.md:3085 +msgid "Those profiles will be created automatically for new users, but you have to run a command to create them for existing users." +msgstr "" + +#: ../../../CHANGELOG.md:3100 +msgid "This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times." +msgstr "" + +#: ../../../CHANGELOG.md:3102 +msgid "Image thumbnails [Manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:3104 +msgid "To reduce bandwidth usage on slow or limited connexions and improve performance in general, we now use smaller images in the front-end. For instance, if you have an album cover with a 1000x1000 pixel size, we will create smaller versions of this image (50x50, 200x200, 400x400) and reference those resized version when we don't actually need the original image." +msgstr "" + +#: ../../../CHANGELOG.md:3110 +msgid "Thumbnail will be created automatically for new objects, however, you have to launch a manual command to deal with existing ones." +msgstr "" + +#: ../../../CHANGELOG.md:3125 +msgid "This should be quite fast but may take up to a few minutes depending on the number of albums you have in database. It is safe to interrupt the process or rerun it multiple times." +msgstr "" + +#: ../../../CHANGELOG.md:3128 +msgid "Improved search on federated tracks list" +msgstr "" + +#: ../../../CHANGELOG.md:3130 +msgid "Having a powerful but easy-to-use search is important but difficult to achieve, especially if you do not want to have a real complex search interface." +msgstr "" + +#: ../../../CHANGELOG.md:3133 +msgid "Github does a pretty good job with that, using a structured but simple query system (See https://help.github.com/articles/searching-issues-and-pull-requests/#search-only-issues-or-pull-requests)." +msgstr "" + +#: ../../../CHANGELOG.md:3136 +msgid "This release implements a limited but working subset of this query system. You can use it only on the federated tracks list (/manage/federation/tracks) at the moment, but depending on feedback it will be rolled-out on other pages as well." +msgstr "" + +#: ../../../CHANGELOG.md:3139 +msgid "This is the type of query you can run:" +msgstr "" + +#: ../../../CHANGELOG.md:3141 +msgid "`hello world`: search for \"hello\" and \"world\" in all the available fields" +msgstr "" + +#: ../../../CHANGELOG.md:3142 +msgid "`hello in:artist` search for results where artist name is \"hello\"" +msgstr "" + +#: ../../../CHANGELOG.md:3143 +msgid "`spring in:artist,album` search for results where artist name or album title contain \"spring\"" +msgstr "" + +#: ../../../CHANGELOG.md:3144 +msgid "`artist:hello` search for results where artist name equals \"hello\"" +msgstr "" + +#: ../../../CHANGELOG.md:3145 +msgid "`artist:\"System of a Down\" domain:instance.funkwhale` search for results where artist name equals \"System of a Down\" and inside \"instance.funkwhale\" library" +msgstr "" + +#: ../../../CHANGELOG.md:3147 +msgid "Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set explicitly [Manual action required]" +msgstr "" + +#: ../../../CHANGELOG.md:3149 +msgid "In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing some deployment issues on non-docker setups when people forgot to uncomment them." +msgstr "" + +#: ../../../CHANGELOG.md:3152 +msgid "From now on, those variables are uncommented, and will also be used on docker setups to mount the volumes automatically in the docker-compose.yml file. This has been a source of headache as well in some deployments, where you had to update both the .env file and the compose file." +msgstr "" + +#: ../../../CHANGELOG.md:3157 +msgid "This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH), whose values are now used directly to set up the proper Docker volumes." +msgstr "" + +#: ../../../CHANGELOG.md:3160 +msgid "This will only affect new deployments though. If you want to benefit from this on an existing instance, do a backup of your `.env` and `docker-compose.yml` files and apply the following changes:" +msgstr "" + +#: ../../../CHANGELOG.md:3163 +msgid "Ensure `MEDIA_ROOT` is uncommented in your .env file and match the absolute path where media files are stored on your host (`/srv/funkwhale/data/media` by default)" +msgstr "" + +#: ../../../CHANGELOG.md:3165 +msgid "Ensure `STATIC_ROOT` is uncommented in your .env file and match the absolute path where static files are stored on your host (`/srv/funkwhale/data/static` by default)" +msgstr "" + +#: ../../../CHANGELOG.md:3167 +msgid "If you use in-place import:" +msgstr "" + +#: ../../../CHANGELOG.md:3168 +msgid "Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music`" +msgstr "" + +#: ../../../CHANGELOG.md:3169 +msgid "Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files are stored (`/srv/funkwhale/data/music` by default)" +msgstr "" + +#: ../../../CHANGELOG.md:3171 +msgid "Edit your docker-compose.yml file to reflect the changes:" +msgstr "" + +#: ../../../CHANGELOG.md:3172 +msgid "Search for volumes (there should be two occurrences) that contains `/app/funkwhale_api/media` on the right side, and replace the whole line with `- \"${MEDIA_ROOT}:${MEDIA_ROOT}\"`" +msgstr "" + +#: ../../../CHANGELOG.md:3174 +msgid "Search for a volume that contains `/app/staticfiles` on the right side, and replace the whole line with `- \"${STATIC_ROOT}:${STATIC_ROOT}\"`" +msgstr "" + +#: ../../../CHANGELOG.md:3176 +msgid "If you use in-place import, search for volumes (there should be two occurrences) that contains `/music:ro` on the right side, and replace the whole line with `- \"${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro\"`" +msgstr "" + +#: ../../../CHANGELOG.md:3179 +msgid "In the end, the `volumes` directives of your containers should look like that:" +msgstr "" + +#: ../../../CHANGELOG.md:3198 +msgid "Removed Cacheops dependency" +msgstr "" + +#: ../../../CHANGELOG.md:3200 +msgid "We removed one of our dependency named django-cacheops. It was unly used in a few places, and not playing nice with other dependencies." +msgstr "" + +#: ../../../CHANGELOG.md:3203 +msgid "You can safely remove this dependency in your environment with `pip uninstall django-cacheops` if you're not using docker." +msgstr "" + +#: ../../../CHANGELOG.md:3206 +msgid "You can also safely remove any `CACHEOPS_ENABLED` setting from your environment file." +msgstr "" + +#: ../../../CHANGELOG.md:3208 +msgid "0.15 (2018-06-24)" +msgstr "" + +#: ../../../CHANGELOG.md:3215 +msgid "Added admin interface to manage import requests (#190)" +msgstr "" + +#: ../../../CHANGELOG.md:3216 +msgid "Added replace flag during import to replace already present tracks with a new version of their track file (#222)" +msgstr "" + +#: ../../../CHANGELOG.md:3218 +msgid "Funkwhale's front-end can now point to any instance (#327) Removed front-end and back-end coupling" +msgstr "" + +#: ../../../CHANGELOG.md:3220 +msgid "Management interface for users (#212)" +msgstr "" + +#: ../../../CHANGELOG.md:3221 +msgid "New invite system (#248) New invite system" +msgstr "" + +#: ../../../CHANGELOG.md:3225 +msgid "Added \"TV\" to the list of highlighted words during YouTube import (#154)" +msgstr "" + +#: ../../../CHANGELOG.md:3226 +msgid "Command line import now accepts unlimited args (#242)" +msgstr "" + +#: ../../../CHANGELOG.md:3230 +msgid "Expose track files date in manage API (#307)" +msgstr "" + +#: ../../../CHANGELOG.md:3231 +msgid "Fixed current track restart/hiccup when shuffling queue, deleting track from queue or reordering (#310)" +msgstr "" + +#: ../../../CHANGELOG.md:3233 +msgid "Include user's current private playlists on playlist list (#302)" +msgstr "" + +#: ../../../CHANGELOG.md:3234 +msgid "Remove link to generic radios, since they don't have detail pages (#324)" +msgstr "" + +#: ../../../CHANGELOG.md:3238 +msgid "Document that Funkwhale may be installed with YunoHost (#325)" +msgstr "" + +#: ../../../CHANGELOG.md:3239 +msgid "Documented a saner layout with symlinks for in-place imports (#254)" +msgstr "" + +#: ../../../CHANGELOG.md:3240 +msgid "Upgrade documentation now use the correct user on non-docker setups (#265)" +msgstr "" + +#: ../../../CHANGELOG.md:3242 +msgid "Invite system" +msgstr "" + +#: ../../../CHANGELOG.md:3244 +msgid "On closed instances, it has always been a little bit painful to create accounts by hand for new users. This release solve that by adding invitations." +msgstr "" + +#: ../../../CHANGELOG.md:3247 +msgid "You can generate invitation codes via the \"users\" admin interface (you'll find a link in the sidebar). Those codes are valid for 14 days, and can be used once to create a new account on the instance, even if registrations are closed." +msgstr "" + +#: ../../../CHANGELOG.md:3251 +msgid "By default, we generate a random code for invitations, but you can also use custom codes if you need to print them or make them fancier ;)" +msgstr "" + +#: ../../../CHANGELOG.md:3254 +msgid "Invitations generation and management requires the \"settings\" permission." +msgstr "" + +#: ../../../CHANGELOG.md:3256 +msgid "Removed front-end and back-end coupling" +msgstr "" + +#: ../../../CHANGELOG.md:3258 +msgid "Even though Funkwhale's front-end has always been a Single Page Application, talking to an API, it was only able to talk to an API on the same domain." +msgstr "" + +#: ../../../CHANGELOG.md:3261 +msgid "There was no real technical justification behind this (only laziness), and it was also blocking interesting use cases:" +msgstr "" + +#: ../../../CHANGELOG.md:3264 +msgid "Use multiple customized versions of the front-end with the same instance" +msgstr "" + +#: ../../../CHANGELOG.md:3265 +msgid "Use a customized version of the front-end with multiple instances" +msgstr "" + +#: ../../../CHANGELOG.md:3266 +msgid "Use a locally hosted front-end with a remote API, which is especially useful in development" +msgstr "" + +#: ../../../CHANGELOG.md:3268 +msgid "From now on, Funkwhale's front-end can connect to any Funkwhale server. You can change the server you are connecting to in the footer." +msgstr "" + +#: ../../../CHANGELOG.md:3271 +msgid "Fixing this also unlocked a really interesting feature in our development/review workflow: by leveraging Gitlab CI and review apps, we are now able to deploy automatically live versions of a merge request, making it possible for anyone to review front-end changes easily, without the need to install a local environment." +msgstr "" + +#: ../../../CHANGELOG.md:3276 +msgid "0.14.2 (2018-06-16)" +msgstr "" + +#: ../../../CHANGELOG.md:3279 +msgid "This release contains a fix for a permission issue. You should upgrade as soon as possible. Read the changelog below for more details." +msgstr "" + +#: ../../../CHANGELOG.md:3288 +msgid "Added feedback on shuffle button (#262)" +msgstr "" + +#: ../../../CHANGELOG.md:3289 +msgid "Added multiple warnings in the documentation that you should never run makemigrations yourself (#291)" +msgstr "" + +#: ../../../CHANGELOG.md:3291 +msgid "Album cover served in http (#264)" +msgstr "" + +#: ../../../CHANGELOG.md:3292 +msgid "Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25) (!252)" +msgstr "" + +#: ../../../CHANGELOG.md:3294 +msgid "Display file size in human format during file upload (#289)" +msgstr "" + +#: ../../../CHANGELOG.md:3295 +msgid "Switch from BSD-3 licence to AGPL-3 licence (#280)" +msgstr "" + +#: ../../../CHANGELOG.md:3299 +msgid "Ensure radios can only be edited and deleted by their owners (#311)" +msgstr "" + +#: ../../../CHANGELOG.md:3300 +msgid "Fixed admin menu not showing after login (#245)" +msgstr "" + +#: ../../../CHANGELOG.md:3301 +msgid "Fixed broken pagination in Subsonic API (#295)" +msgstr "" + +#: ../../../CHANGELOG.md:3302 +msgid "Fixed duplicated websocket connection on timeline (#287)" +msgstr "" + +#: ../../../CHANGELOG.md:3306 +msgid "Improved documentation about in-place imports setup (#298)" +msgstr "" + +#: ../../../CHANGELOG.md:3310 +msgid "Added Black and flake8 checks in CI to ensure consistent code styling and formatting (#297)" +msgstr "" + +#: ../../../CHANGELOG.md:3312 +msgid "Added bug and feature issue templates (#299)" +msgstr "" + +#: ../../../CHANGELOG.md:3314 +msgid "Permission issues on radios" +msgstr "" + +#: ../../../CHANGELOG.md:3316 +msgid "Because of an error in the way we checked user permissions on radios, public radios could be deleted by any logged-in user, even if they were not the owner of the radio." +msgstr "" + +#: ../../../CHANGELOG.md:3320 +msgid "We recommend instances owners to upgrade as fast as possible to avoid any abuse and data loss." +msgstr "" + +#: ../../../CHANGELOG.md:3323 +msgid "Funkwhale is now licenced under AGPL-3" +msgstr "" + +#: ../../../CHANGELOG.md:3325 +msgid "Following the recent switch made by PixelFed (https://github.com/dansup/pixelfed/issues/143), we decided along with the community to relicence Funkwhale under the AGPL-3 licence. We did this switch for various reasons:" +msgstr "" + +#: ../../../CHANGELOG.md:3330 +msgid "This is better aligned with other fediverse software" +msgstr "" + +#: ../../../CHANGELOG.md:3331 +msgid "It prohibits anyone to distribute closed-source and proprietary forks of Funkwhale" +msgstr "" + +#: ../../../CHANGELOG.md:3333 +msgid "As end users and instance owners, this does not change anything. You can continue to use Funkwhale exactly as you did before :)" +msgstr "" + +#: ../../../CHANGELOG.md:3336 +msgid "Apache support for websocket" +msgstr "" + +#: ../../../CHANGELOG.md:3338 +msgid "Up until now, our Apache2 configuration was not working with websockets. This is now solved by adding this at the beginning of your Apache2 configuration file:" +msgstr "" + +#: ../../../CHANGELOG.md:3345 +msgid "And this, before the \"/api\" block:" +msgstr "" + +#: ../../../CHANGELOG.md:3352 +msgid "Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available." +msgstr "" + +#: ../../../CHANGELOG.md:3354 +msgid "Serving album covers in https (Apache2 proxy)" +msgstr "" + +#: ../../../CHANGELOG.md:3356 +msgid "Two issues are addressed here. The first one was about Django replying with mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` allows Django to know that the client is using https, and that the reply must be https as well." +msgstr "" + +#: ../../../CHANGELOG.md:3361 +msgid "Second issue was a problem of permission causing Apache a denied access to album cover folder. It is solved by adding another block for this path in the Apache configuration file for funkwhale." +msgstr "" + +#: ../../../CHANGELOG.md:3365 +msgid "Here is how to modify your `funkwhale.conf` apache2 configuration:" +msgstr "" + +#: ../../../CHANGELOG.md:3385 +msgid "About the makemigrations warning" +msgstr "" + +#: ../../../CHANGELOG.md:3387 +msgid "You may sometimes get the following warning while applying migrations:" +msgstr "" + +#: ../../../CHANGELOG.md:3393 +msgid "This is a warning, not an error, and it can be safely ignored. Never run the `makemigrations` command yourself." +msgstr "" + +#: ../../../CHANGELOG.md:3396 +msgid "0.14.1 (2018-06-06)" +msgstr "" + +#: ../../../CHANGELOG.md:3402 +msgid "Display server version in the footer (#270)" +msgstr "" + +#: ../../../CHANGELOG.md:3403 +msgid "fix_track_files will now update files with bad mimetype (and not only the one with no mimetype) (#273)" +msgstr "" + +#: ../../../CHANGELOG.md:3405 +msgid "Huge performance boost (~x5 to x7) during CLI import that queries MusicBrainz (#288)" +msgstr "" + +#: ../../../CHANGELOG.md:3407 +msgid "Removed alpha-state transcoding support (#271)" +msgstr "" + +#: ../../../CHANGELOG.md:3411 +msgid "Broken logging statement during import error (#274)" +msgstr "" + +#: ../../../CHANGELOG.md:3412 +msgid "Broken search bar on library home (#278)" +msgstr "" + +#: ../../../CHANGELOG.md:3413 +msgid "Do not crash when importing track with an artist that do not match the release artist (#237)" +msgstr "" + +#: ../../../CHANGELOG.md:3415 +msgid "Do not crash when tag contains multiple uuids with a / separator (#267)" +msgstr "" + +#: ../../../CHANGELOG.md:3416 +msgid "Ensure we do not store bad mimetypes (such as application/x-empty) (#266)" +msgstr "" + +#: ../../../CHANGELOG.md:3417 +msgid "Fix broken \"play all\" button that played only 25 tracks (#281)" +msgstr "" + +#: ../../../CHANGELOG.md:3418 +msgid "Fixed broken track download modal (overflow and wrong URL) (#239)" +msgstr "" + +#: ../../../CHANGELOG.md:3419 +msgid "Removed hardcoded size limit in file upload widget (#275)" +msgstr "" + +#: ../../../CHANGELOG.md:3423 +msgid "Added warning about \\_protected/music location in nginx configuration (#247)" +msgstr "" + +#: ../../../CHANGELOG.md:3425 +msgid "Removed alpha-state transcoding (#271)" +msgstr "" + +#: ../../../CHANGELOG.md:3427 +msgid "A few months ago, a basic transcoding feature was implemented. Due to the way this feature was designed, it was slow, CPU intensive on the server side, and very tightly coupled to the reverse-proxy configuration, preventing it to work Apache2, for instance. It was also not compatible with Subsonic clients." +msgstr "" + +#: ../../../CHANGELOG.md:3432 +msgid "Based on that, we're currently removing support for transcoding **in its current state**. The work on a better designed transcoding feature can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272." +msgstr "" + +#: ../../../CHANGELOG.md:3436 +msgid "You don't have to do anything on your side, but you may want to remove the now obsolete configuration from your reverse proxy file (nginx only):" +msgstr "" + +#: ../../../CHANGELOG.md:3481 +msgid "0.14 (2018-06-02)" +msgstr "" + +#: ../../../CHANGELOG.md:3488 +msgid "Admins can now configure default permissions that will be granted to all registered users (#236)" +msgstr "" + +#: ../../../CHANGELOG.md:3490 +msgid "Files management interface for users with \"library\" permission (#223)" +msgstr "" + +#: ../../../CHANGELOG.md:3491 +msgid "New action table component for quick and efficient batch actions (#228) This is implemented on the federated tracks pages, but will be included in other pages as well depending on the feedback." +msgstr "" + +#: ../../../CHANGELOG.md:3497 +msgid "Added a new \"upload\" permission that allows user to launch import and view their own imports (#230)" +msgstr "" + +#: ../../../CHANGELOG.md:3499 +msgid "Added Support for OggTheora in import." +msgstr "" + +#: ../../../CHANGELOG.md:3500 +msgid "Autoremove media files on model instance deletion (#241)" +msgstr "" + +#: ../../../CHANGELOG.md:3501 +msgid "Can now import a whole remote library at once thanks to new Action Table component (#164)" +msgstr "" + +#: ../../../CHANGELOG.md:3503 +msgid "Can now use album covers from flac/mp3 metadata and separate file in track directory (#219)" +msgstr "" + +#: ../../../CHANGELOG.md:3505 +msgid "Implemented getCovertArt in Subsonic API to serve album covers (#258)" +msgstr "" + +#: ../../../CHANGELOG.md:3506 +msgid "Implemented scrobble endpoint of subsonic API, listenings are now tracked correctly from third party apps that use this endpoint (#260)" +msgstr "" + +#: ../../../CHANGELOG.md:3508 +msgid "Retructured music API to increase performance and remove useless endpoints (#224)" +msgstr "" + +#: ../../../CHANGELOG.md:3513 +msgid "Consistent constraints/checks for URL size (#207)" +msgstr "" + +#: ../../../CHANGELOG.md:3514 +msgid "Display proper total number of tracks on radio detail (#225)" +msgstr "" + +#: ../../../CHANGELOG.md:3515 +msgid "Do not crash on flac import if musicbrainz tags are missing (#214)" +msgstr "" + +#: ../../../CHANGELOG.md:3516 +msgid "Empty save button in radio builder (#226)" +msgstr "" + +#: ../../../CHANGELOG.md:3517 +msgid "Ensure anonymous users can use the app if the instance is configured accordingly (#229)" +msgstr "" + +#: ../../../CHANGELOG.md:3519 +msgid "Ensure inactive users cannot get auth tokens (#218) This was already the case bug we missed some checks" +msgstr "" + +#: ../../../CHANGELOG.md:3521 +msgid "File-upload import now supports Flac files (#213)" +msgstr "" + +#: ../../../CHANGELOG.md:3522 +msgid "File-upload importer should now work properly, assuming files are tagged (#106)" +msgstr "" + +#: ../../../CHANGELOG.md:3524 +msgid "Fixed a few broken translations strings (#227)" +msgstr "" + +#: ../../../CHANGELOG.md:3525 +msgid "Fixed broken ordering in front-end lists (#179)" +msgstr "" + +#: ../../../CHANGELOG.md:3526 +msgid "Fixed ignored page_size parameter on artist and favorites list (#240)" +msgstr "" + +#: ../../../CHANGELOG.md:3527 +msgid "Read ID3Tag Tracknumber from TRCK (#220)" +msgstr "" + +#: ../../../CHANGELOG.md:3528 +msgid "We now fetch album covers regardless of the import methods (#231)" +msgstr "" + +#: ../../../CHANGELOG.md:3532 +msgid "Added missing subsonic configuration block in deployment vhost files (#249)" +msgstr "" + +#: ../../../CHANGELOG.md:3533 +msgid "Moved upgrade doc under install doc in TOC (#251)" +msgstr "" + +#: ../../../CHANGELOG.md:3537 +msgid "Removed acoustid support, as the integration was buggy and error-prone (#106)" +msgstr "" + +#: ../../../CHANGELOG.md:3539 +msgid "Files management interface" +msgstr "" + +#: ../../../CHANGELOG.md:3541 +msgid "This is the first bit of an ongoing work that will span several releases, to bring more powerful library management features to Funkwhale. This iteration includes a basic file management interface where users with the \"library\" permission can list and search available files, order them using various criteria (size, bitrate, duration...) and delete them." +msgstr "" + +#: ../../../CHANGELOG.md:3547 +msgid "New \"upload\" permission" +msgstr "" + +#: ../../../CHANGELOG.md:3549 +msgid "This new permission is helpful if you want to give upload/import rights to some users, but don't want them to be able to manage the library as a whole: although there are no controls yet for managing library in the fron-end, subsequent release will introduce management interfaces for artists, files, etc." +msgstr "" + +#: ../../../CHANGELOG.md:3555 +msgid "Because of that, users with the \"library\" permission will have much more power, and will also be able to remove content from the platform. On the other hand, users with the \"upload\" permission will only have the ability to add new content." +msgstr "" + +#: ../../../CHANGELOG.md:3560 +msgid "Also, this release also includes a new feature called \"default permissions\": those are permissions that are granted to every users on the platform. On public/open instances, this will play well with the \"upload\" permission since everyone will be able to contribute to the instance library without an admin giving the permission to every single user." +msgstr "" + +#: ../../../CHANGELOG.md:3566 +msgid "Smarter album cover importer" +msgstr "" + +#: ../../../CHANGELOG.md:3568 +msgid "In earlier versions, covers where only imported when launching a YouTube import. Starting from this release, covers will be imported regardless of the import mode (file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers in the following order:" +msgstr "" + +#: ../../../CHANGELOG.md:3573 +msgid "In the imported file itself (FLAC/MP3 only)" +msgstr "" + +#: ../../../CHANGELOG.md:3574 +msgid "In a cover.jpg or cover.png in the file directory" +msgstr "" + +#: ../../../CHANGELOG.md:3575 +msgid "By fetching cover art from Musibrainz, assuming the file is tagged correctly" +msgstr "" + +#: ../../../CHANGELOG.md:3577 +msgid "This will only work for newly imported tracks and albums though. In the future, we may offer an option to refetch album covers from the interface, but in the meantime, you can use the following snippet:" +msgstr "" + +#: ../../../CHANGELOG.md:3595 +msgid "Then launch it:" +msgstr "" + +#: ../../../CHANGELOG.md:3611 +msgid "Depending on your number of albums, the previous snippet may take some time to execute. You can interrupt it at any time using ctrl-c and relaunch it later, as it's idempotent." +msgstr "" + +#: ../../../CHANGELOG.md:3616 +msgid "Music API changes" +msgstr "" + +#: ../../../CHANGELOG.md:3618 +msgid "This release includes an API break. Even though the API is advertised as unstable, and not documented, here is a brief explanation of the change in case you are using the API in a client or in a script. Summary of the changes:" +msgstr "" + +#: ../../../CHANGELOG.md:3622 +msgid "`/api/v1/artists` does not includes a list of tracks anymore. It was to heavy to return all of this data all the time. You can get all tracks for an artist using `/api/v1/tracks?artist=artist_id`" +msgstr "" + +#: ../../../CHANGELOG.md:3625 +msgid "Additionally, `/api/v1/tracks` now support an `album` filter to filter tracks matching an album" +msgstr "" + +#: ../../../CHANGELOG.md:3627 +msgid "`/api/v1/artists/search`, `/api/v1/albums/search` and `/api/v1/tracks/search` endpoints are removed. Use `/api/v1/{artists|albums|tracks}/?q=yourquery` instead. It's also more powerful, since you can combine search with other filters and ordering options." +msgstr "" + +#: ../../../CHANGELOG.md:3631 +msgid "`/api/v1/requests/import-requests/search` endpoint is removed as well. Use `/api/v1/requests/import-requests/?q=yourquery` instead. It's also more powerful, since you can combine search with other filters and ordering options." +msgstr "" + +#: ../../../CHANGELOG.md:3636 +msgid "Of course, the front-end was updated to work with the new API, so this should not impact end-users in any way, apart from slight performance gains." +msgstr "" + +#: ../../../CHANGELOG.md:3640 +msgid "The API is still not stable and may evolve again in the future. API freeze will come at a later point." +msgstr "" + +#: ../../../CHANGELOG.md:3644 +msgid "Flac files imports via upload" +msgstr "" + +#: ../../../CHANGELOG.md:3646 +msgid "You have nothing to do to benefit from this, however, since Flac files tend to be a lot bigger than other files, you may want to increase the `client_max_body_size` value in your Nginx configuration if you plan to upload flac files." +msgstr "" + +#: ../../../CHANGELOG.md:3651 +msgid "Missing subsonic configuration block in vhost files" +msgstr "" + +#: ../../../CHANGELOG.md:3653 +msgid "Because of a missing block in the sample Nginx and Apache configurations, instances that were deployed after the 0.13 release are likely to be unable to answer to Subsonic clients (the missing bits were properly documented in the changelog)." +msgstr "" + +#: ../../../CHANGELOG.md:3658 +msgid "Ensure you have the following snippets in your Nginx or Apache configuration if you plan to use the Subsonic API." +msgstr "" + +#: ../../../CHANGELOG.md:3661 +msgid "Nginx:" +msgstr "" + +#: ../../../CHANGELOG.md:3670 +msgid "Apache2:" +msgstr "" + +#: ../../../CHANGELOG.md:3679 +msgid "0.13 (2018-05-19)" +msgstr "" + +#: ../../../CHANGELOG.md:3686 +msgid "Can now import and play flac files (#157)" +msgstr "" + +#: ../../../CHANGELOG.md:3687 +msgid "Simpler permission system (#152)" +msgstr "" + +#: ../../../CHANGELOG.md:3688 +msgid "Store file length, size and bitrate (#195)" +msgstr "" + +#: ../../../CHANGELOG.md:3689 +msgid "We now have a brand new instance settings interface in the front-end (#206)" +msgstr "" + +#: ../../../CHANGELOG.md:3693 +msgid "Disabled browsable HTML API in production (#205)" +msgstr "" + +#: ../../../CHANGELOG.md:3694 +msgid "Instances can now indicate on the nodeinfo endpoint if they want to remain private (#200)" +msgstr "" + +#: ../../../CHANGELOG.md:3699 +msgid ".well-known/nodeinfo endpoint can now answer to request with Accept: application/json (#197)" +msgstr "" + +#: ../../../CHANGELOG.md:3701 +msgid "Fixed escaping issue of track name in playlist modal (#201)" +msgstr "" + +#: ../../../CHANGELOG.md:3702 +msgid "Fixed missing dot when downloading file (#204)" +msgstr "" + +#: ../../../CHANGELOG.md:3703 +msgid "In-place imported tracks with non-ascii characters don't break reverse-proxy serving (#196)" +msgstr "" + +#: ../../../CHANGELOG.md:3705 +msgid "Removed Python 3.6 dependency (secrets module) (#198)" +msgstr "" + +#: ../../../CHANGELOG.md:3706 +msgid "Uplayable tracks are now properly disabled in the interface (#199)" +msgstr "" + +#: ../../../CHANGELOG.md:3708 +msgid "Instance settings interface" +msgstr "" + +#: ../../../CHANGELOG.md:3710 +msgid "Prior to this release, the only way to update instance settings (such as instance description, signup policy, federation configuration, etc.) was using the admin interface provided by Django (the back-end framework which power the API)." +msgstr "" + +#: ../../../CHANGELOG.md:3714 +msgid "This interface worked, but was not really-user friendly and intuitive." +msgstr "" + +#: ../../../CHANGELOG.md:3716 +msgid "Starting from this release, we now offer a dedicated interface directly in the front-end. You can view and edit all your instance settings from here, assuming you have the required permissions." +msgstr "" + +#: ../../../CHANGELOG.md:3720 +msgid "This interface is available at `/manage/settings` and via link in the sidebar." +msgstr "" + +#: ../../../CHANGELOG.md:3722 +msgid "Storage of bitrate, size and length in database" +msgstr "" + +#: ../../../CHANGELOG.md:3724 +msgid "Starting with this release, when importing files, Funkwhale will store additional information about audio files:" +msgstr "" + +#: ../../../CHANGELOG.md:3727 +msgid "Bitrate" +msgstr "" + +#: ../../../CHANGELOG.md:3728 +msgid "Size (in bytes)" +msgstr "" + +#: ../../../CHANGELOG.md:3729 +msgid "Duration" +msgstr "" + +#: ../../../CHANGELOG.md:3731 +msgid "This change is not retroactive, meaning already imported files will lack those information. The interface and API should work as before in such case, however, we offer a command to deal with legacy files and populate the missing values." +msgstr "" + +#: ../../../CHANGELOG.md:3749 msgid "The execution time for this command is proportional to the number of audio files stored on your instance. This is because we need to read the files from disk to fetch the data. You can run it in the background while Funkwhale is up." msgstr "" -#: ../../../CHANGELOG:3957 +#: ../../../CHANGELOG.md:3754 msgid "It's also safe to interrupt this command and rerun it at a later point, or run it multiple times." msgstr "" -#: ../../../CHANGELOG:3960 +#: ../../../CHANGELOG.md:3757 msgid "Use the --dry-run flag to check how many files would be impacted." msgstr "" -#: ../../../CHANGELOG:3964 +#: ../../../CHANGELOG.md:3760 msgid "Simpler permission system" msgstr "" -#: ../../../CHANGELOG:3966 +#: ../../../CHANGELOG.md:3762 msgid "Starting from this release, the permission system is much simpler. Up until now, we were using Django's built-in permission system, which was working, but also quite complex to deal with." msgstr "" -#: ../../../CHANGELOG:3970 +#: ../../../CHANGELOG.md:3766 msgid "The new implementation relies on simpler logic, which will make integration on the front-end in upcoming releases faster and easier." msgstr "" -#: ../../../CHANGELOG:3973 +#: ../../../CHANGELOG.md:3769 msgid "If you have manually given permissions to users on your instance, you can migrate those to the new system." msgstr "" -#: ../../../CHANGELOG:3989 -msgid "There is still no dedicated interface to manage user permissions, but you can use the admin interface at ``/api/admin/users/user/`` for that purpose in the meantime." +#: ../../../CHANGELOG.md:3785 +msgid "There is still no dedicated interface to manage user permissions, but you can use the admin interface at `/api/admin/users/user/` for that purpose in the meantime." msgstr "" -#: ../../../CHANGELOG:3995 +#: ../../../CHANGELOG.md:3789 msgid "0.12 (2018-05-09)" msgstr "" -#: ../../../CHANGELOG:4002 +#: ../../../CHANGELOG.md:3796 msgid "Subsonic API implementation to offer compatibility with existing clients such as DSub (#75)" msgstr "" -#: ../../../CHANGELOG:4004 +#: ../../../CHANGELOG.md:3798 msgid "Use nodeinfo standard for publishing instance information (#192)" msgstr "" -#: ../../../CHANGELOG:4009 +#: ../../../CHANGELOG.md:3802 msgid "Play button now play tracks immediately instead of appending them to the queue (#99, #156)" msgstr "" -#: ../../../CHANGELOG:4015 +#: ../../../CHANGELOG.md:3807 msgid "Fix broken federated import (#193)" msgstr "" -#: ../../../CHANGELOG:4020 +#: ../../../CHANGELOG.md:3811 msgid "Up-to-date documentation for upgrading front-end files on docker setup (#132)" msgstr "" -#: ../../../CHANGELOG:4024 +#: ../../../CHANGELOG.md:3813 msgid "Subsonic API" msgstr "" -#: ../../../CHANGELOG:4026 +#: ../../../CHANGELOG.md:3815 msgid "This release implements some core parts of the Subsonic API, which is widely deployed in various projects and supported by numerous clients." msgstr "" -#: ../../../CHANGELOG:4029 +#: ../../../CHANGELOG.md:3818 msgid "By offering this API in Funkwhale, we make it possible to access the instance library and listen to the music without from existing Subsonic clients, and without developping our own alternative clients for each and every platform." msgstr "" -#: ../../../CHANGELOG:4033 +#: ../../../CHANGELOG.md:3822 msgid "Most advanced Subsonic clients support offline caching of music files, playlist management and search, which makes them well-suited for nomadic use." msgstr "" -#: ../../../CHANGELOG:4036 -msgid "Please see `our list of supported apps <https://funkwhale.audio/en_US/apps>`_ for more information about supported clients and user instructions." +#: ../../../CHANGELOG.md:3825 +msgid "Please see [our list of supported apps](https://funkwhale.audio/en_US/apps) for more information about supported clients and user instructions." msgstr "" -#: ../../../CHANGELOG:4039 +#: ../../../CHANGELOG.md:3828 msgid "At the instance-level, the Subsonic API is enabled by default, but require and additional endpoint to be added in you reverse-proxy configuration." msgstr "" -#: ../../../CHANGELOG:4042 -msgid "On nginx, add the following block::" +#: ../../../CHANGELOG.md:3831 +msgid "On nginx, add the following block:" msgstr "" -#: ../../../CHANGELOG:4049 -msgid "On Apache, add the following block::" +#: ../../../CHANGELOG.md:3840 +msgid "On Apache, add the following block:" msgstr "" -#: ../../../CHANGELOG:4056 +#: ../../../CHANGELOG.md:3849 msgid "The Subsonic can be disabled at the instance level from the django admin." msgstr "" -#: ../../../CHANGELOG:4060 +#: ../../../CHANGELOG.md:3852 msgid "Because of Subsonic's API design which assumes cleartext storing of user passwords, we chose to have a dedicated, separate password for that purpose. Users can generate this password from their settings page in the web client." msgstr "" -#: ../../../CHANGELOG:4067 +#: ../../../CHANGELOG.md:3858 msgid "Nodeinfo standard for instance information and stats" msgstr "" -#: ../../../CHANGELOG:4071 +#: ../../../CHANGELOG.md:3861 msgid "The ``/api/v1/instance/stats/`` endpoint which was used to display instance data in the about page is removed in favor of the new ``/api/v1/instance/nodeinfo/2.0/`` endpoint." msgstr "" -#: ../../../CHANGELOG:4075 +#: ../../../CHANGELOG.md:3866 msgid "In earlier version, we where using a custom endpoint and format for our instance information and statistics. While this was working, this was not compatible with anything else on the fediverse." msgstr "" -#: ../../../CHANGELOG:4079 +#: ../../../CHANGELOG.md:3870 msgid "We now offer a nodeinfo 2.0 endpoint which provides, in a single place, all the instance information such as library and user activity statistics, public instance settings (description, registration and federation status, etc.)." msgstr "" -#: ../../../CHANGELOG:4083 +#: ../../../CHANGELOG.md:3874 msgid "We offer two settings to manage nodeinfo in your Funkwhale instance:" msgstr "" -#: ../../../CHANGELOG:4085 +#: ../../../CHANGELOG.md:3876 msgid "One setting to completely disable nodeinfo, but this is not recommended as the exposed data may be needed to make some parts of the front-end work (especially the about page)." msgstr "" -#: ../../../CHANGELOG:4088 +#: ../../../CHANGELOG.md:3879 msgid "One setting to disable only usage and library statistics in the nodeinfo endpoint. This is useful if you want the nodeinfo endpoint to work, but don't feel comfortable sharing aggregated statistics about your library and user activity." msgstr "" -#: ../../../CHANGELOG:4093 -msgid "To make your instance fully compatible with the nodeinfo protocol, you need to to edit your nginx configuration file::" +#: ../../../CHANGELOG.md:3884 +msgid "To make your instance fully compatible with the nodeinfo protocol, you need to to edit your nginx configuration file:" msgstr "" -#: ../../../CHANGELOG:4112 -msgid "You can do the same if you use apache::" +#: ../../../CHANGELOG.md:3905 +msgid "You can do the same if you use apache:" msgstr "" -#: ../../../CHANGELOG:4130 +#: ../../../CHANGELOG.md:3925 msgid "This will ensure all well-known endpoints are proxied to funkwhale, and not just webfinger one." msgstr "" -#: ../../../CHANGELOG:4133 +#: ../../../CHANGELOG.md:3928 msgid "Links:" msgstr "" -#: ../../../CHANGELOG:4135 +#: ../../../CHANGELOG.md:3930 msgid "About nodeinfo: https://github.com/jhass/nodeinfo" msgstr "" -#: ../../../CHANGELOG:4139 +#: ../../../CHANGELOG.md:3932 msgid "0.11 (2018-05-06)" msgstr "" -#: ../../../CHANGELOG:4143 +#: ../../../CHANGELOG.md:3936 msgid "Special thanks for this release go to @renon:matrix.org (@Hazmo on Gitlab) for bringing Apache2 support to Funkwhale and contributing on other issues. Thank you!" msgstr "" -#: ../../../CHANGELOG:4149 +#: ../../../CHANGELOG.md:3942 msgid "Funkwhale now works behind an Apache2 reverse proxy (!165) check out the brand new documentation at https://docs.funkwhale.audio/installation/index.html#apache2 if you want to try it!" msgstr "" -#: ../../../CHANGELOG:4152 +#: ../../../CHANGELOG.md:3945 msgid "Users can now request password reset by email, assuming a SMTP server was correctly configured (#187)" msgstr "" -#: ../../../CHANGELOG:4157 +#: ../../../CHANGELOG.md:3950 msgid "Added a fix_track_files command to run checks and fixes against library (#183)" msgstr "" -#: ../../../CHANGELOG:4159 +#: ../../../CHANGELOG.md:3952 msgid "Avoid fetching Actor object on every request authentication" msgstr "" -#: ../../../CHANGELOG:4160 +#: ../../../CHANGELOG.md:3953 msgid "Can now relaunch errored jobs and batches (#176)" msgstr "" -#: ../../../CHANGELOG:4161 +#: ../../../CHANGELOG.md:3954 msgid "List pending requests by default, added a status filter for requests (#109)" msgstr "" -#: ../../../CHANGELOG:4162 +#: ../../../CHANGELOG.md:3955 msgid "More structured menus in sidebar, added labels with notifications" msgstr "" -#: ../../../CHANGELOG:4163 +#: ../../../CHANGELOG.md:3956 msgid "Sample virtual-host file for Apache2 reverse-proxy (!165)" msgstr "" -#: ../../../CHANGELOG:4164 +#: ../../../CHANGELOG.md:3957 msgid "Store high-level settings (such as federation or auth-related ones) in database (#186)" msgstr "" -#: ../../../CHANGELOG:4170 +#: ../../../CHANGELOG.md:3962 msgid "Ensure in place imported files get a proper mimetype (#183)" msgstr "" -#: ../../../CHANGELOG:4171 +#: ../../../CHANGELOG.md:3963 msgid "Federation cache suppression is now simpler and also deletes orphaned files (#189)" msgstr "" -#: ../../../CHANGELOG:4173 +#: ../../../CHANGELOG.md:3965 msgid "Fixed small UI glitches/bugs in federation tabs (#184)" msgstr "" -#: ../../../CHANGELOG:4174 +#: ../../../CHANGELOG.md:3966 msgid "X-sendfile not working with in place import (#182)" msgstr "" -#: ../../../CHANGELOG:4179 +#: ../../../CHANGELOG.md:3970 msgid "Added a documentation area for third-party projects (#180)" msgstr "" -#: ../../../CHANGELOG:4180 +#: ../../../CHANGELOG.md:3971 msgid "Added documentation for optimizing Funkwhale and reduce its memory footprint." msgstr "" -#: ../../../CHANGELOG:4181 +#: ../../../CHANGELOG.md:3972 msgid "Document that the database should use an utf-8 encoding (#185)" msgstr "" -#: ../../../CHANGELOG:4182 +#: ../../../CHANGELOG.md:3973 msgid "Foundations for API documentation with Swagger (#178)" msgstr "" -#: ../../../CHANGELOG:4186 +#: ../../../CHANGELOG.md:3975 msgid "Database storage for high-level settings" msgstr "" -#: ../../../CHANGELOG:4188 +#: ../../../CHANGELOG.md:3977 msgid "Due to the work done in #186, the following environment variables have been deprecated:" msgstr "" -#: ../../../CHANGELOG:4191 +#: ../../../CHANGELOG.md:3980 msgid "FEDERATION_ENABLED" msgstr "" -#: ../../../CHANGELOG:4192 +#: ../../../CHANGELOG.md:3981 msgid "FEDERATION_COLLECTION_PAGE_SIZE" msgstr "" -#: ../../../CHANGELOG:4193 +#: ../../../CHANGELOG.md:3982 msgid "FEDERATION_MUSIC_NEEDS_APPROVAL" msgstr "" -#: ../../../CHANGELOG:4194 +#: ../../../CHANGELOG.md:3983 msgid "FEDERATION_ACTOR_FETCH_DELAY" msgstr "" -#: ../../../CHANGELOG:4195 +#: ../../../CHANGELOG.md:3984 msgid "PLAYLISTS_MAX_TRACKS" msgstr "" -#: ../../../CHANGELOG:4196 +#: ../../../CHANGELOG.md:3985 msgid "API_AUTHENTICATION_REQUIRED" msgstr "" -#: ../../../CHANGELOG:4198 +#: ../../../CHANGELOG.md:3987 msgid "Configuration for this settings has been moved to database, as it will provide a better user-experience, by allowing you to edit these values on-the-fly, without restarting Funkwhale processes." msgstr "" -#: ../../../CHANGELOG:4202 +#: ../../../CHANGELOG.md:3991 msgid "You can leave those environment variables in your .env file for now, as the values will be used to populate the database entries. We'll make a proper announcement when the variables won't be used anymore." msgstr "" -#: ../../../CHANGELOG:4206 +#: ../../../CHANGELOG.md:3995 msgid "Please browse https://docs.funkwhale.audio/configuration.html#instance-settings for more information about instance configuration using the web interface." msgstr "" -#: ../../../CHANGELOG:4211 +#: ../../../CHANGELOG.md:3998 msgid "System emails" msgstr "" -#: ../../../CHANGELOG:4213 +#: ../../../CHANGELOG.md:4000 msgid "Starting from this release, Funkwhale will send two types of emails:" msgstr "" -#: ../../../CHANGELOG:4216 +#: ../../../CHANGELOG.md:4003 msgid "Email confirmation emails, to ensure a user's email is valid" msgstr "" -#: ../../../CHANGELOG:4217 +#: ../../../CHANGELOG.md:4004 msgid "Password reset emails, enabling user to reset their password without an admin's intervention" msgstr "" -#: ../../../CHANGELOG:4219 +#: ../../../CHANGELOG.md:4006 msgid "Email sending is disabled by default, as it requires additional configuration. In this mode, emails are simply outputted on stdout." msgstr "" -#: ../../../CHANGELOG:4222 -msgid "If you want to actually send those emails to your users, you should edit your .env file and tweak the ``EMAIL_CONFIG`` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` for more details." +#: ../../../CHANGELOG.md:4009 +msgid "If you want to actually send those emails to your users, you should edit your .env file and tweak the `EMAIL_CONFIG` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` for more details." msgstr "" -#: ../../../CHANGELOG:4228 +#: ../../../CHANGELOG.md:4014 msgid "As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, which was not documented, has no effect anymore. You can safely remove it from your .env file if it is set." msgstr "" -#: ../../../CHANGELOG:4234 +#: ../../../CHANGELOG.md:4019 msgid "Proxy headers for non-docker deployments" msgstr "" -#: ../../../CHANGELOG:4236 -msgid "For non-docker deployments, add ``--proxy-headers`` at the end of the ``daphne`` command in :file:`/etc/systemd/system/funkwhale-server.service`." +#: ../../../CHANGELOG.md:4021 +msgid "For non-docker deployments, add `--proxy-headers` at the end of the `daphne` command in :file:`/etc/systemd/system/funkwhale-server.service`." msgstr "" -#: ../../../CHANGELOG:4239 +#: ../../../CHANGELOG.md:4024 msgid "This will ensure the application receive the correct IP address from the client and not the proxy's one." msgstr "" -#: ../../../CHANGELOG:4244 +#: ../../../CHANGELOG.md:4027 msgid "0.10 (2018-04-23)" msgstr "" -#: ../../../CHANGELOG:4248 +#: ../../../CHANGELOG.md:4031 msgid "Can now import files in-place from the CLI importer (#155)" msgstr "" -#: ../../../CHANGELOG:4253 +#: ../../../CHANGELOG.md:4035 msgid "Avoid downloading audio files multiple times from remote libraries (#163)" msgstr "" -#: ../../../CHANGELOG:4254 +#: ../../../CHANGELOG.md:4036 msgid "Better file import performance and error handling (#144)" msgstr "" -#: ../../../CHANGELOG:4255 +#: ../../../CHANGELOG.md:4037 msgid "Import job and batch API and front-end have been improved with better performance, pagination and additional filters (#171)" msgstr "" -#: ../../../CHANGELOG:4257 +#: ../../../CHANGELOG.md:4039 msgid "Increased max_length on TrackFile.source, this will help when importing files with a really long path (#142)" msgstr "" -#: ../../../CHANGELOG:4259 +#: ../../../CHANGELOG.md:4041 msgid "Player is back in Queue tab (#150)" msgstr "" -#: ../../../CHANGELOG:4264 +#: ../../../CHANGELOG.md:4045 msgid "Fail graciously when AP representation includes a null_value for mediaType" msgstr "" -#: ../../../CHANGELOG:4265 +#: ../../../CHANGELOG.md:4046 msgid "Fix sidebar tabs not showing under small resolution under Chrome (#173)" msgstr "" -#: ../../../CHANGELOG:4266 +#: ../../../CHANGELOG.md:4047 msgid "Fixed broken login due to badly configured Axios (#172)" msgstr "" -#: ../../../CHANGELOG:4267 +#: ../../../CHANGELOG.md:4048 msgid "Fixed broken playlist modal after login (#155)" msgstr "" -#: ../../../CHANGELOG:4268 +#: ../../../CHANGELOG.md:4049 msgid "Fixed queue reorder or track deletion restarting currently playing track (#151)" msgstr "" -#: ../../../CHANGELOG:4270 +#: ../../../CHANGELOG.md:4051 msgid "Radio will now append new track if you delete the last track in queue (#145)" msgstr "" -#: ../../../CHANGELOG:4271 +#: ../../../CHANGELOG.md:4052 msgid "Reset all sensitive front-end data on logout (#124)" msgstr "" -#: ../../../CHANGELOG:4272 +#: ../../../CHANGELOG.md:4053 msgid "Typos/not showing text due to i18n work (#175)" msgstr "" -#: ../../../CHANGELOG:4277 +#: ../../../CHANGELOG.md:4057 msgid "Better documentation for hardware requirements and memory usage (#165)" msgstr "" -#: ../../../CHANGELOG:4281 +#: ../../../CHANGELOG.md:4059 msgid "In-place import" msgstr "" -#: ../../../CHANGELOG:4283 +#: ../../../CHANGELOG.md:4061 msgid "This release includes in-place imports for the CLI import. This means you can load gigabytes of music into funkwhale without worrying about about Funkwhale copying those music files in its internal storage and eating your disk space." msgstr "" -#: ../../../CHANGELOG:4287 -msgid "`This new feature is documented here <https://docs.funkwhale.audio/importing-music.html#in-place-import>`_ and require additional configuration to ensure funkwhale and your webserver can serve those files properly." +#: ../../../CHANGELOG.md:4065 +msgid "[This new feature is documented here](https://docs.funkwhale.audio/importing-music.html#in-place-import) and require additional configuration to ensure funkwhale and your webserver can serve those files properly." msgstr "" -#: ../../../CHANGELOG:4291 +#: ../../../CHANGELOG.md:4069 msgid "**Non-docker users:**" msgstr "" -#: ../../../CHANGELOG:4293 -#: ../../../CHANGELOG:4307 -msgid "Assuming your music is stored in ``/srv/funkwhale/data/music``, add the following block to your nginx configuration::" +#: ../../../CHANGELOG.md:4071 +#: ../../../CHANGELOG.md:4089 +msgid "Assuming your music is stored in `/srv/funkwhale/data/music`, add the following block to your nginx configuration:" msgstr "" -#: ../../../CHANGELOG:4301 -msgid "And the following to your .env file::" +#: ../../../CHANGELOG.md:4081 +msgid "And the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4305 +#: ../../../CHANGELOG.md:4087 msgid "**Docker users:**" msgstr "" -#: ../../../CHANGELOG:4315 -msgid "Assuming you have the following volume directive in your ``docker-compose.yml`` (it's the default): ``/srv/funkwhale/data/music:/music:ro``, then add the following to your .env file::" +#: ../../../CHANGELOG.md:4099 +msgid "Assuming you have the following volume directive in your `docker-compose.yml` (it's the default): `/srv/funkwhale/data/music:/music:ro`, then add the following to your .env file:" msgstr "" -#: ../../../CHANGELOG:4326 +#: ../../../CHANGELOG.md:4110 msgid "0.9.1 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4330 +#: ../../../CHANGELOG.md:4114 msgid "Allow null values for musicbrainz_id in Audio ActivityPub representation" msgstr "" -#: ../../../CHANGELOG:4331 +#: ../../../CHANGELOG.md:4115 msgid "Fixed broken permission check on library scanning and too aggressive page validation" msgstr "" -#: ../../../CHANGELOG:4336 +#: ../../../CHANGELOG.md:4118 msgid "0.9 (2018-04-17)" msgstr "" -#: ../../../CHANGELOG:4340 +#: ../../../CHANGELOG.md:4122 msgid "Add internationalization support (#5)" msgstr "" -#: ../../../CHANGELOG:4341 +#: ../../../CHANGELOG.md:4123 msgid "Can now follow and import music from remote libraries (#136, #137)" msgstr "" -#: ../../../CHANGELOG:4346 +#: ../../../CHANGELOG.md:4127 msgid "Added a i18n-extract yarn script to extract strings to PO files (#162)" msgstr "" -#: ../../../CHANGELOG:4347 +#: ../../../CHANGELOG.md:4128 msgid "User admin now includes signup and last login dates (#148)" msgstr "" -#: ../../../CHANGELOG:4348 +#: ../../../CHANGELOG.md:4129 msgid "We now use a proper user agent including instance version and url during outgoing requests" msgstr "" -#: ../../../CHANGELOG:4353 +#: ../../../CHANGELOG.md:4132 msgid "Federation is here!" msgstr "" -#: ../../../CHANGELOG:4355 +#: ../../../CHANGELOG.md:4134 msgid "This is for real this time, and includes:" msgstr "" -#: ../../../CHANGELOG:4357 +#: ../../../CHANGELOG.md:4136 msgid "Following other Funkwhale libraries" msgstr "" -#: ../../../CHANGELOG:4358 +#: ../../../CHANGELOG.md:4137 msgid "Importing tracks from remote libraries (tracks are hotlinked, and only cached for a short amount of time)" msgstr "" -#: ../../../CHANGELOG:4359 +#: ../../../CHANGELOG.md:4138 msgid "Searching across federated catalogs" msgstr "" -#: ../../../CHANGELOG:4361 +#: ../../../CHANGELOG.md:4140 msgid "Note that by default, federation is opt-in, on a per-instance basis: instances will request access to your catalog, and you can accept or refuse those requests. You can also revoke the access at any time." msgstr "" -#: ../../../CHANGELOG:4365 +#: ../../../CHANGELOG.md:4144 msgid "Documentation was updated with relevant instructions to use and benefit from this new feature: https://docs.funkwhale.audio/federation.html" msgstr "" -#: ../../../CHANGELOG:4369 +#: ../../../CHANGELOG.md:4147 msgid "Preparing internationalization" msgstr "" -#: ../../../CHANGELOG:4371 +#: ../../../CHANGELOG.md:4149 msgid "Funkwhale's front-end as always been english-only, and this is a barrier to new users. The work make Funkwhale's interface translatable was started in this release by Baptiste. Although nothing is translated yet, this release includes behind the stage changes that will make it possible in the near future." msgstr "" -#: ../../../CHANGELOG:4377 +#: ../../../CHANGELOG.md:4155 msgid "Many thank to Baptiste for the hard work and for figuring out a proper solution to this difficult problem." msgstr "" -#: ../../../CHANGELOG:4381 +#: ../../../CHANGELOG.md:4158 msgid "Upgrade path" msgstr "" -#: ../../../CHANGELOG:4383 +#: ../../../CHANGELOG.md:4160 msgid "In addition to the usual instructions from https://docs.funkwhale.audio/upgrading.html, non-docker users will have to setup an additional systemd unit file for recurrent tasks." msgstr "" -#: ../../../CHANGELOG:4387 +#: ../../../CHANGELOG.md:4164 msgid "This was forgotten in the deployment documentation, but recurrent tasks, managed by the celery beat process, will be needed more and more in subsequent releases. Right now, we'll be using to clear the cache for federated music files and keep disk usage to a minimum." msgstr "" -#: ../../../CHANGELOG:4392 +#: ../../../CHANGELOG.md:4169 msgid "In the future, they will also be needed to refetch music metadata or federated information periodically." msgstr "" -#: ../../../CHANGELOG:4395 -msgid "Celery beat can be enabled easily::" +#: ../../../CHANGELOG.md:4172 +msgid "Celery beat can be enabled easily:" msgstr "" -#: ../../../CHANGELOG:4405 +#: ../../../CHANGELOG.md:4184 msgid "Docker users already have celerybeat enabled." msgstr "" -#: ../../../CHANGELOG:4409 +#: ../../../CHANGELOG.md:4186 msgid "0.8 (2018-04-02)" msgstr "" -#: ../../../CHANGELOG:4413 +#: ../../../CHANGELOG.md:4190 msgid "Add a detail page for radios (#64)" msgstr "" -#: ../../../CHANGELOG:4414 +#: ../../../CHANGELOG.md:4191 msgid "Implemented page title binding (#1)" msgstr "" -#: ../../../CHANGELOG:4415 +#: ../../../CHANGELOG.md:4192 msgid "Previous Track button restart playback after 3 seconds (#146)" msgstr "" -#: ../../../CHANGELOG:4420 +#: ../../../CHANGELOG.md:4196 msgid "Added credits to Francis Gading for the logotype (#101)" msgstr "" -#: ../../../CHANGELOG:4421 +#: ../../../CHANGELOG.md:4197 msgid "API endpoint for fetching instance activity and updated timeline to use this new endpoint (#141)" msgstr "" -#: ../../../CHANGELOG:4423 +#: ../../../CHANGELOG.md:4199 msgid "Better error messages in case of missing environment variables (#140)" msgstr "" -#: ../../../CHANGELOG:4424 +#: ../../../CHANGELOG.md:4200 msgid "Implemented a @test@yourfunkwhaledomain bot to ensure federation works properly. Send it \"/ping\" and it will answer back :)" msgstr "" -#: ../../../CHANGELOG:4426 +#: ../../../CHANGELOG.md:4202 msgid "Queue shuffle now apply only to tracks after the current one (#97)" msgstr "" -#: ../../../CHANGELOG:4427 +#: ../../../CHANGELOG.md:4203 msgid "Removed player from queue tab and consistently show current track in queue (#131)" msgstr "" -#: ../../../CHANGELOG:4429 +#: ../../../CHANGELOG.md:4205 msgid "We now restrict some usernames from being used during signup (#139)" msgstr "" -#: ../../../CHANGELOG:4434 +#: ../../../CHANGELOG.md:4209 msgid "Better error handling during file import (#120)" msgstr "" -#: ../../../CHANGELOG:4435 +#: ../../../CHANGELOG.md:4210 msgid "Better handling of utf-8 filenames during file import (#138)" msgstr "" -#: ../../../CHANGELOG:4436 +#: ../../../CHANGELOG.md:4211 msgid "Converted favicon from .ico to .png (#130)" msgstr "" -#: ../../../CHANGELOG:4437 +#: ../../../CHANGELOG.md:4212 msgid "Upgraded to Python 3.6 to fix weird but harmless weakref error on django task (#121)" msgstr "" -#: ../../../CHANGELOG:4443 +#: ../../../CHANGELOG.md:4217 msgid "Documented the upgrade process (#127)" msgstr "" -#: ../../../CHANGELOG:4447 +#: ../../../CHANGELOG.md:4219 msgid "Preparing for federation" msgstr "" -#: ../../../CHANGELOG:4449 +#: ../../../CHANGELOG.md:4221 msgid "Federation of music libraries is one of the most asked feature. While there is still a lot of work to do, this version includes the foundation that will enable funkwhale servers to communicate between each others, and with other federated software, such as Mastodon." msgstr "" -#: ../../../CHANGELOG:4455 +#: ../../../CHANGELOG.md:4227 msgid "Funkwhale will use ActivityPub as it's federation protocol." msgstr "" -#: ../../../CHANGELOG:4457 +#: ../../../CHANGELOG.md:4229 msgid "In order to prepare for federation (see #136 and #137), new API endpoints have been added under /federation and /.well-known/webfinger." msgstr "" -#: ../../../CHANGELOG:4460 -msgid "For these endpoints to work, you will need to update your nginx configuration, and add the following snippets::" +#: ../../../CHANGELOG.md:4232 +msgid "For these endpoints to work, you will need to update your nginx configuration, and add the following snippets:" msgstr "" -#: ../../../CHANGELOG:4473 +#: ../../../CHANGELOG.md:4246 msgid "This will ensure federation endpoints will be reachable in the future. You can of course skip this part if you know you will not federate your instance." msgstr "" -#: ../../../CHANGELOG:4476 -msgid "A new ``FEDERATION_ENABLED`` env var have also been added to control whether federation is enabled or not on the application side. This settings defaults to True, which should have no consequences at the moment, since actual federation is not implemented and the only available endpoints are for testing purposes." +#: ../../../CHANGELOG.md:4249 +msgid "A new `FEDERATION_ENABLED` env var have also been added to control whether federation is enabled or not on the application side. This settings defaults to True, which should have no consequences at the moment, since actual federation is not implemented and the only available endpoints are for testing purposes." msgstr "" -#: ../../../CHANGELOG:4482 -msgid "Add ``FEDERATION_ENABLED=false`` to your .env file to disable federation on the application side." +#: ../../../CHANGELOG.md:4255 +msgid "Add `FEDERATION_ENABLED=false` to your .env file to disable federation on the application side." msgstr "" -#: ../../../CHANGELOG:4485 +#: ../../../CHANGELOG.md:4258 msgid "To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain, and sending it \"/ping\", for example, via Mastodon, should trigger a response." msgstr "" -#: ../../../CHANGELOG:4492 +#: ../../../CHANGELOG.md:4262 msgid "0.7 (2018-03-21)" msgstr "" -#: ../../../CHANGELOG:4496 +#: ../../../CHANGELOG.md:4266 msgid "Can now filter artists and albums with no listenable tracks (#114)" msgstr "" -#: ../../../CHANGELOG:4497 +#: ../../../CHANGELOG.md:4267 msgid "Improve the style of the sidebar to make it easier to understand which tab is selected (#118)" msgstr "" -#: ../../../CHANGELOG:4499 +#: ../../../CHANGELOG.md:4269 msgid "On artist page, albums are not sorted by release date, if any (#116)" msgstr "" -#: ../../../CHANGELOG:4500 +#: ../../../CHANGELOG.md:4270 msgid "Playlists are here \\o/ :tada: (#3, #93, #94)" msgstr "" -#: ../../../CHANGELOG:4501 +#: ../../../CHANGELOG.md:4271 msgid "Use django-cacheops to cache common ORM requests (#117)" msgstr "" -#: ../../../CHANGELOG:4506 +#: ../../../CHANGELOG.md:4275 msgid "Fixed broken import request admin (#115)" msgstr "" -#: ../../../CHANGELOG:4507 +#: ../../../CHANGELOG.md:4276 msgid "Fixed forced redirection to login event with API_AUTHENTICATION_REQUIRED=False (#119)" msgstr "" -#: ../../../CHANGELOG:4509 +#: ../../../CHANGELOG.md:4278 msgid "Fixed position not being reset properly when playing the same track multiple times in a row" msgstr "" -#: ../../../CHANGELOG:4511 +#: ../../../CHANGELOG.md:4280 msgid "Fixed synchronized start/stop radio buttons for all custom radios (#103)" msgstr "" -#: ../../../CHANGELOG:4512 +#: ../../../CHANGELOG.md:4281 msgid "Fixed typo and missing icon on homepage (#96)" msgstr "" -#: ../../../CHANGELOG:4517 +#: ../../../CHANGELOG.md:4285 msgid "Up-to-date and complete development and contribution instructions in README.rst (#123)" msgstr "" -#: ../../../CHANGELOG:4522 +#: ../../../CHANGELOG.md:4288 msgid "0.6.1 (2018-03-06)" msgstr "" -#: ../../../CHANGELOG:4526 +#: ../../../CHANGELOG.md:4292 msgid "Can now skip acoustid on file import with the --no-acoustid flag (#111)" msgstr "" -#: ../../../CHANGELOG:4531 +#: ../../../CHANGELOG.md:4296 msgid "Added missing batch id in output during import (#112)" msgstr "" -#: ../../../CHANGELOG:4532 +#: ../../../CHANGELOG.md:4297 msgid "Added some feedback on the play button (#100)" msgstr "" -#: ../../../CHANGELOG:4533 +#: ../../../CHANGELOG.md:4298 msgid "Smarter pagination which takes a fixed size (#84)" msgstr "" -#: ../../../CHANGELOG:4538 +#: ../../../CHANGELOG.md:4302 msgid "Completely removed django-cachalot from the codebase (#110). You can safely remove the CACHALOT_ENABLED setting from your .env file" msgstr "" -#: ../../../CHANGELOG:4543 +#: ../../../CHANGELOG.md:4305 msgid "0.6 (2018-03-04)" msgstr "" -#: ../../../CHANGELOG:4547 +#: ../../../CHANGELOG.md:4309 msgid "Basic activity stream for listening and favorites (#23)" msgstr "" -#: ../../../CHANGELOG:4548 +#: ../../../CHANGELOG.md:4310 msgid "Switched to django-channels and daphne for serving HTTP and websocket (#34)" msgstr "" -#: ../../../CHANGELOG:4551 +#: ../../../CHANGELOG.md:4312 msgid "Upgrades notes" msgstr "" -#: ../../../CHANGELOG:4553 +#: ../../../CHANGELOG.md:4314 msgid "This version contains breaking changes in the way funkwhale is deployed, please read the notes carefully." msgstr "" -#: ../../../CHANGELOG:4557 +#: ../../../CHANGELOG.md:4317 msgid "Instance timeline" msgstr "" -#: ../../../CHANGELOG:4559 +#: ../../../CHANGELOG.md:4319 msgid "A new \"Activity\" page is now available from the sidebar, where you can browse your instance activity. At the moment, this includes other users favorites and listening, but more activity types will be implemented in the future." msgstr "" -#: ../../../CHANGELOG:4564 +#: ../../../CHANGELOG.md:4324 msgid "Internally, we implemented those events by following the Activity Stream specification, which will help us to be compatible with other networks in the long-term." msgstr "" -#: ../../../CHANGELOG:4568 +#: ../../../CHANGELOG.md:4328 msgid "A new settings page has been added to control the visibility of your activity. By default, your activity will be browsable by anyone on your instance, but you can switch to a full private mode where nothing is shared." msgstr "" -#: ../../../CHANGELOG:4572 +#: ../../../CHANGELOG.md:4332 msgid "The setting form is available in your profile." msgstr "" -#: ../../../CHANGELOG:4575 +#: ../../../CHANGELOG.md:4334 msgid "Switch from gunicorn to daphne" msgstr "" -#: ../../../CHANGELOG:4577 +#: ../../../CHANGELOG.md:4336 msgid "This release include an important change in the way we serve the HTTP API. To prepare for new realtime features and enable websocket support in Funkwhale, we are now using django-channels and daphne to serve HTTP and websocket traffic." msgstr "" -#: ../../../CHANGELOG:4581 +#: ../../../CHANGELOG.md:4340 msgid "This replaces gunicorn and the switch should be easy assuming you follow the upgrade process described below." msgstr "" -#: ../../../CHANGELOG:4584 +#: ../../../CHANGELOG.md:4343 msgid "If you are using docker, please remove the command instruction inside the api service, as the up-to-date command is now included directly in the image as the default entry point:" msgstr "" -#: ../../../CHANGELOG:4595 -msgid "On non docker setups, you'll have to update the [Service] block of your funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn." +#: ../../../CHANGELOG.md:4355 +msgid "On non docker setups, you'll have to update the `[Service]` block of your funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn." msgstr "" -#: ../../../CHANGELOG:4598 +#: ../../../CHANGELOG.md:4358 msgid "The new configuration should be similar to this:" msgstr "" -#: ../../../CHANGELOG:4609 +#: ../../../CHANGELOG.md:4369 msgid "Ensure you update funkwhale's dependencies as usual to install the required packages." msgstr "" -#: ../../../CHANGELOG:4612 +#: ../../../CHANGELOG.md:4372 msgid "On both docker and non-docker setup, you'll also have to update your nginx configuration for websocket support. Ensure you have the following blocks included in your virtualhost file:" msgstr "" -#: ../../../CHANGELOG:4630 +#: ../../../CHANGELOG.md:4390 msgid "Remember to reload your nginx server after the edit." msgstr "" -#: ../../../CHANGELOG:4634 +#: ../../../CHANGELOG.md:4392 msgid "0.5.4 (2018-02-28)" msgstr "" -#: ../../../CHANGELOG:4638 +#: ../../../CHANGELOG.md:4396 msgid "Now stop running radio when clearing queue (#98)" msgstr "" -#: ../../../CHANGELOG:4642 +#: ../../../CHANGELOG.md:4400 msgid "Fixed queue skipping tracks (#91)" msgstr "" -#: ../../../CHANGELOG:4643 +#: ../../../CHANGELOG.md:4401 msgid "Now loop properly on queue when we only have one track (#95)" msgstr "" -#: ../../../CHANGELOG:4647 +#: ../../../CHANGELOG.md:4403 msgid "0.5.3 (2018-02-27)" msgstr "" -#: ../../../CHANGELOG:4651 +#: ../../../CHANGELOG.md:4407 msgid "Added admin interface for radios, track files, favorites and import requests (#80)" msgstr "" -#: ../../../CHANGELOG:4652 +#: ../../../CHANGELOG.md:4408 msgid "Added basic instance stats on /about (#82)" msgstr "" -#: ../../../CHANGELOG:4653 +#: ../../../CHANGELOG.md:4409 msgid "Search now unaccent letters for queries like \"The Dø\" or \"Björk\" yielding more results (#81)" msgstr "" -#: ../../../CHANGELOG:4658 +#: ../../../CHANGELOG.md:4413 msgid "Always use username in sidebar (#89)" msgstr "" -#: ../../../CHANGELOG:4659 +#: ../../../CHANGELOG.md:4414 msgid "Click event outside of player icons (#83)" msgstr "" -#: ../../../CHANGELOG:4660 +#: ../../../CHANGELOG.md:4415 msgid "Fixed broken import because of missing transaction" msgstr "" -#: ../../../CHANGELOG:4661 +#: ../../../CHANGELOG.md:4416 msgid "Now always load next radio track on last queue track ended (#87)" msgstr "" -#: ../../../CHANGELOG:4662 +#: ../../../CHANGELOG.md:4417 msgid "Now exclude tracks without file from radio candidates (#88)" msgstr "" -#: ../../../CHANGELOG:4663 +#: ../../../CHANGELOG.md:4418 msgid "skip to next track properly on 40X errors (#86)" msgstr "" -#: ../../../CHANGELOG:4668 +#: ../../../CHANGELOG.md:4422 msgid "Switched to towncrier for changelog management and compilation" msgstr "" -#: ../../../CHANGELOG:4672 +#: ../../../CHANGELOG.md:4424 msgid "0.5.2 (2018-02-26)" msgstr "" -#: ../../../CHANGELOG:4674 +#: ../../../CHANGELOG.md:4426 msgid "Fixed broken file import due to wrong url (#73)" msgstr "" -#: ../../../CHANGELOG:4675 +#: ../../../CHANGELOG.md:4427 msgid "More accurate mimetype detection" msgstr "" -#: ../../../CHANGELOG:4676 +#: ../../../CHANGELOG.md:4428 msgid "Fixed really small size on small screens" msgstr "" -#: ../../../CHANGELOG:4677 +#: ../../../CHANGELOG.md:4429 msgid "Added masonry layout for artists, requests and radios (#68)" msgstr "" -#: ../../../CHANGELOG:4678 +#: ../../../CHANGELOG.md:4430 msgid "We now have a favicon!" msgstr "" -#: ../../../CHANGELOG:4679 +#: ../../../CHANGELOG.md:4431 msgid "Fixed truncated play icon (#65)" msgstr "" -#: ../../../CHANGELOG:4683 +#: ../../../CHANGELOG.md:4433 msgid "0.5.1 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4685 +#: ../../../CHANGELOG.md:4435 msgid "Front: Fixed broken ajax call on radio builder (#69)" msgstr "" -#: ../../../CHANGELOG:4686 +#: ../../../CHANGELOG.md:4436 msgid "Front: Shuffle now restart next track from beginning (#70)" msgstr "" -#: ../../../CHANGELOG:4687 +#: ../../../CHANGELOG.md:4437 msgid "Front: volume slider should now have the same style everywhere (#72)" msgstr "" -#: ../../../CHANGELOG:4691 +#: ../../../CHANGELOG.md:4439 msgid "0.5 (2018-02-24)" msgstr "" -#: ../../../CHANGELOG:4693 +#: ../../../CHANGELOG.md:4441 msgid "Front: Now reset player colors when track has no cover (#46)" msgstr "" -#: ../../../CHANGELOG:4694 +#: ../../../CHANGELOG.md:4442 msgid "Front: play button now disabled for unplayable tracks" msgstr "" -#: ../../../CHANGELOG:4695 +#: ../../../CHANGELOG.md:4443 msgid "API: You can now enable or disable registration on the fly, via a preference (#58)" msgstr "" -#: ../../../CHANGELOG:4696 +#: ../../../CHANGELOG.md:4444 msgid "Front: can now signup via the web interface (#35)" msgstr "" -#: ../../../CHANGELOG:4697 +#: ../../../CHANGELOG.md:4445 msgid "Front: Fixed broken redirection on login" msgstr "" -#: ../../../CHANGELOG:4698 +#: ../../../CHANGELOG.md:4446 msgid "Front: Fixed broken error handling on settings and login form" msgstr "" -#: ../../../CHANGELOG:4700 +#: ../../../CHANGELOG.md:4448 msgid "About page:" msgstr "" -#: ../../../CHANGELOG:4702 +#: ../../../CHANGELOG.md:4450 msgid "There is a brand new about page on instances (/about), and instance owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/)." msgstr "" -#: ../../../CHANGELOG:4705 +#: ../../../CHANGELOG.md:4453 msgid "Transcoding:" msgstr "" -#: ../../../CHANGELOG:4707 +#: ../../../CHANGELOG.md:4455 msgid "Basic transcoding is now available to/from the following formats : ogg and mp3." msgstr "" -#: ../../../CHANGELOG:4709 -msgid "*This is still an alpha feature at the moment, please report any bug.*" +#: ../../../CHANGELOG.md:4457 +msgid "_This is still an alpha feature at the moment, please report any bug._" msgstr "" -#: ../../../CHANGELOG:4711 +#: ../../../CHANGELOG.md:4459 msgid "This relies internally on FFMPEG and can put some load on your server. It's definitely recommended you setup some caching for the transcoded files at your webserver level. Check the the example nginx file at deploy/nginx.conf for an implementation." msgstr "" -#: ../../../CHANGELOG:4716 +#: ../../../CHANGELOG.md:4464 msgid "On the frontend, usage of transcoding should be transparent in the player." msgstr "" -#: ../../../CHANGELOG:4718 +#: ../../../CHANGELOG.md:4466 msgid "Music Requests:" msgstr "" -#: ../../../CHANGELOG:4720 +#: ../../../CHANGELOG.md:4468 msgid "This release includes a new feature, music requests, which allows users to request music they'd like to see imported. Admins can browse those requests and mark them as completed when an import is made." msgstr "" -#: ../../../CHANGELOG:4726 +#: ../../../CHANGELOG.md:4473 msgid "0.4 (2018-02-18)" msgstr "" -#: ../../../CHANGELOG:4728 +#: ../../../CHANGELOG.md:4475 msgid "Front: ambiant colors in player based on current track cover (#59)" msgstr "" -#: ../../../CHANGELOG:4729 +#: ../../../CHANGELOG.md:4476 msgid "Front: simplified front dev setup thanks to webpack proxy (#59)" msgstr "" -#: ../../../CHANGELOG:4730 +#: ../../../CHANGELOG.md:4477 msgid "Front: added some unittests for the store (#55)" msgstr "" -#: ../../../CHANGELOG:4731 +#: ../../../CHANGELOG.md:4478 msgid "Front: fixed broken login redirection when 401" msgstr "" -#: ../../../CHANGELOG:4732 +#: ../../../CHANGELOG.md:4479 msgid "Front: Removed autoplay on page reload" msgstr "" -#: ../../../CHANGELOG:4733 +#: ../../../CHANGELOG.md:4480 msgid "API: Added a /instance/settings endpoint" msgstr "" -#: ../../../CHANGELOG:4734 +#: ../../../CHANGELOG.md:4481 msgid "Front: load /instance/settings on page load" msgstr "" -#: ../../../CHANGELOG:4735 +#: ../../../CHANGELOG.md:4482 msgid "Added settings to report JS and Python error to a Sentry instance This is disabled by default, but feel free to enable it if you want to help us by sending your error reports :) (#8)" msgstr "" -#: ../../../CHANGELOG:4741 +#: ../../../CHANGELOG.md:4486 msgid "0.3.5 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4743 +#: ../../../CHANGELOG.md:4488 msgid "Smarter BACKEND_URL in frontend" msgstr "" -#: ../../../CHANGELOG:4747 +#: ../../../CHANGELOG.md:4490 msgid "0.3.4 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4749 +#: ../../../CHANGELOG.md:4492 msgid "Fixed wrong URL construction in ajax call" msgstr "" -#: ../../../CHANGELOG:4753 +#: ../../../CHANGELOG.md:4494 msgid "0.3.3 (2018-01-07)" msgstr "" -#: ../../../CHANGELOG:4755 +#: ../../../CHANGELOG.md:4496 msgid "Users can now create their own dynamic radios (#51)" msgstr "" -#: ../../../CHANGELOG:4759 +#: ../../../CHANGELOG.md:4498 msgid "0.3.2" msgstr "" -#: ../../../CHANGELOG:4761 +#: ../../../CHANGELOG.md:4500 msgid "Fixed an issue in the main dockerfile" msgstr "" -#: ../../../CHANGELOG:4765 +#: ../../../CHANGELOG.md:4502 msgid "0.3.1" msgstr "" -#: ../../../CHANGELOG:4767 +#: ../../../CHANGELOG.md:4504 msgid "Revamped all import logic, everything is more tested and consistent" msgstr "" -#: ../../../CHANGELOG:4768 +#: ../../../CHANGELOG.md:4505 msgid "Can now use Acoustid in file imports to automatically grab metadata from musicbrainz" msgstr "" -#: ../../../CHANGELOG:4769 +#: ../../../CHANGELOG.md:4506 msgid "Brand new file import wizard" msgstr "" -#: ../../../CHANGELOG:4773 +#: ../../../CHANGELOG.md:4508 msgid "0.2.7" msgstr "" -#: ../../../CHANGELOG:4775 -msgid "Shortcuts: can now use the ``f`` shortcut to toggle the currently playing track as a favorite (#53)" +#: ../../../CHANGELOG.md:4510 +msgid "Shortcuts: can now use the `f` shortcut to toggle the currently playing track as a favorite (#53)" msgstr "" -#: ../../../CHANGELOG:4777 +#: ../../../CHANGELOG.md:4512 msgid "Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53)" msgstr "" -#: ../../../CHANGELOG:4778 +#: ../../../CHANGELOG.md:4513 msgid "Player: Added looping controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4779 +#: ../../../CHANGELOG.md:4514 msgid "Player: Added shuffling controls and shortcuts (#52)" msgstr "" -#: ../../../CHANGELOG:4780 +#: ../../../CHANGELOG.md:4515 msgid "Favorites: can now modify the ordering of track list (#50)" msgstr "" -#: ../../../CHANGELOG:4781 +#: ../../../CHANGELOG.md:4516 msgid "Library: can now search/reorder results on artist browsing view (#50)" msgstr "" -#: ../../../CHANGELOG:4782 +#: ../../../CHANGELOG.md:4517 msgid "Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files" msgstr "" -#: ../../../CHANGELOG:4783 +#: ../../../CHANGELOG.md:4518 msgid "Fixed #56: invalidate tokens on password change, also added change password form" msgstr "" -#: ../../../CHANGELOG:4784 +#: ../../../CHANGELOG.md:4519 msgid "Fixed #57: now refresh jwt token on page refresh" msgstr "" -#: ../../../CHANGELOG:4785 +#: ../../../CHANGELOG.md:4520 msgid "removed ugly dividers in batch import list" msgstr "" -#: ../../../CHANGELOG:4786 +#: ../../../CHANGELOG.md:4521 msgid "Fixed a few padding issues" msgstr "" -#: ../../../CHANGELOG:4787 +#: ../../../CHANGELOG.md:4522 msgid "Now persist/restore queue/radio/player state automatically" msgstr "" -#: ../../../CHANGELOG:4788 +#: ../../../CHANGELOG.md:4523 msgid "Removed old broken imports" msgstr "" -#: ../../../CHANGELOG:4789 +#: ../../../CHANGELOG.md:4524 msgid "Now force tests paths" msgstr "" -#: ../../../CHANGELOG:4790 +#: ../../../CHANGELOG.md:4525 msgid "Fixed #54: Now use pytest everywhere \\o/" msgstr "" -#: ../../../CHANGELOG:4791 +#: ../../../CHANGELOG.md:4526 msgid "Now use vuex to manage state for favorites" msgstr "" -#: ../../../CHANGELOG:4792 +#: ../../../CHANGELOG.md:4527 msgid "Now use vuex to manage state for authentication" msgstr "" -#: ../../../CHANGELOG:4793 +#: ../../../CHANGELOG.md:4528 msgid "Now use vuex to manage state for player/queue/radios" msgstr "" -#: ../../../CHANGELOG:4797 +#: ../../../CHANGELOG.md:4530 msgid "0.2.6 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4799 +#: ../../../CHANGELOG.md:4532 msgid "Fixed broken Dockerfile" msgstr "" -#: ../../../CHANGELOG:4803 +#: ../../../CHANGELOG.md:4534 msgid "0.2.5 (2017-12-15)" msgstr "" -#: ../../../CHANGELOG:4807 +#: ../../../CHANGELOG.md:4538 msgid "Import: can now specify search template when querying import sources (#45)" msgstr "" -#: ../../../CHANGELOG:4808 +#: ../../../CHANGELOG.md:4539 msgid "Login form: now redirect to previous page after login (#2)" msgstr "" -#: ../../../CHANGELOG:4809 +#: ../../../CHANGELOG.md:4540 msgid "404: a decent 404 template, at least (#48)" msgstr "" -#: ../../../CHANGELOG:4813 +#: ../../../CHANGELOG.md:4544 msgid "Player: better handling of errors when fetching the audio file (#46)" msgstr "" -#: ../../../CHANGELOG:4814 +#: ../../../CHANGELOG.md:4545 msgid "Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49)" msgstr "" -#: ../../../CHANGELOG:4816 +#: ../../../CHANGELOG.md:4547 msgid "Tech:" msgstr "" -#: ../../../CHANGELOG:4818 +#: ../../../CHANGELOG.md:4549 msgid "Django 2 compatibility, lot of packages upgrades (#47)" msgstr "" -#: ../../../CHANGELOG:4822 +#: ../../../CHANGELOG.md:4551 msgid "0.2.4 (2017-12-14)" msgstr "" -#: ../../../CHANGELOG:4826 +#: ../../../CHANGELOG.md:4555 msgid "Models: now store release group mbid on Album model (#7)" msgstr "" -#: ../../../CHANGELOG:4827 +#: ../../../CHANGELOG.md:4556 msgid "Models: now bind import job to track files (#44)" msgstr "" -#: ../../../CHANGELOG:4831 +#: ../../../CHANGELOG.md:4560 msgid "Library: fixen broken \"play all albums\" button on artist cards in Artist browsing view (#43)" msgstr "" diff --git a/docs/locales/gettext/contributor/documentation.pot b/docs/locales/gettext/contributor/documentation.pot index e98b17e1a..617851a5e 100644 --- a/docs/locales/gettext/contributor/documentation.pot +++ b/docs/locales/gettext/contributor/documentation.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/contributor/index.pot b/docs/locales/gettext/contributor/index.pot index ac15ae9b1..9c94f3630 100644 --- a/docs/locales/gettext/contributor/index.pot +++ b/docs/locales/gettext/contributor/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/contributor/translation.pot b/docs/locales/gettext/contributor/translation.pot index db6a10c85..3fa0b7418 100644 --- a/docs/locales/gettext/contributor/translation.pot +++ b/docs/locales/gettext/contributor/translation.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/api/authentication.pot b/docs/locales/gettext/developer/api/authentication.pot index 3348612bc..0f929b1a1 100644 --- a/docs/locales/gettext/developer/api/authentication.pot +++ b/docs/locales/gettext/developer/api/authentication.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/api/index.pot b/docs/locales/gettext/developer/api/index.pot index 69af2f2de..6684a0178 100644 --- a/docs/locales/gettext/developer/api/index.pot +++ b/docs/locales/gettext/developer/api/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/api/rate-limit.pot b/docs/locales/gettext/developer/api/rate-limit.pot index f84da3782..bd1110eda 100644 --- a/docs/locales/gettext/developer/api/rate-limit.pot +++ b/docs/locales/gettext/developer/api/rate-limit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/api/subsonic.pot b/docs/locales/gettext/developer/api/subsonic.pot index ecfb0be01..508f7b774 100644 --- a/docs/locales/gettext/developer/api/subsonic.pot +++ b/docs/locales/gettext/developer/api/subsonic.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/architecture.pot b/docs/locales/gettext/developer/architecture.pot index 0c24f469d..6914f3472 100644 --- a/docs/locales/gettext/developer/architecture.pot +++ b/docs/locales/gettext/developer/architecture.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/contribute/api.pot b/docs/locales/gettext/developer/contribute/api.pot index 34385dd80..8699dc2ba 100644 --- a/docs/locales/gettext/developer/contribute/api.pot +++ b/docs/locales/gettext/developer/contribute/api.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/contribute/copy.pot b/docs/locales/gettext/developer/contribute/copy.pot index 1d9c09ffc..16234537a 100644 --- a/docs/locales/gettext/developer/contribute/copy.pot +++ b/docs/locales/gettext/developer/contribute/copy.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/contribute/frontend.pot b/docs/locales/gettext/developer/contribute/frontend.pot index 7ecc30287..215276dd3 100644 --- a/docs/locales/gettext/developer/contribute/frontend.pot +++ b/docs/locales/gettext/developer/contribute/frontend.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/contribute/index.pot b/docs/locales/gettext/developer/contribute/index.pot index c9d6fd832..0fa87d497 100644 --- a/docs/locales/gettext/developer/contribute/index.pot +++ b/docs/locales/gettext/developer/contribute/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/federation/index.pot b/docs/locales/gettext/developer/federation/index.pot index 83f589949..00fc2cefe 100644 --- a/docs/locales/gettext/developer/federation/index.pot +++ b/docs/locales/gettext/developer/federation/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/index.pot b/docs/locales/gettext/developer/index.pot index 4578be91b..36ebd28d2 100644 --- a/docs/locales/gettext/developer/index.pot +++ b/docs/locales/gettext/developer/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/plugins/create.pot b/docs/locales/gettext/developer/plugins/create.pot index d4247796d..60feabdaa 100644 --- a/docs/locales/gettext/developer/plugins/create.pot +++ b/docs/locales/gettext/developer/plugins/create.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/plugins/index.pot b/docs/locales/gettext/developer/plugins/index.pot index 02e7ddb1d..4b65923b4 100644 --- a/docs/locales/gettext/developer/plugins/index.pot +++ b/docs/locales/gettext/developer/plugins/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/plugins/install.pot b/docs/locales/gettext/developer/plugins/install.pot index fff5f2ce6..e696c17b7 100644 --- a/docs/locales/gettext/developer/plugins/install.pot +++ b/docs/locales/gettext/developer/plugins/install.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/setup/docker.pot b/docs/locales/gettext/developer/setup/docker.pot index 0a7998885..aa43d2e27 100644 --- a/docs/locales/gettext/developer/setup/docker.pot +++ b/docs/locales/gettext/developer/setup/docker.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/setup/gitpod.pot b/docs/locales/gettext/developer/setup/gitpod.pot index 73f0889ab..c2fae5d74 100644 --- a/docs/locales/gettext/developer/setup/gitpod.pot +++ b/docs/locales/gettext/developer/setup/gitpod.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/setup/index.pot b/docs/locales/gettext/developer/setup/index.pot index 9706c7259..986e4f776 100644 --- a/docs/locales/gettext/developer/setup/index.pot +++ b/docs/locales/gettext/developer/setup/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/setup/vite.pot b/docs/locales/gettext/developer/setup/vite.pot index ac69c54da..3d6c6d23e 100644 --- a/docs/locales/gettext/developer/setup/vite.pot +++ b/docs/locales/gettext/developer/setup/vite.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/workflows/changelog.pot b/docs/locales/gettext/developer/workflows/changelog.pot index 29c4b82e5..ec9d9e411 100644 --- a/docs/locales/gettext/developer/workflows/changelog.pot +++ b/docs/locales/gettext/developer/workflows/changelog.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/workflows/git.pot b/docs/locales/gettext/developer/workflows/git.pot index d45a52cde..e49956f8a 100644 --- a/docs/locales/gettext/developer/workflows/git.pot +++ b/docs/locales/gettext/developer/workflows/git.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/workflows/index.pot b/docs/locales/gettext/developer/workflows/index.pot index 48e05df81..6ac1b31f9 100644 --- a/docs/locales/gettext/developer/workflows/index.pot +++ b/docs/locales/gettext/developer/workflows/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/workflows/pre-commit.pot b/docs/locales/gettext/developer/workflows/pre-commit.pot index 9d92269ef..b88018adc 100644 --- a/docs/locales/gettext/developer/workflows/pre-commit.pot +++ b/docs/locales/gettext/developer/workflows/pre-commit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/developer/workflows/release.pot b/docs/locales/gettext/developer/workflows/release.pot index f2254ef52..8f8fd4395 100644 --- a/docs/locales/gettext/developer/workflows/release.pot +++ b/docs/locales/gettext/developer/workflows/release.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -57,25 +57,25 @@ msgid "Add a list of contributors" msgstr "" #: ../../developer/workflows/release.md:58 -msgid "Update the `__version__` variable to the next release version" +msgid "Update the next release version" msgstr "" -#: ../../developer/workflows/release.md:64 +#: ../../developer/workflows/release.md:66 msgid "Commit all changes" msgstr "" -#: ../../developer/workflows/release.md:71 +#: ../../developer/workflows/release.md:73 msgid "Create a tag" msgstr "" -#: ../../developer/workflows/release.md:77 +#: ../../developer/workflows/release.md:79 msgid "Publish the new tag to GitLab" msgstr "" -#: ../../developer/workflows/release.md:83 +#: ../../developer/workflows/release.md:85 msgid "Merge your changes into the alternate branch" msgstr "" -#: ../../developer/workflows/release.md:107 +#: ../../developer/workflows/release.md:109 msgid "Don't forget to create a blog post to announce the new release!" msgstr "" diff --git a/docs/locales/gettext/glossary.pot b/docs/locales/gettext/glossary.pot index f593822dc..a7fdd5312 100644 --- a/docs/locales/gettext/glossary.pot +++ b/docs/locales/gettext/glossary.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/index.pot b/docs/locales/gettext/index.pot index ca124e306..88c1d3c99 100644 --- a/docs/locales/gettext/index.pot +++ b/docs/locales/gettext/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/allow-listing/add.pot b/docs/locales/gettext/moderator/allow-listing/add.pot index a73cc3249..6e03c23be 100644 --- a/docs/locales/gettext/moderator/allow-listing/add.pot +++ b/docs/locales/gettext/moderator/allow-listing/add.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/allow-listing/index.pot b/docs/locales/gettext/moderator/allow-listing/index.pot index 2821fc296..496d5a7f6 100644 --- a/docs/locales/gettext/moderator/allow-listing/index.pot +++ b/docs/locales/gettext/moderator/allow-listing/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/allow-listing/remove.pot b/docs/locales/gettext/moderator/allow-listing/remove.pot index 5f07f5eaa..e3fea5e24 100644 --- a/docs/locales/gettext/moderator/allow-listing/remove.pot +++ b/docs/locales/gettext/moderator/allow-listing/remove.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/content/delete.pot b/docs/locales/gettext/moderator/content/delete.pot index f67bb9cce..30ecf12b4 100644 --- a/docs/locales/gettext/moderator/content/delete.pot +++ b/docs/locales/gettext/moderator/content/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/content/edits.pot b/docs/locales/gettext/moderator/content/edits.pot index e8870c8b7..52e93f44d 100644 --- a/docs/locales/gettext/moderator/content/edits.pot +++ b/docs/locales/gettext/moderator/content/edits.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/content/index.pot b/docs/locales/gettext/moderator/content/index.pot index 8c31f178a..0d63c0a95 100644 --- a/docs/locales/gettext/moderator/content/index.pot +++ b/docs/locales/gettext/moderator/content/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/content/library.pot b/docs/locales/gettext/moderator/content/library.pot index 6c22fdd40..ef63d3f18 100644 --- a/docs/locales/gettext/moderator/content/library.pot +++ b/docs/locales/gettext/moderator/content/library.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/domains/add.pot b/docs/locales/gettext/moderator/domains/add.pot index 5830e92a2..7b16c309b 100644 --- a/docs/locales/gettext/moderator/domains/add.pot +++ b/docs/locales/gettext/moderator/domains/add.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/domains/index.pot b/docs/locales/gettext/moderator/domains/index.pot index 0fb3204f4..9fa318d2a 100644 --- a/docs/locales/gettext/moderator/domains/index.pot +++ b/docs/locales/gettext/moderator/domains/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/domains/purge.pot b/docs/locales/gettext/moderator/domains/purge.pot index 32ee4e8a1..1b7c60cb1 100644 --- a/docs/locales/gettext/moderator/domains/purge.pot +++ b/docs/locales/gettext/moderator/domains/purge.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/domains/rules/add.pot b/docs/locales/gettext/moderator/domains/rules/add.pot index f4b36599f..57992db03 100644 --- a/docs/locales/gettext/moderator/domains/rules/add.pot +++ b/docs/locales/gettext/moderator/domains/rules/add.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/domains/rules/delete.pot b/docs/locales/gettext/moderator/domains/rules/delete.pot index 02af19b10..273b0637c 100644 --- a/docs/locales/gettext/moderator/domains/rules/delete.pot +++ b/docs/locales/gettext/moderator/domains/rules/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/domains/rules/edit.pot b/docs/locales/gettext/moderator/domains/rules/edit.pot index a0ff2c970..a1dc1b787 100644 --- a/docs/locales/gettext/moderator/domains/rules/edit.pot +++ b/docs/locales/gettext/moderator/domains/rules/edit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/external-users/index.pot b/docs/locales/gettext/moderator/external-users/index.pot index c59f5afe8..90191b085 100644 --- a/docs/locales/gettext/moderator/external-users/index.pot +++ b/docs/locales/gettext/moderator/external-users/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/external-users/purge.pot b/docs/locales/gettext/moderator/external-users/purge.pot index 481515ac5..eb952b278 100644 --- a/docs/locales/gettext/moderator/external-users/purge.pot +++ b/docs/locales/gettext/moderator/external-users/purge.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/external-users/rules/add.pot b/docs/locales/gettext/moderator/external-users/rules/add.pot index 70f1bbff6..d894f28b6 100644 --- a/docs/locales/gettext/moderator/external-users/rules/add.pot +++ b/docs/locales/gettext/moderator/external-users/rules/add.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/external-users/rules/delete.pot b/docs/locales/gettext/moderator/external-users/rules/delete.pot index 753999917..4604b110d 100644 --- a/docs/locales/gettext/moderator/external-users/rules/delete.pot +++ b/docs/locales/gettext/moderator/external-users/rules/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/external-users/rules/edit.pot b/docs/locales/gettext/moderator/external-users/rules/edit.pot index 41ae63c68..050f19bd7 100644 --- a/docs/locales/gettext/moderator/external-users/rules/edit.pot +++ b/docs/locales/gettext/moderator/external-users/rules/edit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/index.pot b/docs/locales/gettext/moderator/index.pot index 8efa2d9e1..edf6034b9 100644 --- a/docs/locales/gettext/moderator/index.pot +++ b/docs/locales/gettext/moderator/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/internal-users/index.pot b/docs/locales/gettext/moderator/internal-users/index.pot index 721ada39b..95d5e92f1 100644 --- a/docs/locales/gettext/moderator/internal-users/index.pot +++ b/docs/locales/gettext/moderator/internal-users/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/internal-users/registration.pot b/docs/locales/gettext/moderator/internal-users/registration.pot index 951eb4d08..f1f450aa9 100644 --- a/docs/locales/gettext/moderator/internal-users/registration.pot +++ b/docs/locales/gettext/moderator/internal-users/registration.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/reports/content.pot b/docs/locales/gettext/moderator/reports/content.pot index 68c039f8f..97c7ed75e 100644 --- a/docs/locales/gettext/moderator/reports/content.pot +++ b/docs/locales/gettext/moderator/reports/content.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/reports/index.pot b/docs/locales/gettext/moderator/reports/index.pot index 3eb98fe3f..9cd1a1de9 100644 --- a/docs/locales/gettext/moderator/reports/index.pot +++ b/docs/locales/gettext/moderator/reports/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/reports/notes.pot b/docs/locales/gettext/moderator/reports/notes.pot index ad131bd48..9094ef644 100644 --- a/docs/locales/gettext/moderator/reports/notes.pot +++ b/docs/locales/gettext/moderator/reports/notes.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/reports/search.pot b/docs/locales/gettext/moderator/reports/search.pot index 40eb73074..47a47323c 100644 --- a/docs/locales/gettext/moderator/reports/search.pot +++ b/docs/locales/gettext/moderator/reports/search.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/reports/users.pot b/docs/locales/gettext/moderator/reports/users.pot index 244253ca6..0646cfdf7 100644 --- a/docs/locales/gettext/moderator/reports/users.pot +++ b/docs/locales/gettext/moderator/reports/users.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/moderator/reports/view.pot b/docs/locales/gettext/moderator/reports/view.pot index 9f86e3c98..a87a0c6db 100644 --- a/docs/locales/gettext/moderator/reports/view.pot +++ b/docs/locales/gettext/moderator/reports/view.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/activity.pot b/docs/locales/gettext/user/accounts/activity.pot index b267482f8..ebb2c3fb8 100644 --- a/docs/locales/gettext/user/accounts/activity.pot +++ b/docs/locales/gettext/user/accounts/activity.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/avatar/add.pot b/docs/locales/gettext/user/accounts/avatar/add.pot index abd1d2148..4528b0aa1 100644 --- a/docs/locales/gettext/user/accounts/avatar/add.pot +++ b/docs/locales/gettext/user/accounts/avatar/add.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/avatar/delete.pot b/docs/locales/gettext/user/accounts/avatar/delete.pot index 76b883953..cca4abd55 100644 --- a/docs/locales/gettext/user/accounts/avatar/delete.pot +++ b/docs/locales/gettext/user/accounts/avatar/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/create.pot b/docs/locales/gettext/user/accounts/create.pot index 7704449d3..fb97a86c0 100644 --- a/docs/locales/gettext/user/accounts/create.pot +++ b/docs/locales/gettext/user/accounts/create.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/delete.pot b/docs/locales/gettext/user/accounts/delete.pot index 54c8b8c7b..88a872ebf 100644 --- a/docs/locales/gettext/user/accounts/delete.pot +++ b/docs/locales/gettext/user/accounts/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/email.pot b/docs/locales/gettext/user/accounts/email.pot index 3c3bce99e..84c4ebf93 100644 --- a/docs/locales/gettext/user/accounts/email.pot +++ b/docs/locales/gettext/user/accounts/email.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/index.pot b/docs/locales/gettext/user/accounts/index.pot index 87f582866..0e2555be4 100644 --- a/docs/locales/gettext/user/accounts/index.pot +++ b/docs/locales/gettext/user/accounts/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/password.pot b/docs/locales/gettext/user/accounts/password.pot index 5e19162b9..85f2eb5b1 100644 --- a/docs/locales/gettext/user/accounts/password.pot +++ b/docs/locales/gettext/user/accounts/password.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/accounts/quota.pot b/docs/locales/gettext/user/accounts/quota.pot index 49381303f..ad133840c 100644 --- a/docs/locales/gettext/user/accounts/quota.pot +++ b/docs/locales/gettext/user/accounts/quota.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/artist/delete.pot b/docs/locales/gettext/user/channels/artist/delete.pot index d68f33154..30e2dbd60 100644 --- a/docs/locales/gettext/user/channels/artist/delete.pot +++ b/docs/locales/gettext/user/channels/artist/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/artist/upload.pot b/docs/locales/gettext/user/channels/artist/upload.pot index e2aff7894..4e9592b02 100644 --- a/docs/locales/gettext/user/channels/artist/upload.pot +++ b/docs/locales/gettext/user/channels/artist/upload.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/create.pot b/docs/locales/gettext/user/channels/create.pot index 2dba33ffd..6d3a8bc53 100644 --- a/docs/locales/gettext/user/channels/create.pot +++ b/docs/locales/gettext/user/channels/create.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/delete.pot b/docs/locales/gettext/user/channels/delete.pot index 46a36d08f..e57fceb0e 100644 --- a/docs/locales/gettext/user/channels/delete.pot +++ b/docs/locales/gettext/user/channels/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/edit.pot b/docs/locales/gettext/user/channels/edit.pot index b69a64fbf..eaaffe4f3 100644 --- a/docs/locales/gettext/user/channels/edit.pot +++ b/docs/locales/gettext/user/channels/edit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/follow.pot b/docs/locales/gettext/user/channels/follow.pot index 2ee161cf2..f6f8fd760 100644 --- a/docs/locales/gettext/user/channels/follow.pot +++ b/docs/locales/gettext/user/channels/follow.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/index.pot b/docs/locales/gettext/user/channels/index.pot index 7f1f6e4e7..3ab994eff 100644 --- a/docs/locales/gettext/user/channels/index.pot +++ b/docs/locales/gettext/user/channels/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/podcast/delete.pot b/docs/locales/gettext/user/channels/podcast/delete.pot index 2a28aecac..e4c36604e 100644 --- a/docs/locales/gettext/user/channels/podcast/delete.pot +++ b/docs/locales/gettext/user/channels/podcast/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/podcast/upload.pot b/docs/locales/gettext/user/channels/podcast/upload.pot index d040493d5..b96da96a1 100644 --- a/docs/locales/gettext/user/channels/podcast/upload.pot +++ b/docs/locales/gettext/user/channels/podcast/upload.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/channels/rss.pot b/docs/locales/gettext/user/channels/rss.pot index 24409b8f3..044ace78c 100644 --- a/docs/locales/gettext/user/channels/rss.pot +++ b/docs/locales/gettext/user/channels/rss.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/favorites/add.pot b/docs/locales/gettext/user/favorites/add.pot index a94c30e4b..ad78410bb 100644 --- a/docs/locales/gettext/user/favorites/add.pot +++ b/docs/locales/gettext/user/favorites/add.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/favorites/index.pot b/docs/locales/gettext/user/favorites/index.pot index 5553c0f31..7002d044b 100644 --- a/docs/locales/gettext/user/favorites/index.pot +++ b/docs/locales/gettext/user/favorites/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/favorites/remove.pot b/docs/locales/gettext/user/favorites/remove.pot index 7d72819aa..41dc9af3b 100644 --- a/docs/locales/gettext/user/favorites/remove.pot +++ b/docs/locales/gettext/user/favorites/remove.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/index.pot b/docs/locales/gettext/user/index.pot index 0bcf42e7e..3d7ed8473 100644 --- a/docs/locales/gettext/user/index.pot +++ b/docs/locales/gettext/user/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/info/cli.pot b/docs/locales/gettext/user/info/cli.pot index af3665b5a..0eb8f7066 100644 --- a/docs/locales/gettext/user/info/cli.pot +++ b/docs/locales/gettext/user/info/cli.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/content/delete.pot b/docs/locales/gettext/user/libraries/content/delete.pot index 3b6610fbb..4ad8ffeaf 100644 --- a/docs/locales/gettext/user/libraries/content/delete.pot +++ b/docs/locales/gettext/user/libraries/content/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/content/edit.pot b/docs/locales/gettext/user/libraries/content/edit.pot index 6f5cddb26..658331f85 100644 --- a/docs/locales/gettext/user/libraries/content/edit.pot +++ b/docs/locales/gettext/user/libraries/content/edit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/content/tag.pot b/docs/locales/gettext/user/libraries/content/tag.pot index 2f7095b76..e6b7ad5e6 100644 --- a/docs/locales/gettext/user/libraries/content/tag.pot +++ b/docs/locales/gettext/user/libraries/content/tag.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -21,7 +21,7 @@ msgid "Tag your content with Picard" msgstr "" #: ../../user/libraries/content/tag.md:3 -msgid "Funkwhale relies on [ID3 tags](https://id3.org/) to sort audio content. ID3 tags tell Funkwhale information about your files. Funkwhale uses this information to display your content in your {term}`pod`." +msgid "Funkwhale relies on [ID3 tags](https://wikipedia.org/wiki/ID3) to sort audio content. ID3 tags tell Funkwhale information about your files. Funkwhale uses this information to display your content in your {term}`pod`." msgstr "" #: ../../user/libraries/content/tag.md:5 diff --git a/docs/locales/gettext/user/libraries/content/upload.pot b/docs/locales/gettext/user/libraries/content/upload.pot index b157983c8..44c450133 100644 --- a/docs/locales/gettext/user/libraries/content/upload.pot +++ b/docs/locales/gettext/user/libraries/content/upload.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/create.pot b/docs/locales/gettext/user/libraries/create.pot index 1f9eb2cec..f1e28537b 100644 --- a/docs/locales/gettext/user/libraries/create.pot +++ b/docs/locales/gettext/user/libraries/create.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/delete.pot b/docs/locales/gettext/user/libraries/delete.pot index 9504f37f6..c5a26d2e5 100644 --- a/docs/locales/gettext/user/libraries/delete.pot +++ b/docs/locales/gettext/user/libraries/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/edit.pot b/docs/locales/gettext/user/libraries/edit.pot index 8b78404d6..59984f54a 100644 --- a/docs/locales/gettext/user/libraries/edit.pot +++ b/docs/locales/gettext/user/libraries/edit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/follow.pot b/docs/locales/gettext/user/libraries/follow.pot index fc21bb0e8..726181a57 100644 --- a/docs/locales/gettext/user/libraries/follow.pot +++ b/docs/locales/gettext/user/libraries/follow.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/index.pot b/docs/locales/gettext/user/libraries/index.pot index 425ecb749..454a593d5 100644 --- a/docs/locales/gettext/user/libraries/index.pot +++ b/docs/locales/gettext/user/libraries/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/libraries/share.pot b/docs/locales/gettext/user/libraries/share.pot index e0b4df8c7..9e10d304a 100644 --- a/docs/locales/gettext/user/libraries/share.pot +++ b/docs/locales/gettext/user/libraries/share.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/content/add.pot b/docs/locales/gettext/user/playlists/content/add.pot index 61cabd499..e561afb7d 100644 --- a/docs/locales/gettext/user/playlists/content/add.pot +++ b/docs/locales/gettext/user/playlists/content/add.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/content/remove.pot b/docs/locales/gettext/user/playlists/content/remove.pot index c65270700..10185f1f8 100644 --- a/docs/locales/gettext/user/playlists/content/remove.pot +++ b/docs/locales/gettext/user/playlists/content/remove.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/content/reorder.pot b/docs/locales/gettext/user/playlists/content/reorder.pot index 56e7c428f..dc5214162 100644 --- a/docs/locales/gettext/user/playlists/content/reorder.pot +++ b/docs/locales/gettext/user/playlists/content/reorder.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/create.pot b/docs/locales/gettext/user/playlists/create.pot index c628a6f74..0ae4029f3 100644 --- a/docs/locales/gettext/user/playlists/create.pot +++ b/docs/locales/gettext/user/playlists/create.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/delete.pot b/docs/locales/gettext/user/playlists/delete.pot index 6d1db2a43..eae95e696 100644 --- a/docs/locales/gettext/user/playlists/delete.pot +++ b/docs/locales/gettext/user/playlists/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/edit.pot b/docs/locales/gettext/user/playlists/edit.pot index 743586ecd..7a6d4ec5e 100644 --- a/docs/locales/gettext/user/playlists/edit.pot +++ b/docs/locales/gettext/user/playlists/edit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/index.pot b/docs/locales/gettext/user/playlists/index.pot index 67821a239..862c707c5 100644 --- a/docs/locales/gettext/user/playlists/index.pot +++ b/docs/locales/gettext/user/playlists/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/playlists/listen.pot b/docs/locales/gettext/user/playlists/listen.pot index 1f642fd85..e59776df8 100644 --- a/docs/locales/gettext/user/playlists/listen.pot +++ b/docs/locales/gettext/user/playlists/listen.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/plugins/index.pot b/docs/locales/gettext/user/plugins/index.pot index 2e8265728..bc39d2297 100644 --- a/docs/locales/gettext/user/plugins/index.pot +++ b/docs/locales/gettext/user/plugins/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/plugins/listenbrainz.pot b/docs/locales/gettext/user/plugins/listenbrainz.pot index 4b234ffd6..8668b480e 100644 --- a/docs/locales/gettext/user/plugins/listenbrainz.pot +++ b/docs/locales/gettext/user/plugins/listenbrainz.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/plugins/maloja.pot b/docs/locales/gettext/user/plugins/maloja.pot index eff577b9e..d57461830 100644 --- a/docs/locales/gettext/user/plugins/maloja.pot +++ b/docs/locales/gettext/user/plugins/maloja.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/plugins/scrobbler.pot b/docs/locales/gettext/user/plugins/scrobbler.pot index 5e60fbf55..ffafe25e0 100644 --- a/docs/locales/gettext/user/plugins/scrobbler.pot +++ b/docs/locales/gettext/user/plugins/scrobbler.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/album.pot b/docs/locales/gettext/user/queue/album.pot index 200ac8de2..1a779cff1 100644 --- a/docs/locales/gettext/user/queue/album.pot +++ b/docs/locales/gettext/user/queue/album.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/artist.pot b/docs/locales/gettext/user/queue/artist.pot index 47a32cc5a..0e7d20cb1 100644 --- a/docs/locales/gettext/user/queue/artist.pot +++ b/docs/locales/gettext/user/queue/artist.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/index.pot b/docs/locales/gettext/user/queue/index.pot index eb94f567d..43b4be371 100644 --- a/docs/locales/gettext/user/queue/index.pot +++ b/docs/locales/gettext/user/queue/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/playlist.pot b/docs/locales/gettext/user/queue/playlist.pot index 71eca9475..8ebb1e910 100644 --- a/docs/locales/gettext/user/queue/playlist.pot +++ b/docs/locales/gettext/user/queue/playlist.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/rearrange.pot b/docs/locales/gettext/user/queue/rearrange.pot index 39118b324..00ac57bb0 100644 --- a/docs/locales/gettext/user/queue/rearrange.pot +++ b/docs/locales/gettext/user/queue/rearrange.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/remove.pot b/docs/locales/gettext/user/queue/remove.pot index 5964d1d4c..cde2947fb 100644 --- a/docs/locales/gettext/user/queue/remove.pot +++ b/docs/locales/gettext/user/queue/remove.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/series.pot b/docs/locales/gettext/user/queue/series.pot index b3d33b771..96f220dc3 100644 --- a/docs/locales/gettext/user/queue/series.pot +++ b/docs/locales/gettext/user/queue/series.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/queue/tracks.pot b/docs/locales/gettext/user/queue/tracks.pot index 84a6ad3ec..e3dca3db2 100644 --- a/docs/locales/gettext/user/queue/tracks.pot +++ b/docs/locales/gettext/user/queue/tracks.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/radios/create.pot b/docs/locales/gettext/user/radios/create.pot index 2002d3603..fa5205833 100644 --- a/docs/locales/gettext/user/radios/create.pot +++ b/docs/locales/gettext/user/radios/create.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/radios/delete.pot b/docs/locales/gettext/user/radios/delete.pot index d08ef3be3..e8850e2b9 100644 --- a/docs/locales/gettext/user/radios/delete.pot +++ b/docs/locales/gettext/user/radios/delete.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/radios/edit.pot b/docs/locales/gettext/user/radios/edit.pot index 0a35a110a..53f48dd4a 100644 --- a/docs/locales/gettext/user/radios/edit.pot +++ b/docs/locales/gettext/user/radios/edit.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/radios/index.pot b/docs/locales/gettext/user/radios/index.pot index f6c0477c1..c253aba7d 100644 --- a/docs/locales/gettext/user/radios/index.pot +++ b/docs/locales/gettext/user/radios/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/radios/listen.pot b/docs/locales/gettext/user/radios/listen.pot index 5a892b517..c6d8bc4d7 100644 --- a/docs/locales/gettext/user/radios/listen.pot +++ b/docs/locales/gettext/user/radios/listen.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/account.pot b/docs/locales/gettext/user/reports/account.pot index 5ca035477..ff04b564a 100644 --- a/docs/locales/gettext/user/reports/account.pot +++ b/docs/locales/gettext/user/reports/account.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/album.pot b/docs/locales/gettext/user/reports/album.pot index e3a1dcce5..2a9ff5084 100644 --- a/docs/locales/gettext/user/reports/album.pot +++ b/docs/locales/gettext/user/reports/album.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/artist.pot b/docs/locales/gettext/user/reports/artist.pot index b198db322..da15a3565 100644 --- a/docs/locales/gettext/user/reports/artist.pot +++ b/docs/locales/gettext/user/reports/artist.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/channel.pot b/docs/locales/gettext/user/reports/channel.pot index 4d08131ae..1f42abf4d 100644 --- a/docs/locales/gettext/user/reports/channel.pot +++ b/docs/locales/gettext/user/reports/channel.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/index.pot b/docs/locales/gettext/user/reports/index.pot index 1a18f62b1..bd9dacb56 100644 --- a/docs/locales/gettext/user/reports/index.pot +++ b/docs/locales/gettext/user/reports/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/library.pot b/docs/locales/gettext/user/reports/library.pot index 67b1bc75e..b4a4eed7a 100644 --- a/docs/locales/gettext/user/reports/library.pot +++ b/docs/locales/gettext/user/reports/library.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/playlist.pot b/docs/locales/gettext/user/reports/playlist.pot index cd195a66f..e8eac2dd6 100644 --- a/docs/locales/gettext/user/reports/playlist.pot +++ b/docs/locales/gettext/user/reports/playlist.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/reports/track.pot b/docs/locales/gettext/user/reports/track.pot index 35480accc..14dca1c79 100644 --- a/docs/locales/gettext/user/reports/track.pot +++ b/docs/locales/gettext/user/reports/track.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/subsonic/disable.pot b/docs/locales/gettext/user/subsonic/disable.pot index 7a67ee184..6bec3105d 100644 --- a/docs/locales/gettext/user/subsonic/disable.pot +++ b/docs/locales/gettext/user/subsonic/disable.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/subsonic/index.pot b/docs/locales/gettext/user/subsonic/index.pot index c97794a4c..07a99b6a2 100644 --- a/docs/locales/gettext/user/subsonic/index.pot +++ b/docs/locales/gettext/user/subsonic/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/subsonic/password/request.pot b/docs/locales/gettext/user/subsonic/password/request.pot index 2d8b78bd5..815eda91b 100644 --- a/docs/locales/gettext/user/subsonic/password/request.pot +++ b/docs/locales/gettext/user/subsonic/password/request.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/locales/gettext/user/subsonic/password/reset.pot b/docs/locales/gettext/user/subsonic/password/reset.pot index 7eba96934..ac6579a3b 100644 --- a/docs/locales/gettext/user/subsonic/password/reset.pot +++ b/docs/locales/gettext/user/subsonic/password/reset.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: funkwhale 1.3.0-rc3\n" +"Project-Id-Version: funkwhale 1.2.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-01 14:39+0100\n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/docs/poetry.lock b/docs/poetry.lock index 8236d1d5d..3e1392bfe 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -1,5 +1,3 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. - [[package]] name = "alabaster" version = "0.7.13" @@ -7,10 +5,6 @@ description = "A configurable sidebar-enabled Sphinx theme" category = "main" optional = false python-versions = ">=3.6" -files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] [[package]] name = "asgiref" @@ -19,10 +13,6 @@ description = "ASGI specs, helper code, and adapters" category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, - {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, -] [package.dependencies] typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} @@ -31,16 +21,12 @@ typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] -name = "babel" +name = "Babel" version = "2.13.1" description = "Internationalization utilities" category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, - {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, -] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} @@ -49,35 +35,6 @@ setuptools = {version = "*", markers = "python_version >= \"3.12\""} [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] -[[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, -] - -[package.extras] -tzdata = ["tzdata"] - [[package]] name = "certifi" version = "2023.7.22" @@ -85,10 +42,6 @@ description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] [[package]] name = "charset-normalizer" @@ -97,7 +50,552 @@ description = "The Real First Universal Charset Detector. Open, modern and activ category = "main" optional = false python-versions = ">=3.7.0" -files = [ + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "django" +version = "3.2.23" +description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +asgiref = ">=3.3.2,<4" +pytz = "*" +sqlparse = ">=0.2.2" + +[package.extras] +argon2 = ["argon2-cffi (>=19.1.0)"] +bcrypt = ["bcrypt"] + +[[package]] +name = "django-environ" +version = "0.10.0" +description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." +category = "main" +optional = false +python-versions = ">=3.5,<4" + +[package.extras] +develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "Jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "livereload" +version = "2.6.3" +description = "Python LiveReload is an awesome tool for web developers" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" +tornado = {version = "*", markers = "python_version > \"2.7\""} + +[[package]] +name = "markdown-it-py" +version = "2.2.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "MarkupSafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mdit-py-plugins" +version = "0.3.5" +description = "Collection of plugins for markdown-it-py" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +markdown-it-py = ">=1.0.0,<3.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "myst-parser" +version = "1.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +docutils = ">=0.15,<0.20" +jinja2 = "*" +markdown-it-py = ">=1.0.0,<3.0.0" +mdit-py-plugins = ">=0.3.4,<0.4.0" +pyyaml = "*" +sphinx = ">=5,<7" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "Pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "PyYAML" +version = "6.0.1" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "68.2.2" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "Sphinx" +version = "5.3.0" +description = "Python documentation generator" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.20" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.12" +requests = ">=2.5.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] + +[[package]] +name = "sphinx-autobuild" +version = "2021.3.14" +description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = "*" +livereload = "*" +sphinx = "*" + +[package.extras] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +description = "Add a copy button to each of your code cells." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code-style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] + +[[package]] +name = "sphinx_design" +version = "0.3.0" +description = "A sphinx extension for designing beautiful, view size responsive web components." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +sphinx = ">=4,<6" + +[package.extras] +code-style = ["pre-commit (>=2.12,<3.0)"] +rtd = ["myst-parser (>=0.18.0,<0.19.0)"] +testing = ["myst-parser (>=0.18.0,<0.19.0)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] +theme-furo = ["furo (>=2022.06.04,<2022.07)"] +theme-pydata = ["pydata-sphinx-theme (>=0.9.0,<0.10.0)"] +theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] +theme-sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] + +[[package]] +name = "sphinx-intl" +version = "2.0.1" +description = "Sphinx utility that make it easy to translate and to apply translation." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +babel = "*" +click = "*" +setuptools = "*" +sphinx = "*" + +[package.extras] +test = ["mock", "pytest"] +transifex = ["transifex_client (>=0.11)"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.1.1" +description = "Read the Docs theme for Sphinx" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6,<6" + +[package.extras] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-mermaid" +version = "0.7.1" +description = "Mermaid diagrams in yours Sphinx powered docs" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sqlparse" +version = "0.4.4" +description = "A non-validating SQL parser." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +dev = ["build", "flake8"] +doc = ["sphinx"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "tornado" +version = "6.3.3" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" +optional = false +python-versions = ">= 3.8" + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +category = "main" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "urllib3" +version = "2.1.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=3.8" + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "ece2cc9c958fc0ba6daf1213b80e849dc9357d5fd8bdd09d436dfbf605dccd7c" + +[metadata.files] +alabaster = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] +asgiref = [ + {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, + {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, +] +Babel = [ + {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, + {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, +] +certifi = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] +charset-normalizer = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, @@ -189,180 +687,51 @@ files = [ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +click = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ +colorama = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] - -[[package]] -name = "django" -version = "4.1.5" -description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "Django-4.1.5-py3-none-any.whl", hash = "sha256:4b214a05fe4c99476e99e2445c8b978c8369c18d4dea8e22ec412862715ad763"}, - {file = "Django-4.1.5.tar.gz", hash = "sha256:ff56ebd7ead0fd5dbe06fe157b0024a7aaea2e0593bb3785fb594cf94dad58ef"}, +django = [ + {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, + {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, ] - -[package.dependencies] -asgiref = ">=3.5.2,<4" -"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} -sqlparse = ">=0.2.2" -tzdata = {version = "*", markers = "sys_platform == \"win32\""} - -[package.extras] -argon2 = ["argon2-cffi (>=19.1.0)"] -bcrypt = ["bcrypt"] - -[[package]] -name = "django-environ" -version = "0.9.0" -description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." -category = "main" -optional = false -python-versions = ">=3.4,<4" -files = [ - {file = "django-environ-0.9.0.tar.gz", hash = "sha256:bff5381533056328c9ac02f71790bd5bf1cea81b1beeb648f28b81c9e83e0a21"}, - {file = "django_environ-0.9.0-py2.py3-none-any.whl", hash = "sha256:f21a5ef8cc603da1870bbf9a09b7e5577ab5f6da451b843dbcc721a7bca6b3d9"}, +django-environ = [ + {file = "django-environ-0.10.0.tar.gz", hash = "sha256:b3559a91439c9d774a9e0c1ced872364772c612cdf6dc919506a2b13f7a77225"}, + {file = "django_environ-0.10.0-py2.py3-none-any.whl", hash = "sha256:510f8c9c1d0a38b0815f91504270c29440a0cf44fab07f55942fa8d31bbb9be6"}, ] - -[package.extras] -develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] - -[[package]] -name = "docutils" -version = "0.17.1" -description = "Docutils -- Python Documentation Utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ +docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, ] - -[[package]] -name = "idna" -version = "3.4" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ +idna = [ {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] - -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ +imagesize = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] - -[[package]] -name = "importlib-metadata" -version = "6.8.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ +importlib-metadata = [ {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +Jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "markdown-it-py" -version = "2.2.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +livereload = [ + {file = "livereload-2.6.3-py2.py3-none-any.whl", hash = "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4"}, + {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, +] +markdown-it-py = [ {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, ] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "2.1.3" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +MarkupSafe = [ {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, @@ -424,113 +793,31 @@ files = [ {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] - -[[package]] -name = "mdit-py-plugins" -version = "0.3.5" -description = "Collection of plugins for markdown-it-py" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +mdit-py-plugins = [ {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, ] - -[package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" - -[package.extras] -code-style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +mdurl = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] - -[[package]] -name = "myst-parser" -version = "1.0.0" -description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +myst-parser = [ {file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"}, {file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"}, ] - -[package.dependencies] -docutils = ">=0.15,<0.20" -jinja2 = "*" -markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.4,<0.4.0" -pyyaml = "*" -sphinx = ">=5,<7" - -[package.extras] -code-style = ["pre-commit (>=3.0,<4.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] -testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] -testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +packaging = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] - -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +Pygments = [ {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pytz" -version = "2023.3.post1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" -files = [ +pytz = [ {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ +PyYAML = [ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, @@ -582,359 +869,99 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +requests = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "setuptools" -version = "68.2.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ +setuptools = [ {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" -optional = false -python-versions = "*" -files = [ +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] - -[[package]] -name = "sphinx" -version = "5.3.0" -description = "Python documentation generator" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ +Sphinx = [ {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, ] - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=2.9" -colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" -imagesize = ">=1.3" -importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} -Jinja2 = ">=3.0" -packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" -snowballstemmer = ">=2.0" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = ">=2.0.0" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] - -[[package]] -name = "sphinx-copybutton" -version = "0.5.2" -description = "Add a copy button to each of your code cells." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +sphinx-autobuild = [ + {file = "sphinx-autobuild-2021.3.14.tar.gz", hash = "sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05"}, + {file = "sphinx_autobuild-2021.3.14-py3-none-any.whl", hash = "sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac"}, +] +sphinx-copybutton = [ {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, ] - -[package.dependencies] -sphinx = ">=1.8" - -[package.extras] -code-style = ["pre-commit (==2.12.1)"] -rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] - -[[package]] -name = "sphinx-design" -version = "0.3.0" -description = "A sphinx extension for designing beautiful, view size responsive web components." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ +sphinx_design = [ {file = "sphinx_design-0.3.0-py3-none-any.whl", hash = "sha256:823c1dd74f31efb3285ec2f1254caefed29d762a40cd676f58413a1e4ed5cc96"}, {file = "sphinx_design-0.3.0.tar.gz", hash = "sha256:7183fa1fae55b37ef01bda5125a21ee841f5bbcbf59a35382be598180c4cefba"}, ] - -[package.dependencies] -sphinx = ">=4,<6" - -[package.extras] -code-style = ["pre-commit (>=2.12,<3.0)"] -rtd = ["myst-parser (>=0.18.0,<0.19.0)"] -testing = ["myst-parser (>=0.18.0,<0.19.0)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] -theme-furo = ["furo (>=2022.06.04,<2022.07)"] -theme-pydata = ["pydata-sphinx-theme (>=0.9.0,<0.10.0)"] -theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] -theme-sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] - -[[package]] -name = "sphinx-intl" -version = "2.0.1" -description = "Sphinx utility that make it easy to translate and to apply translation." -category = "main" -optional = false -python-versions = ">=3.5" -files = [ +sphinx-intl = [ {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, ] - -[package.dependencies] -babel = "*" -click = "*" -setuptools = "*" -sphinx = "*" - -[package.extras] -test = ["mock", "pytest"] -transifex = ["transifex_client (>=0.11)"] - -[[package]] -name = "sphinx-rtd-theme" -version = "1.1.1" -description = "Read the Docs theme for Sphinx" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -files = [ +sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] - -[package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6,<6" - -[package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.4" -description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ +sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, ] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "main" -optional = false -python-versions = ">=3.5" -files = [ +sphinxcontrib-devhelp = [ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, ] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.1" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ +sphinxcontrib-htmlhelp = [ {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, ] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["html5lib", "pytest"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ +sphinxcontrib-jsmath = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, ] - -[package.extras] -test = ["flake8", "mypy", "pytest"] - -[[package]] -name = "sphinxcontrib-mermaid" -version = "0.7.1" -description = "Mermaid diagrams in yours Sphinx powered docs" -category = "main" -optional = false -python-versions = "*" -files = [ +sphinxcontrib-mermaid = [ {file = "sphinxcontrib-mermaid-0.7.1.tar.gz", hash = "sha256:aa8a40b50ec86ad12824b62180240ca52a9bda8424455d7eb252eae9aa5d293c"}, {file = "sphinxcontrib_mermaid-0.7.1-py2.py3-none-any.whl", hash = "sha256:3e20de1937c30dfa807e446bf99983d73d0dd3dc5c6524addda59800fe928762"}, ] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "main" -optional = false -python-versions = ">=3.5" -files = [ +sphinxcontrib-qthelp = [ {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, ] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "main" -optional = false -python-versions = ">=3.5" -files = [ +sphinxcontrib-serializinghtml = [ {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, ] - -[package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["pytest"] - -[[package]] -name = "sqlparse" -version = "0.4.4" -description = "A non-validating SQL parser." -category = "main" -optional = false -python-versions = ">=3.5" -files = [ +sqlparse = [ {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"}, {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"}, ] - -[package.extras] -dev = ["build", "flake8"] -doc = ["sphinx"] -test = ["pytest", "pytest-cov"] - -[[package]] -name = "typing-extensions" -version = "4.8.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ +tornado = [ + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, +] +typing-extensions = [ {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] - -[[package]] -name = "tzdata" -version = "2023.3" -description = "Provider of IANA time zone data" -category = "main" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, -] - -[[package]] -name = "urllib3" -version = "2.1.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=3.8" -files = [ +urllib3 = [ {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "zipp" -version = "3.17.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ +zipp = [ {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.8" -content-hash = "e2ddbf39eef68edbccfc2e9a365d6f9e26df851b41d6acf43a59319f5232b6ee" diff --git a/docs/pyproject.toml b/docs/pyproject.toml index b3618246a..c576081a4 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -10,16 +10,17 @@ python = "^3.8" sphinx = "==5.3.0" sphinx_design = "==0.3.0" +sphinx-copybutton = "==0.5.2" sphinx-intl = "2.0.1" sphinx-rtd-theme = "==1.1.1" sphinxcontrib-mermaid = "0.7.1" myst-parser = "1.0.0" -django = "==4.1.5" -django-environ = "==0.9.0" -sphinx-copybutton = "==0.5.2" +django = "==3.2.23" +django-environ = "==0.10.0" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] +sphinx-autobuild = "2021.3.14" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/docs/serve.py b/docs/serve.py deleted file mode 100755 index 3c4132a7f..000000000 --- a/docs/serve.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python3 -from subprocess import call - -# initial make -call(["python3", "-m", "sphinx", ".", "/tmp/_build"]) -from livereload import Server, shell # noqa: E402 - -server = Server() -server.watch("..", shell("python3 -m sphinx . /tmp/_build")) -server.serve(root="/tmp/_build/", liveport=35730, port=8001, host="0.0.0.0") diff --git a/docs/specs/collections/index.md b/docs/specs/collections/index.md new file mode 100644 index 000000000..c190fe97a --- /dev/null +++ b/docs/specs/collections/index.md @@ -0,0 +1,309 @@ +# Collections + +## The issue + +One of Funkwhale's primary use-cases is content management. Users expect to be able to upload, manage, and share their content easily using the Funkwhale web app or other apps that use the Funkwhale API. + +We have identified the following key focus areas: + +1. Users need to be able to share content easily +2. Users need to be able to follow collections of content easily +3. Users should have the option to upload content **without** needing to organize it explicitly +4. Users need to be able to easily move content between different collections +5. Users need to be able to assign content to multiple collections +6. Users need to be able to see all of their content and how it is organized within apps + +## Proposed solution + +To address the issues above we propose a new management solution called **Collections**. The rationale behind this solution can be found in our conversations [in the forum](https://forum.funkwhale.audio/d/214-whats-wrong-with-libraries-and-a-path-to-fix-them) and [online meeting notes](https://pad.funkwhale.audio/zs-SKbVgROapjv56lsWWtw?view). + +A collection is conceptually a container of content. Users can associate content with multiple collections and share collections with other users. When a user follows a collection, they have access to its content. + +Collections resolve the following issues: + +1. Users can organize their content exactly how they want to +2. Users can associate content to multiple collections or no collections at all +3. Users can share individual objects (tracks, albums, artists, playlists) using **sharing links** +4. Users can easily view all collections they have created and followed + +This specification outlines the behaviors and workflows used in collections. + +## Terminology + +**Collections** enable users to group content **they have uploaded**. Users can create as many collections as they want and can share collections with other users. Users cannot add remote content to their own collections as this content may be revoked by other users and this would break the user experience. + +The **library** is the container that holds all content a user has access to. This includes all content the user uploads and follows. The library can contain as many **collections** as the user wants to create or follow. + +## Information architecture + +This [diagram](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=f4f2aac0-0f5e-11ed-adb9-fff9e854a67c§ion=interactions&index=0&share-id=4a268010-5164-11ed-b91a-c19cdb5a453b) demonstrates how the user's content library is organized on a conceptual level. + +## Feature behavior + +When a user uploads new content to Funkwhale, the uploaded file is associated to track, album, and artist metadata. The upload is associated to an automatically created upload collection that is invisible to the user. The user can select individual items or a list of items and assign them to one or more collections. + +In addition to user collections, we propose the following **automatic** collections: + +Uploaded content +: A collection containing all content the user uploads + +Followed content +: A collection containing all content the user has followed in external collections + +Private content +: A collection containing all content the user has not shared with anyone + +Public content +: A collection containing all content the user has shared publicly + +Favorites +: A collection containing all content the user has favorited + +These collections are managed by Funkwhale and can't be modified directly by the user. The user can use these collections get an overview of what content is local and what is being shared. + +### Backend + +A collection is stored as a model in the database. This model contains the relevant identifying information for the collection, including: + +- The name +- The UUID +- The owning actor +- The visibility level + +Uploaded items can be linked to collections using a `ManytoMany` relationship. + +```{mermaid} +classDiagram + class Upload { + -file : URI + -ManytoMany : Collections + } + class Collection 1{ + -id : UUID + -name : String + -visibility : Enum<String> + -owner : Actor + } + class Collection 2{ + -id : UUID + -name : String + -visibility : Enum<String> + -owner : Actor + } + class Collection 3{ + -id : UUID + -name : String + -visibility : Enum<String> + -owner : Actor + } + class Actor 1{ + -fid : URI + -id : UUID + -name: String + } + class Actor 2{ + -fid : URI + -id : UUID + -name: String + } + Upload -- Collection 1 : Optional + Upload -- Collection 2 : Optional + Upload -- Collection 3 : Optional + Collection 1 -- Actor 1 : Required + Collection 2 -- Actor 1 : Required + Collection 3 -- Actor 2 : Required +``` + +#### API Endpoints + +Funkwhale-compatible apps can communicate with the Funkwhale API to retrieve and modify collection data. The following actions must be facilitated by API endpoints: + +- Create a new collection +- Delete a collection +- Modify a collection's details (description, name, visibility level) +- Add uploads to a collection +- Remove uploads from a collection +- List collections +- List content contained in collections + +#### Sharing mechanism + +Users must be able to share collections with other users using sharing links. Access to content contained within the collection must be restricted to users who have the link. + +Users must be able to share any objects they want to (tracks, albums, artists, playlists). On the backend, this mechanism should do the following: + +1. Create a new collection +2. Associate the selected content to the collection +3. Return the sharing link for the collection + +This collection should not be visible to the end user. + +### Frontend + +In the frontend, the user has the ability to create, modify, and delete collections stored in their library. The user can assign content to collections during the upload process or by using the object's **context menu** after upload. + +When the user adds a containing object such as an artist discography, album, or playlist, all tracks **currently associated** with the object are added. The collection does not update if new content is associated to the object. + +#### Viewing collections + +The content of each collection can be viewed in a **Collection page**. This page offers an overview of content in the collection, organized by content type (track, album, artist, playlist). This page can be used to highlight content such as recently favorited tracks or a variable random selection. + +Users can see all of their collections in the **User library page**. This page clearly shows users all of their collections as well as information such whether the collections are shared or private. + +## Workflows + +In this section we detail the workflows behind some of the actions users are able to take using collections. + +### Uploading content + +The user should be able to choose exactly where their content should go **during the upload process**. They should be able to choose to associate the upload with multiple collections or no collections. This process is outlined in the flowchart below: + +```{mermaid} +flowchart TD + user[Authenticated user] --> upload[Select upload button] + upload --> destination{Is the destination \nalready selected?} --> |no| select[User chooses collections\nor library] + destination --> |yes| choose[User chooses the\nfiles to upload] + select --> choose + choose --> verify[Funkwhale verifies\nmetada] --> correct{Is the metadata\nvalid?} --> |no| edit[User edits metadata\nin Picard] --> verify + correct --> |yes| finish([Upload completes]) +``` + +### Deleting content + +Users must be able to delete content from their own library easily at any time. Deleting the uploaded content must remove it from any associated collections. + +### Creating a collection + +The user should be able to create a collection in one of two ways: + +1. By selecting a page that contains collections and selecting the "Add collection" option +2. By selecting the "Create new collection" from an object's context menu + +In each case, the user should be given a form to fill out with information including: + +- The collection name +- The collection description +- The collection's visibility level + +### Deleting a collection + +If a user decides to delete a collection it **must not** delete the content contained in the collection. When the user selects delete a warning must communicate the following: + +- The collection will no longer be available in the user library page or search results +- Users with whom the collection is currently shared will lose access to the collection's content + +### Adding content to a collection + +Users should be able to select collections during the upload process to add the content immediately. + +Users should also be able to select an object's context menu and choose collections from the "Organize and share" submenu. Upon ticking the checkbox, an API call should fire to associate the upload(s) with the collection(s). + +### Removing content from a collection + +Users should be able to remove content from collections by visiting the collection's page, selecting the items, and selecting "Remove from collection". + +Users should also be able to select an object's context menu and choose collections from the "Organize and share" submenu. Upon deselecting the checkbox, an API call should fire to break the association between the upload(s) and the collection(s). + +### Sharing a collection + +Users must be able to assign a visibility level to their collections. This brokers access to the content for other users and is split up as follows: + +- "Private": only the owner and direct followers can access the content. Followers require explicit approval from the owner to access content +- "Local": only the owner and authenticated users on the same domain can access the content +- "Public": any user can access the content + +When a user follows a collection, the collection and its content are accessible in all parts of the library interface. + +Following a **Private** collection uses the following flow: + +1. The **owner** selects the **recipient** they want to share with +2. Funkwhale sends the **recipient** a follow URL for the collection +3. The **recipient** pastes the URL into the search bar and selects **Request to follow collection** +4. The **owner** can then **approve** or **deny** the follow request +5. The **recipient** can only access the collection's content if the **owner** approves the follow + +### Unsharing a collection + +Users must be able to revoke sharing for collections. Once a collection is unshared, the content must not be accessible to past recipients. + +The process for this changes based on the visibility level of the collection: + +- If the user wants to unshare a **Public** collection, they can change the visibility level to **Private** or **Local** +- If the user wants to unshare a **Local** collection, they can change the visibility level to **Private** +- If the user wants to unshare a **Private** collection, they must be able to select the recipient with whom they shared the collection and **invalidate** their sharing URL. When the user's server receives this invalidation request, the content must be made unavailable to the user + +When a user revokes collection access, the metadata entry for the content remains in the recipient's library but is **disabled**. The UI should display a message informing the recipient that they no longer have access to the containing collection. The recipient can hide or remove the metadata entry by selecting "Forget" from the entry's content menu. + +### Following collections + +Users must be able to follow remote content and collections so that the content appears in their library. This content must be clearly marked as external and should not contain the option to add to user collections. + +### Unfollowing collections + +Users must be able to unfollow collections by visiting the collection's page and selecting "Unfollow". The content in the collection should not be accessible to the user after they unfollow the collection. + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [x] CLI + +## Responsible parties + +- Backend group: + - Create new models and API endpoints to support collections + - Formulate a migration path for existing libraries + - Create a compatibility layer for calls between pods with **collections** and pods with **libraries** +- Design group: Create designs for the different ares of the app in which collections are to be shown: + - Search results + - The collection page + - The user library page + - Sharing menus for content +- Documentation group: + - Create UX copy for all designs (in collaboration with design group) + - Document the behavior of collections for end users + - Document the behavior of collections for admins + - Document the structure of the data/API for developers +- Frontend group: + - Create new collection page in line with designs + - Create new user library page in line with designs + - Update search results page to show collections + - Add new context menus for collection management + +## Open questions + +- Terminology: Does “following” a collection make sense? Would “add to library” be better? + +## Minimum viable product + +On the backend, we must: + +1. Create the new models for collections +2. Create endpoints to satisfy the requirements laid out in the feature behavior section +3. Create a migration path and demonstrate successful migration of libraries to collections +4. Create a translation layer between APIv1 library APIs and APIv2 collection APIs + +On the frontend, we must: + +1. Update the user profile page to show the user's collections +2. Update the user's library page to show the user's collections +3. Create the new collection page with separate tabs for artists, albums, playlists, and tracks +4. Add collection management options to the upload form +5. Add collection management options to the object context menus + +Mockups for these pages [are available here](https://dev.funkwhale.audio/funkwhale/funkwhale-design/-/raw/master/specs/collections%20-%20user%20profile.pdf) + +The MVP must allow users to perform the following actions: + +- Add or delete content from their library +- Create and delete collections +- Add content to and remove content from collections +- Share and unshare collections + +### Next steps + +After the core mechanics are implemented, we can add the following to the frontend: + +- User library page: Automatic collections +- Collection page: overview tab +- Replace user favorites page with a browsable collection diff --git a/docs/specs/multi-artist/index.md b/docs/specs/multi-artist/index.md new file mode 100644 index 000000000..21b2b800b --- /dev/null +++ b/docs/specs/multi-artist/index.md @@ -0,0 +1,28 @@ +# Multi-artist support + +Funkwhale requires all releases and recordings to be associated to an artist. In Funkwhale's current structure, only one artist can be associated with a release or recording. However, many releases and recordings are credited to multiple artists. + +Funkwhale supports adding releases with multiple contributors by assigning a generic "Various Artists" artist to collaborative releases. This approach doesn't give proper credit to the contributors, and leads to lots of content being improperly catalogued. + +When a user uploads content created by multiple collaborative artists, they expect the following behavior: + +1. Releases to which the artist has contributed should be present on the artist's page +2. Releases to which the artist has contributed should be present in search results for the artist +3. Releases and recordings should contain links to all contributing artists so that users can discover their other work + +Currently, Funkwhale has no facility to parse multi-artist releases. The metadata fields that hold this information (`ALBUMARTIST` and `ARTIST`) are challenging to parse as they aren't formatted in a consistent way. When a release has multiple contributing artists, Funkwhale needs to be able to parse the following information about each artist to ensure the content is tagged with each artist as a user would expect: + +1. Any aliases the contributing artist might use +2. The **join phrase** used to separate artists in the tag + +```{toctree} +--- +caption: Specifications +maxdepth: 1 + +--- + +mb-content +non-mb-content + +``` diff --git a/docs/specs/multi-artist/mb-content.md b/docs/specs/multi-artist/mb-content.md new file mode 100644 index 000000000..9533c668e --- /dev/null +++ b/docs/specs/multi-artist/mb-content.md @@ -0,0 +1,369 @@ +# Multi-artist support for MusicBrainz-tagged content + +## Terminology + +The following terminology is used throughout this spec: + +Join phrase +: The token used to split a list of artists and represent their role in content + +Release +: An **album** or **single**. In Funkwhale a release is represented by the `Album` model + +Recording +: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model + +## Proposed solution + +To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. + +A `fetch_credit` strategy should be used to fetch artist credit directly from MusicBrainz's entry for releases and recordings. + +## Feature behavior + +The workflow for `ArtistCredit` population goes as follows: + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> mb-tagged{Does the content have a MusicBrainz ID?} + mb-tagged -->|yes| query(Funkwhale queries the MusicBrainz API to\nretrieve artist information for each\nunique mbid) + query --> create(Funkwhale fetches artist information\nand creates Artist entries for any\nartists not present in the database) + create --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) +``` + +### Backend + +The backend is responsible for + +1. Tokenizing artist tags when a MusicBrainz ID **isn't** present in the file metadata and creating `Artist` entries for new artists +2. Querying the MusicBrainz API when a MusicBrainz ID **is** present and creating `Artist` entries for new artists +3. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +4. Adding the `ArtistCredit` links to `Track` and `Album` entries + +The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. + +#### Data model + +A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: + +- The Funkwhale `artist_id` of the artist associated with the release or recording +- The `credit` representing the credited name of the artist as given for the release or recording +- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) + +```{mermaid} +classDiagram + direction LR + class Album { + String title + ArtistCredit artist_credit + Date release_date + String release_group_id + Attachment attachment_cover + String type + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + List api_includes + String api + String federation_namespace + MusicBrainz musicbrainz_model + String musicbrainz_mapping + } + class Track { + UUID mbid + String title + ArtistCredit artist_credit + Integer disc_number + Integer position + Album album + License license + Actor attributed_to + String copyright + Attachment attachment_cover + Integer downloads_count + String federation_namespace + String musicbrainz_model + String api + List api_includes + MusicBrainz musicbrainz_mapping + String import_hooks + QuerySet objects + Fetch fetches + } + class Artist { + String name + String federation_namespace + String musicbrainz_model + Object musicbrainz_mapping + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + Attachment attachment_cover + String content_category + Date modification_date + String api + QuerySet objects + } + class ArtistCredit { + Artist artist_id + String credit + String joinphrase + } + Track "1" --> Album : album + Track "1..*" --> ArtistCredit : artist_credit + Album "1..*" --> ArtistCredit : artist_credit + ArtistCredit "1" --> Artist : Artist +``` + +#### Workflow + +On the backend, the workflow for fetching `ArtistCredit` information is as follows: + +```{mermaid} +sequenceDiagram + ArtistCredit ->> fetch_credit: Fetch credit from MusicBrainz + fetch_credit -->> ArtistCredit: Return credit information from MusicBrainz +``` + +If MusicBrainz tags are present in the file metadata, the `fetch_credit` strategy should always be preferred to ensure that content aligns with MusicBrainz's tagging. + +To maintain compatibility with MusicBrainz and ensure that Funkwhale can parse multi-artist releases, the MusicBrainz API should be used to fetch contributor information relating to the release. + +The [`/release` and `/recording` endpoints](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) return `artist-credit` information when called with a `inc=artists` parameter. This information can be parsed to fetch relevant information: + +- The `joinphrase` +- The MusicBrainz `id` of the `artist` +- The artist's `name` + +```text +https://musicbrainz.org/ws/2/release/ef140c88-8bf1-4e50-9555-5c1d1ed5865c?fmt=json&inc=artists +``` + +```json +{ + "asin": null, + "cover-art-archive": { + "darkened": false, + "artwork": true, + "front": true, + "back": false, + "count": 1 + }, + "release-events": [ + { + "area": { + "id": "525d4e18-3d00-31b9-a58b-a146a916de8f", + "type": null, + "name": "[Worldwide]", + "disambiguation": "", + "sort-name": "[Worldwide]", + "iso-3166-1-codes": ["XW"], + "type-id": null + }, + "date": "2012-11-15" + } + ], + "quality": "normal", + "barcode": "", + "date": "2012-11-15", + "status-id": "4e304316-386d-3409-af2e-78857eec5cfe", + "status": "Official", + "title": "One Christmas at a Time", + "disambiguation": "", + "text-representation": { + "script": "Latn", + "language": "eng" + }, + "packaging-id": "119eba76-b343-3e02-a292-f0f00644bb9b", + "packaging": "None", + "country": "XW", + "id": "ef140c88-8bf1-4e50-9555-5c1d1ed5865c", + "artist-credit": [ + { + "joinphrase": " & ", + "name": "Jonathan Coulton", + "artist": { + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df", + "name": "Jonathan Coulton", + "id": "d8df7087-06d5-4545-9024-831bb8558ad1", + "sort-name": "Coulton, Jonathan", + "disambiguation": "", + "type": "Person" + } + }, + { + "artist": { + "type": "Person", + "disambiguation": "", + "id": "7b5b87d3-f3ee-4b5d-b111-1f2e87f87124", + "sort-name": "Roderick, John", + "name": "John Roderick", + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df" + }, + "name": "John Roderick", + "joinphrase": "" + } + ] +} +``` + +To catalogue multi-artist content, Funkwhale needs to: + +1. Fetch information for **each** contributing artist and create `Artist` objects for any that don't exist +2. Create `ArtistCredit` objects associated with each release and recording for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +3. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Funkwhale ->> MusicBrainz: /release/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Album and ArtistCredit information + Funkwhale ->> MusicBrainz: /recording/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Track and ArtistCredit information + loop For each unique artist mbid + Funkwhale ->> MusicBrainz: /artist/{mbid}?fmt=json&inc=aliases + MusicBrainz -->> Funkwhale: Artist information + end +``` + +Given the above example, Funkwhale would create the following `ArtistCredit` object: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ---------------- | ---------- | +| 1 | 1 | Jonathan Coulton | & | +| 2 | 2 | John Roderick | | + +#### API behavior + +The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. + +Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. + +To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: + +```text +https://open.audio/api/v2/albums?credited_artist=6451,6452 +``` + +The `credit` field of the `artist_credit` object must also be searchable using a standard query: + +```text +https://tanukitunes.com/api/v2/albums?q=jonathan+coulton +``` + +#### Migration + +To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: + +- `artist_id` = Artist `id` +- `credit` = Artist `name` +- `joinphrase` = `""` + +Each album/track must have at least one `artist_credit` entry listed against it. + +### Frontend + +Data needs to be clearly presented in the web app to ensure that users can easily see which artists collaborated on a work and discover more of their work. + +#### Representation in releases and tracks + +The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. + +The frontend should format the results as follows for **each** artist: + +```html +<span> + <a href="{funkwhale_url}/library/artists/{artist_id}">{credit}</a>{joinphrase} +</span> +``` + +For example, given the following `artist_credit` response: + +```json +[ + { + "artist_id": 25, + "credit": "Jonathan Coulton", + "joinphrase": " & " + }, + { + "artist_id": 395, + "credit": "John Roderick", + "joinphrase": "" + } +] +``` + +The frontend would render the following: + +```html +<span> + <a href="https://open.audio/library/artists/25">Jonathan Coulton</a> & + <a href="https://open.audio/library/artists/395">John Roderick</a> +</span> +``` + +#### "Also appears in" section + +To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. + +Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. + +#### "Compilations" page + +The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. + +### Documentation + +The following needs to be documented: + +- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content +- The environment setting to override the join phrase list +- Any tasks or script functions which are created to automate the update of historical content + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- The backend developers in the **Development** group are responsible for: + - Creating the new `ArtistCredit` model + - Updating the `Album` and `Track` models to link to `ArtistCredit` entries + - Creating the strategies for populating `ArtistCredit` during the upload process + - Updating the API/creating new endpoints + - Creating the database migration to add the new field and that artist information is copied over +- The frontend developers in the **Development** group are responsible for: + - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response + - Creating the new "Also appears in" section for the artist discography pages +- The **Design** group is responsible for: + - Providing designs for how multi-artist content should be rendered responsively + - Providing designs for the new "Compilations" page + - Providing designs for the updated Artist page +- The **Documentation** group is responsible for: + - Documenting the new feature behavior + - Documenting the new environment settings + - Providing docstrings for API development + +## Open questions + +- What should be used as the default join words list? +- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? + +## Minimum viable product + +The MVP for this product is an implementation of the backend behavior. It should: + +1. Set up the new models +2. Create the database migration + +### Next steps + +1. Create a `manage.py` script that enables admins to update entries in the database +2. Create a task that updates files imported in-place diff --git a/docs/specs/multi-artist/non-mb-content.md b/docs/specs/multi-artist/non-mb-content.md new file mode 100644 index 000000000..b0b16933b --- /dev/null +++ b/docs/specs/multi-artist/non-mb-content.md @@ -0,0 +1,348 @@ +# Multi-artist support for non-MusicBrainz-tagged content + +## Terminology + +The following terminology is used throughout this spec: + +Join phrase +: The token used to split a list of artists and represent their role in content + +Release +: An **album** or **single**. In Funkwhale a release is represented by the `Album` model + +Recording +: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model + +## Proposed solution + +To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. + +To account for content tagged in tagged in systems **other than MusicBrainz**, a `parse_credit` strategy should be used to parse artist credit from a file's metadata using join phrase parsing. + +## Feature behavior + +The workflow for `ArtistCredit` population goes as follows: + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> mb-tagged{Does the content have a MusicBrainz ID?} + mb-tagged -->|no| parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) + parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) + artist --> model(Funkwhale stores the <code>artist_credit</code> information\nfor each release/recording) + model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) +``` + +### Backend + +The backend is responsible for + +1. Tokenizing artist tags in the file's metadata and creating `Artist` entries for new artists +2. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +3. Adding the `ArtistCredit` links to `Track` and `Album` entries + +The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. + +#### Data model + +A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: + +- The Funkwhale `artist_id` of the artist associated with the release or recording +- The `credit` representing the credited name of the artist as given for the release or recording +- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) + +```{mermaid} +classDiagram + direction LR + class Album { + String title + ArtistCredit artist_credit + Date release_date + String release_group_id + Attachment attachment_cover + String type + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + List api_includes + String api + String federation_namespace + MusicBrainz musicbrainz_model + String musicbrainz_mapping + } + class Track { + UUID mbid + String title + ArtistCredit artist_credit + Integer disc_number + Integer position + Album album + License license + Actor attributed_to + String copyright + Attachment attachment_cover + Integer downloads_count + String federation_namespace + String musicbrainz_model + String api + List api_includes + MusicBrainz musicbrainz_mapping + String import_hooks + QuerySet objects + Fetch fetches + } + class Artist { + String name + String federation_namespace + String musicbrainz_model + Object musicbrainz_mapping + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + Attachment attachment_cover + String content_category + Date modification_date + String api + QuerySet objects + } + class ArtistCredit { + Artist artist_id + String credit + String joinphrase + } + Track "1" --> Album : album + Track "1..*" --> ArtistCredit : artist_credit + Album "1..*" --> ArtistCredit : artist_credit + ArtistCredit "1" --> Artist : Artist +``` + +#### Workflow + +On the backend, the workflow for fetching `ArtistCredit` information is as follows: + +```{mermaid} +sequenceDiagram + ArtistCredit ->> parse_credit: Parse credit from tags + parse_credit -->> ArtistCredit: Return credit information +``` + +Funkwhale should provide the following to enable artist parsing in non-MusicBrainz-tagged content: + +1. A sensible list of default **join phrases** that are commonly found in artist tags +2. A setting to enable admins to override or add to the list of join phrases + +Funkwhale should tokenize the `ALBUMARTIST` and `ARTIST` fields using a list of **join phrases**. For each token in the list, Funkwhale should do the following: + +1. Store content split at the **join phrase** token as the `credit` +2. Search for any artist with the same name as the `credit` and store the id as the `artist_id` + - If no existing artist is found, create a new artist and return the ID as `artist_id` +3. Store the join phrase token that it split at as the `joinphrase` +4. Create an `ArtistCredit` object for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +5. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Upload ->> parse_content: Read file metadata + loop For each artist name + parse_content ->> Artist: Search Artist entries + Artist -->> parse_content: Return entry (if exists) + parse_content ->> Artist: Create Artist entry (if none found) + end + loop For each unique artist credit combination + parse_content ->> ArtistCredit: Search ArtistCredit entries + ArtistCredit -->> parse_content: Return entry (if exists) + parse_content ->> ArtistCredit: Create ArtistCredit entry (if none found) + parse_content ->> Track: Create Track with artist_credit entries + parse_content ->> Album: Create Album with artist_credit entries + end +``` + +Funkwhale should do the following automatically: + +- Trim whitespace from the artist `credit` +- Preserve whitespace around **both sides** of the `joinphrase` for readability +- Use an **empty** string (`""`) as the `joinphrase` for the last entry in the list + +For example, given a list of join phrases like this: + +- `$`, `|`, `&`, `/`, `feat.` + +And the following tags: + +| Tag | Values | +| ----------- | ------------------------------------------------------- | +| ALBUMARTIST | Tommy J. & Bobby Forth | +| ARTIST | Tommy J. feat. Robin Devil, Jerry Sabbath & Sammy Burns | + +Funkwhale would create the following `ArtistCredit` entries for the `Album`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ----------- | ---------- | +| 1 | 1 | Tommy J. | & | +| 2 | 2 | Bobby Forth | | + +And the following for the `Track`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ------------- | ---------- | +| 3 | 1 | Tommy J. | " feat. " | +| 4 | 3 | Robin Devil | ", " | +| 5 | 4 | Jerry Sabbath | " & " | +| 6 | 5 | Sammy Burns | "" | + +#### API behavior + +The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. + +Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. + +To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: + +```text +https://open.audio/api/v2/albums?credited_artist=6451,6452 +``` + +The `credit` field of the `artist_credit` object must also be searchable using a standard query: + +```text +https://tanukitunes.com/api/v2/albums?q=jonathan+coulton +``` + +#### Migration + +To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: + +- `artist_id` = Artist `id` +- `credit` = Artist `name` +- `joinphrase` = `""` + +Each album/track must have at least one `artist_credit` entry listed against it. + +### Frontend + +To prevent issues with tagging, the user should be presented a summary of artist credits that are separated using the `parse_credit` strategy. + +Once the upload has been processed by the server, the user should be shown a summary of the uploaded content with artists listed against each recording and release. The user should then be able to amend these results and send a request to update the values. Upon receiving a new value, the server should perform the same deduplication it performs during a new upload. + +1. The user uploads new content to Funkwhale +2. Funkwhale parses the artist credits and saves the new credit objects in case the upload is interrupted +3. Funkwhale displays a summary of the changes + 1. If the results are **correct**, the user accepts the changes and finishes the upload + 2. If the results are **incorrect**, the user modifies the artist credits and submits the changes + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) + parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) + artist --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> verify(Funkwhale displays the results to the user) + verify --> correct{Are the artist tags correct?} + correct -->|no| tweak(The user corrects the details and\nsubmits the new information to Funkwhale) + tweak & correct -->|yes| finish(The user finishes the upload process) +``` + +#### Representation in releases and tracks + +The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. + +The frontend should format the results as follows for **each** artist: + +```html +<span> + <a href="{funkwhale_url}/library/artists/{artist_id}">{credit}</a>{joinphrase} +</span> +``` + +For example, given the following `artist_credit` response: + +```json +[ + { + "artist_id": 25, + "credit": "Jonathan Coulton", + "joinphrase": " & " + }, + { + "artist_id": 395, + "credit": "John Roderick", + "joinphrase": "" + } +] +``` + +The frontend would render the following: + +```html +<span> + <a href="https://open.audio/library/artists/25">Jonathan Coulton</a> & + <a href="https://open.audio/library/artists/395">John Roderick</a> +</span> +``` + +#### "Also appears in" section + +To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. + +Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. + +#### "Compilations" page + +The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. + +### Documentation + +The following needs to be documented: + +- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content +- The environment setting to override the join phrase list +- Any tasks or script functions which are created to automate the update of historical content + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- The backend developers in the **Development** group are responsible for: + - Creating the new `ArtistCredit` model + - Updating the `Album` and `Track` models to link to `ArtistCredit` entries + - Creating the strategies for populating `ArtistCredit` during the upload process + - Updating the API/creating new endpoints + - Creating the database migration to add the new field and that artist information is copied over +- The frontend developers in the **Development** group are responsible for: + - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response + - Creating the new "Also appears in" section for the artist discography pages + - Creating a workflow to enable users to verify uploaded data and fix any broken artist credits +- The **Design** group is responsible for: + - Providing designs for how multi-artist content should be rendered responsively + - Providing designs for the new "Compilations" page + - Providing designs for the updated Artist page +- The **Documentation** group is responsible for: + - Documenting the new feature behavior + - Documenting the new environment settings + - Providing docstrings for API development + +## Open questions + +- What should be used as the default join words list? +- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? + +## Minimum viable product + +The MVP for this product is an implementation of the backend behavior. It should: + +1. Set up the new models +2. Create the database migration +3. Implement the token splitting and data fetching for new files + +### Next steps + +1. Create a `manage.py` script that enables admins to update entries in the database +2. Create a task that updates files imported in-place diff --git a/docs/specs/nodeinfo21/index.md b/docs/specs/nodeinfo21/index.md new file mode 100644 index 000000000..adc27ab75 --- /dev/null +++ b/docs/specs/nodeinfo21/index.md @@ -0,0 +1,244 @@ +# NodeInfo 2.1 + +{bdg-secondary}`In progress` + +## The issue + +Servers need to communicate their capabilities in a network of communicating nodes to negotiate a common protocol. + +## Proposed solution + +Use [NodeInfo](http://nodeinfo.diaspora.software), a well-defined standard for exactly this purpose that's widely used within the Fediverse. + +## Feature behavior + +The NodeInfo endpoint is used to communicate the features and capabilities of a server. It presents details about: + +- Implemented protocols +- Enabled features +- Usage statistics +- Content metadata + +:::{seealso} +Read [the NodeInfo specification for more information](https://nodeinfo.diaspora.software/docson/index.html#/ns/schema/2.1#$$expand). +::: + +The NodeInfo endpoint must contain all mandatory elements listed in the specification. In addition to this, Funkwhale's implementation should list additional details about the instance in the `metadata` object. + +`actorId` (URL) +: The URL of the pod service actor + +`private` (Boolean) +: Whether the pod is private + +`shortDescription` (String) +: A short description of the pod + +`longDescription` (String) +: A longer description of the pod + +`contactEmail` (Email address) +: The email address of the pod administrator + +`nodeName`(String) +: The name of the pod + +`banner` (URL) +: The URL of the banner image + +`defaultUploadQuota` (Number) +: The default upload quota (in megabytes) allowed for new users + +`supportedUploadExtensions` (Array\<String\>) +: A list of file extensions enabled for upload + +`allowlist.enabled` (Boolean) +: Whether the pod admin has enabled allow-listing + +`allowlist.domains` (Array\<String\>) +: A list of allowed domains + +`funkwhaleSupportMessageEnabled` (Boolean) +: Whether the admin has enabled the Funkwhale project support message + +`instanceSupportMessage` (String) +: The support message associated with the instance + +`content.local` (Object) +: An object containing a summary of local content + +`content.local.artists` (Number) +: The number of artists associated with local uploads on the pod + +`content.local.releases` (Number) +: The number of albums or series associated with local uploads on the pod + +`content.local.recordings` (Number) +: The number of tracks or episodes associated with local uploads on the pod + +`content.local.hoursOfContent` (Number) +: The total number of hours of content associated with local uploads on the pod + +`content.topMusicCategories` (Array\<{ `name`: String, `count`: Number}>) +: The top three music genres and the number of uploads tagged with them + +`content.topPodcastCategories` (Array\<{ `name`: String, `count`: Number}>) +: The top three podcast categories and the number of uploads tagged with them + +`languages` (Array\<String\>) +: The languages spoken by the pod administrators + +`location` (String) +: The country the pod is located in + +`codeOfConduct` (String \<Url\>) +: If the server admin has populated the **Rules** setting on their pod, this value is populated with the URL to the pod's about page: `<server_domain>/about/pod#rules`. + +`federation.followsInstances` (Number) +: The number of Funkwhale pods that the target pod follows + +`federation.followingInstances` (Number) +: The number of Funkwhale pods that publicly follow the target pod + +`usage.listenings` (Number) +: The total number of listenings on the pod + +`usage.downloads` (Number) +: The total number of downloads (streams) the pod has served + +`usage.favorites.tracks` (Number) +: The total number of track favorites recorded on the pod. + +`features` (Array\<String\>) +: A list of enabled features + +### Backend + +A new NodeInfo endpoint will be created that sits alongside the existing `v1` endpoint for backwards-compatibility. + +```text +/api/v2/instance/nodeinfo/2.1 +``` + +This endpoint supports only `GET` requests and responds with the information outlined in the NodeInfo specification. + +Example response: + +```json +{ + "version": "2.1", + "software": { + "name": "Funkwhale", + "version": "1.4.0", + "repository": "https://dev.funkwhale.audio/funkwhale/funkwhale", + "homepage": "https://funkwhale.audio" + }, + "protocols": ["activitypub"], + "services": { + "inbound": ["atom1.0"], + "outbound": ["atom1.0"] + }, + "openRegistrations": true, + "usage": { + "users": { + "total": 0, + "activeHalfYear": 0, + "activeMonth": 0 + }, + "localPosts": 0, + "localComments": 0 + }, + "metadata": { + "actorId": "string", + "private": true, + "shortDescription": "string", + "longDescription": "string", + "contactEmail": "user@example.com", + "nodeName": "string", + "banner": "string", + "defaultUploadQuota": 0, + "supportedUploadExtensions": ["string"], + "allowList": { + "enabled": true, + "domains": ["string"] + }, + "funkwhaleSupportMessageEnabled": true, + "instanceSupportMessage": "string", + "languages": ["string"], + "location": "string", + "codeOfConduct": "string", + "content": { + "local": { + "artists": 1000, + "releases": 10000, + "recordings": 150000, + "hoursOfContent": 7500 + }, + "topMusicCategories": [ + { + "name": "rock", + "count": 1256 + }, + { + "name": "jazz", + "count": 604 + }, + { + "name": "classical", + "count": 308 + } + ], + "topPodcastCategories": [ + { + "name": "comedy", + "count": 12 + }, + { + "name": "politics", + "count": 4 + }, + { + "name": "nature", + "count": 1 + } + ], + "federation": { + "followedInstances": 0, + "followingInstances": 0 + } + }, + "usage": { + "listenings": 0, + "downloads": 0, + "favorites": { + "tracks": 0 + } + }, + "features": [ + "channels", + "podcasts", + "collections", + "audiobooks", + "federation", + "anonymousCanListen" + ] + } +} +``` + +## Availability + +- [ ] Admin panel +- [ ] App frontend +- [ ] CLI +- [x] API + +## Responsible parties + +Since the actual endpoint is already standardized, Backend developers need only to agree on an implementation. The Frontend group needs to check to see if changing the location of `/.well-known/nodeinfo` has an impact on the web app. + +The NodeInfo endpoint MUST be accompanied by a {download}`full OpenAPI schema file <schema.yml>` for ease of reference and implementation. + +## Open questions + +- [ ] Does changing `/.well-known/nodeinfo` have any implications on the Frontend? diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml new file mode 100644 index 000000000..e454b24c0 --- /dev/null +++ b/docs/specs/nodeinfo21/schema.yml @@ -0,0 +1,631 @@ +openapi: "3.0.3" +info: + description: "Interactive documentation for [Funkwhale](https://funkwhale.audio) API." + version: "2.0.0" + title: "Funkwhale API" + +servers: + - url: "https://demo.funkwhale.audio" + description: "Demo server" + - url: "https://open.audio" + description: "Real server with real content" + - url: "https://{domain}" + description: "Custom server" + variables: + domain: + default: yourdomain + description: "Your Funkwhale Domain" + protocol: + enum: + - "http" + - "https" + default: "https" +tags: + - name: Instance + description: Information about the server + - name: Content + description: Information about content on the server +paths: + /api/v2/instance/nodeinfo/2.1: + get: + tags: + - Instance + summary: Retrieve nodeinfo data + description: Retrieve details about a Funkwhale server using the Nodeinfo standard + operationId: getNodeinfo + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/Nodeinfo" + application/xml: + schema: + $ref: "#/components/schemas/Nodeinfo" + "401": + $ref: "#/components/responses/Unauthorized" + /api/v2/tags/podcasts: + get: + tags: + - Content + summary: Retrieve podcast categories + description: Retrieve a list of podcast categories and the number of uploads tagged with those categories + operationId: getTagsPodcasts + parameters: + - name: q + in: query + required: false + description: A free text field to filter category names + schema: + type: string + - name: page + in: query + required: false + description: The number of the result page you want to return + schema: + type: number + - name: page_size + in: query + required: false + description: The number of results to return on each page. Defaults to 50. + schema: + type: number + - name: ordering + in: query + required: false + description: | + The order in which results are presented. Preface with `-` to return items in descending order. + schema: + type: string + enum: + - "name" + - "creation_date" + - "tagged_items" + - "-name" + - "-creation_date" + - "-tagged_items" + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/Categories" + application/xml: + schema: + $ref: "#/components/schemas/Categories" + "401": + $ref: "#/components/responses/Unauthorized" + /api/v2/tags/podcasts/{category}: + get: + tags: + - Content + summary: Retrieve podcast categories + description: Retrieve a list of podcast categories and the number of uploads tagged with those categories + operationId: getTagPodcasts + parameters: + - name: category + in: path + required: true + description: The category you want to return information about + schema: + type: string + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/Category" + application/xml: + schema: + $ref: "#/components/schemas/Category" + "401": + $ref: "#/components/responses/Unauthorized" + /api/v2/tags/music: + get: + tags: + - Content + summary: Retrieve music genres + description: Retrieve a list of music genres and the number of uploads tagged with those categories + operationId: getTagsMusic + parameters: + - name: q + in: query + required: false + description: A free text field to filter genre names + schema: + type: string + - name: page + in: query + required: false + description: The number of the result page you want to return + schema: + type: number + - name: page_size + in: query + required: false + description: The number of results to return on each page. Defaults to 50. + schema: + type: number + - name: ordering + in: query + required: false + description: | + The order in which results are presented. Preface with `-` to return items in descending order. + schema: + type: string + enum: + - "name" + - "creation_date" + - "tagged_items" + - "-name" + - "-creation_date" + - "-tagged_items" + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/Genres" + application/xml: + schema: + $ref: "#/components/schemas/Genres" + "401": + $ref: "#/components/responses/Unauthorized" + /api/v2/tags/music/{genre}: + get: + tags: + - Content + summary: Retrieve podcast categories + description: Retrieve a list of podcast categories and the number of uploads tagged with those categories + operationId: getTagMusic + parameters: + - name: genre + in: path + required: true + description: The genre you want to return information about + schema: + type: string + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/Genre" + application/xml: + schema: + $ref: "#/components/schemas/Genre" + "401": + $ref: "#/components/responses/Unauthorized" +components: + responses: + Unauthorized: + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + example: + code: 401 + message: User not authorized + application/xml: + schema: + $ref: "#/components/schemas/Error" + example: + code: 401 + message: User not authorized + schemas: + Categories: + type: object + properties: + total: + type: number + next: + type: string + format: url + previous: + type: string + format: url + results: + type: array + items: + $ref: "#/components/schemas/Category" + example: + total: 5 + next: https://demo.funkwhale.audio/api/v2/categories?page=2&page_size=2&q=crime + previous: null + results: + - category: "True Crime" + created_date: "2020-01-01T00:00:00.000Z" + tagged_items: 5 + results_page: "https://demo.funkwhale.audio/library/categories/True%20Crime" + - category: "True Stories" + created_date: "2023-12-15T23:32:52.000Z" + tagged_items: 200 + results_page: "https://demo.funkwhale.audio/library/categories/True%20Stories" + Category: + type: object + properties: + category: + type: string + created_date: + type: string + format: date-time + tagged_items: + type: number + results_page: + type: string + format: url + example: + category: "True Crime" + created_date: "2020-01-01T00:00:00.000Z" + tagged_items: 5 + results_page: "https://demo.funkwhale.audio/library/categories/True%20Crime" + Genres: + type: object + properties: + total: + type: number + next: + type: string + format: url + previous: + type: string + format: url + results: + type: array + items: + $ref: "#/components/schemas/Genre" + example: + total: 5 + next: https://demo.funkwhale.audio/api/v2/categories?page=2&page_size=2&q=rock + previous: null + results: + - genre: "Acoustic Rock" + created_date: "2020-01-01T00:00:00.000Z" + tagged_items: 5 + results_page: "https://demo.funkwhale.audio/library/categories/Acoustic%20Rock" + - genre: "Surf Rock" + created_date: "2023-12-15T23:32:52.000Z" + tagged_items: 200 + results_page: "https://demo.funkwhale.audio/library/categories/Surf%20Rock" + Genre: + type: object + properties: + genre: + type: string + created_date: + type: string + format: date-time + tagged_items: + type: number + results_page: + type: string + format: url + example: + genre: "Acoustic Rock" + created_date: "2020-01-01T00:00:00.000Z" + tagged_items: 5 + results_page: "https://demo.funkwhale.audio/library/categories/Acoustic%20Rock" + Nodeinfo: + type: object + required: + - version + - software + - protocols + - services + - openRegistrations + - usage + - metadata + properties: + version: + type: string + enum: + - "2.1" + software: + type: object + required: + - name + - version + properties: + name: + type: string + enum: + - "Funkwhale" + version: + type: string + example: "1.4.0" + repository: + type: string + format: url + enum: + - "https://dev.funkwhale.audio/funkwhale/funkwhale" + homepage: + type: string + format: url + enum: + - "https://funkwhale.audio" + protocols: + type: array + minItems: 1 + items: + type: string + enum: + - "activitypub" + - "buddycloud" + - "dfrn" + - "diaspora" + - "libertree" + - "ostatus" + - "pumpio" + - "tent" + - "xmpp" + - "zot" + example: + - "activitypub" + services: + type: object + required: + - inbound + - outbound + properties: + inbound: + type: array + items: + type: string + enum: + - "atom1.0" + - "gnusocial" + - "imap" + - "pnut" + - "pop3" + - "pumpio" + - "rss2.0" + - "twitter" + outbound: + type: array + items: + type: string + enum: + - "atom1.0" + - "blogger" + - "buddycloud" + - "diaspora" + - "dreamwidth" + - "drupal" + - "facebook" + - "friendica" + - "gnusocial" + - "google" + - "insanejournal" + - "libertree" + - "linkedin" + - "livejournal" + - "mediagoblin" + - "myspace" + - "pinterest" + - "pnut" + - "posterous" + - "pumpio" + - "redmatrix" + - "rss2.0" + - "smtp" + - "tent" + - "tumblr" + - "twitter" + - "wordpress" + - "xmpp" + openRegistrations: + type: boolean + usage: + type: object + required: + - users + properties: + users: + type: object + properties: + total: + type: integer + minimum: 0 + activeHalfYear: + type: integer + minimum: 0 + activeMonth: + type: integer + minimum: 0 + localPosts: + type: integer + minimum: 0 + localComments: + type: integer + minimum: 0 + metadata: + type: object + properties: + actorId: + type: string + format: url + private: + type: boolean + shortDescription: + type: string + longDescription: + type: string + contactEmail: + type: string + format: email + nodeName: + type: string + banner: + type: string + format: url + nullable: true + defaultUploadQuota: + type: integer + supportedUploadExtensions: + type: array + items: + type: string + allowList: + type: object + properties: + enabled: + type: boolean + domains: + type: array + nullable: true + items: + type: string + funkwhaleSupportMessageEnabled: + type: boolean + instanceSupportMessage: + type: string + languages: + type: array + items: + type: string + location: + type: string + codeOfConduct: + type: string + format: url + content: + type: object + properties: + local: + type: object + properties: + artists: + type: number + releases: + type: number + recordings: + type: number + hoursOfContent: + type: number + example: + artists: 1000 + releases: 10000 + recordings: 150000 + hoursOfContent: 7500 + topMusicCategories: + type: array + items: + type: object + properties: + name: + type: string + count: + type: integer + minimum: 0 + example: + - name: "rock" + count: 1256 + - name: "jazz" + count: 604 + - name: "classical" + count: 308 + topPodcastCategories: + type: array + items: + type: object + properties: + name: + type: string + count: + type: integer + minimum: 0 + example: + - name: "comedy" + count: 12 + - name: "politics" + count: 4 + - name: "nature" + count: 1 + federation: + type: object + properties: + followedInstances: + type: integer + followingInstances: + type: integer + usage: + type: object + properties: + listenings: + type: integer + minimum: 0 + downloads: + type: integer + minimum: 0 + favorites: + type: object + properties: + tracks: + type: integer + minimum: 0 + features: + type: array + items: + type: string + example: + - "channels" + - "podcasts" + - "collections" + - "audiobooks" + - "federation" + - "anonymousCanListen" + Error: + type: object + properties: + code: + type: string + message: + type: string + required: + - code + - message + securitySchemes: + oauth2: + type: oauth2 + description: This API uses OAuth 2 with the Authorization Code flow. You can register an app using the /oauth/apps/ endpoint. + flows: + authorizationCode: + authorizationUrl: /authorize + tokenUrl: /api/v1/oauth/token/ + refreshUrl: /api/v1/oauth/token/ + scopes: + "read": "Read-only access to all user data" + "write": "Write-only access on all user data" + "read:edits": "Read-only access to edits" + "write:edits": "Write-only access to edits" + "read:favorites": "Read-only access to favorites" + "write:favorites": "Write-only access to favorits" + "read:filters": "Read-only to to content filters" + "write:filters": "Write-only access to content-filters" + "read:follows": "Read-only to follows" + "write:follows": "Write-only access to follows" + "read:libraries": "Read-only access to library and uploads" + "write:libraries": "Write-only access to libraries" + "read:listenings": "Read-only access to listening history" + "write:listenings": "Write-only access to listening history" + "read:notifications": "Read-only access to notifications" + "write:notifications": "Write-only access to notifications" + "read:playlists": "Read-only access to playlists" + "write:playlists": "Write-only access to playlists" + "read:profile": "Read-only access to profile data" + "write:profile": "Write-only access to profile data" + "read:radios": "Read-only access to radios" + "write:radios": "Write-only access to radios" + "read:reports": "Read-only access to reports" + "write:reports": "Write-only access to reports" + "read:security": "Read-only access security settings" + "write:security": "write-only access security settings" + +security: + - oauth2: [] diff --git a/docs/specs/offline-mode/index.md b/docs/specs/offline-mode/index.md new file mode 100644 index 000000000..3db3200cd --- /dev/null +++ b/docs/specs/offline-mode/index.md @@ -0,0 +1,56 @@ +# Offline mode support + +## The issue + +As raised in [#2039](https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/2039), Funkwhale's features don't work well if the device goes offline in the middle of an action such as playing a radio session. As we look forward to improving our PWA offering, we need to anticipate offline/low connectivity situations and handle these gracefully. + +## Proposed solution + +We need to provide solutions to the user experience problems that arise when a device goes offline. This will mostly be achieved by improving our service worker implementation and adding some catches that ease the process of coming back online after an outage. + +## Feature behavior + +### Offline detection + +The first thing the app needs to be able to do is detect when it has gone offline. Browsers offer [built-in support](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine) for this which we can leverage. When the device goes offline, we need to meaningfully communicate this to the user and explain exactly what this means: + +1. The user will not be able to play content +2. The user will not be able to search for content +3. The user will not be able to navigate to other pages + +### UX/UI communication + +To ensure that users don't get frustrated by non-interactive elements, the app should be **disabled** when in an offline state. This should be clearly communicated to users in the following ways: + +1. All interactive elements should be visibly disabled and their aria-status updated to inform users that no actions are possible. +2. A prominent banner should inform users that their device is offline and that most actions are not possible until connectivity returns. + +### Offline behavior + +When the device goes offline, the app should do the following: + +1. If a radio is playing, **store** the state of the radio +2. The player needs to stop attempting to load the next track and should simply stop at the end of the last fully-loaded track +3. If the player has not finished loading the currently playing track, it should halt playback and **store** the playback position +4. Cache textual information such as the instance description so that users can still see + +### Reconnecting + +When the device comes back online, the app should do the following: + +1. If a radio session is stored, **resume** the radio session +2. If the app uses an S3-compatible storage backend, it should request a refreshed token to ensure the track data and media information can be fetched properly for existing queue items + +## Open questions + +- Can we cache any other content that would improve the user experience? +- What information do we need to convey to users when the device goes offline? + +## Minimum viable product + +The MVP should aim to address the linked issue specifically: + +1. It should **detect** when the connection is lost +2. It should store the playing radio's state +3. It should **detect** when the connection is resumed +4. It should resume the radio session without disruption diff --git a/docs/specs/quality-filter/index.md b/docs/specs/quality-filter/index.md new file mode 100644 index 000000000..e61da81ef --- /dev/null +++ b/docs/specs/quality-filter/index.md @@ -0,0 +1,101 @@ +# Quality filter + +## The issue + +As raised in [#1469](https://dev.funkwhale.audio/funkwhale/funkwhale/-/issues/1469), the current user experience of Funkwhale can be poor if the content on a pod is of a low quality or is missing essential information. For example: + +- Albums with missing metadata cause the interface appear stark and poorly maintained +- Tracks encoded at a low bitrate sound bad and give a bad impression of the software + +## Proposed solution + +To address this, Funkwhale should include a quality filter that enables administrators to put their pod's best quality content front and center when a user navigates to the {guilabel}`Explore` tab. This quality filter should enable the **admin** of a pod to set the following properties in the Funkwhale settings menu: + +- The **format** of tracks returned by the API +- Whether to show or hide albums missing essential metadata + +Metadata which might be considered essential: + +- Album art +- Year of publication +- Genre tags + +To give full granular control, the admin should be able to select which of these metadata are required. + +## Feature behavior + +### Frontend + +The frontend implementation of this feature should comprise a set of controls in the Funkwhale admin menu. As noted above, this should be split up as follows in a section labeled {guilabel}`Explore page quality filter`: + +- An {guilabel}`Enable` checkbox. If enabled, all options below are made available. If not enabled, no filters are applied to the API calls +- A {guilabel}`Formats` multi-select dropdown field that displays the file formats supported by Funkwhale. The admin should be able to select any combination of formats (e.g.: **MP3 + OGG + FLAC + AAC**) + +Under a subsection labeled {guilabel}`Required metadata`: + +- A checkbox for {guilabel}`Album art`. If checked, only albums with associated art should be returned by the API +- A checkbox for {guilabel}`Release date`. If checked, only albums with a properly formatted release date should be returned by the API +- A checkbox for {guilabel}`Genre tags`. If checked, only content that is tagged with at least one genre tag should be returned by the API +- A checkbox for {guilabel}`MusicBrainz ID`. If enabled, only content with a MusicBrainz ID is returns in API calls. + +The menu should also contain a {guilabel}`Quality filter` slider that allows admins to choose a **minimum** quality level. This level should be abstracted on the backend to apply a sensible value to all supported file formats. + +- {guilabel}`Off` - Allows content of **all** bitrates and formats to be displayed on the Explore page. +- {guilabel}`Low` - Allows only compressed audio formats with a lower bitrate to be displayed on the Explore page. +- {guilabel}`Medium` - Allows both low- and medium-bitrate compressed audio formats to be displayed on the Explore page. +- {guilabel}`High` - Allows uncompressed and high-bitrate compressed audio formats to be displayed on the Explore page. +- {guilabel}`Very high` - Allows only uncompressed files and very high-bitrate opus files to be displayed on the Explore page. + +### Backend + +Endpoints which return audio data must include a **quality** filter. This filter should enable an admin or API user to filter content by **metadata availability** and **file format** to ensure a minimum level of quality in the data returned. + +The following configurable filters need to be applied: + +- `format`: a comma-separated list of accepted file formats (e.g. `mp3,ogg,vorbis,flac`). Only files matching the formats in the list should be returned if this filter is passed +- `has_tags`: a boolean value that indicates whether the content should be tagged (`true`) or not (`false`) +- `has_mbid`: a boolean value that indicates whether the content has a `mbid` tag associated (`true`) or not (`false`) +- `quality`: an enum value that filters content based on the file quality. If no value is passed, uploads of any quality should be returned. Accepted values: + - `low` + - `medium` + - `high` + - `very_high` + +In addition to the above, the `Albums` endpoint should contain the following filters: + +- `has_cover`: a boolean value that indicates whether the album has associated album art (`true`) or not (`false`) +- `has_release_date`: a boolean value that indicates whether the album is tagged with a properly formatted release date (`true`) or not (`false`) + +#### Quality filter mappings + +The table below shows a suggested bitrate mapping and behavior for each file type. Bitrate values are shown in **kbps**. + +| | FLAC | AIF | AIFF | Opus | AAC | OGG | MP3 | +| --------- | ------ | ------ | ------ | ------ | ------ | ------ | ------ | +| Off | always | always | always | always | always | always | always | +| Low | never | never | never | <= 96 | <= 96 | <= 96 | <= 192 | +| Medium | never | never | never | <= 128 | <= 128 | <= 192 | <= 256 | +| High | always | always | always | <= 160 | <= 288 | <= 256 | <= 320 | +| Very high | always | always | always | >= 510 | never | never | never | + +## Availability + +- Admin panel +- API +- CLI + +## Open questions + +- We need to provide sensible defaults for admins. What should these be for each setting? +- Should the quality filter be enabled by default? If so, we need to clearly communicate this to the pod admin in the interface to avoid confusion. Existing pods should have it disabled by default. + +## Minimum viable product + +On the backend we must: + +- Create new endpoints in the `v2` namespace which can feed the "Explore" page +- Apply the required filters to the new endpoints + +On the frontend we must: + +- Change our API calls for the frontend to point to the new `v2` endpoints diff --git a/docs/specs/user-follow/index.md b/docs/specs/user-follow/index.md new file mode 100644 index 000000000..de3dced5b --- /dev/null +++ b/docs/specs/user-follow/index.md @@ -0,0 +1,295 @@ +# User following + +## Terminology + +The following terminology is used throughout this document: + +User +: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. + +Follow +: The act of subscribing to a user's activities to render them in a feed as they occur. + +Object +: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. + +Activity +: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. + +Actor +: An ActivityPub object representing an entity capable of performing actions. See the [ActivityPub specification][actor] for more details. + +Requesting user +: The user who sends a request. For example: If **Bob** requests to follow **Alice**, **Bob** is the requesting user. + +Target user +: The user who is the subject of a request. For example: If **Bob** requests to follow **Alice**, **Alice** is the target user. + +## The issue + +Funkwhale is an audio platform with an emphasis on social interaction across a federated network of servers. To this end, Funkwhale users should be able to interact with one another in meaningful ways. + +Funkwhale users broadcast the following activity when using the software: + +1. **Favoriting** content +2. **Listening** to content + +Users across the federated web should be able to follow Funkwhale accounts to receive this activity in their streams. + +## Proposed solution + +To facilitate this, Funkwhale uses the following mechanisms: + +- The **Funkwhale client API** for user to user interactions on the same server +- [ActivityPub](https://www.w3.org/TR/activitypub) for server-to-server (S2S) interactions between users + +Users should be able to discover other users using the [Webfinger protocol][webfinger] and render their public details in a manner compliant with the platform they use. Within Funkwhale, user activity should be rendered natively. Other Fediverse software may choose how to render this information. + +This specification outlines the workflows for the following actions for **local** and **remote** requests: + +1. User discovery +2. User follows +3. User unfollows +4. User blocking + +### User discovery + +Funkwhale implements the [Webfinger protocol][webfinger] for account discovery. When the **requesting user** enters the **target user's** federation handle, Funkwhale should attempt to resolve the location of the **target user** by querying the `acct:` resource with the URL encoded handle. + +#### Webfinger request + +```console +$ curl -X GET \ +-H "Content-type: application/json" \ +'https://open.audio/.well-known/webfinger?resource=acct:user%40open.audio' +``` + +#### Response + +```json +{ + "subject": "acct:user@open.audio", + "links": [ + { + "rel": "self", + "href": "https://open.audio/federation/actors/user", + "type": "application/activity+json" + } + ], + "aliases": ["https://open.audio/federation/actors/user"] +} +``` + +#### Web app behavior + +When a requesting user enters the handle of a target user in the search bar, Funkwhale does the following: + +1. Verifies the handle is well-formed +2. Forwards the request to the server + +The server is responsible for dereferencing the Webfinger query. The server does the following: + +1. Queries the domain for the account using Webfinger + - **If** the domain doesn't have a Webfinger endpoint, returns a meaningful error message. This must be displayed to the user. + - **If** the server is subject to a domain filter, or is filtering the requesting server, returns a meaningful error message. This must be displayed to the user. + - **If** no user is found on the domain, returns a meaningful error message. +2. If a matching user is found, the server should return the URL of the resource to the web app. The web app should then redirect the requesting user to a user page that shows the target user's profile image and preferred username + - **If** the target user has set their activity to **public**, the web app should render their **Favorites** and **Recently Listened** activity + +```{mermaid} +flowchart TD + search([A requesting user enters a fediverse handle\nin the search bar]) --> query(Funkwhale queries the target domain) + query --> webfinger{Does the target server\support Webfinger?} + subgraph Request verification + webfinger -->|no| error([The server returns an error message]) + webfinger -->|yes| filter{Is the requesting server subject\nto a domain filter or vice versa?} + filter -->|yes| error + filter -->|no| userfound{Was the target user found\non the server?} + userfound -->|no| error + end + userfound -->|yes| redirect([The user is redirected to a profile page\nin the web app]) +``` + +### Following users + +Following a user is a process by which a **requesting user** subscribes to the activities of a **target user**. If the **target user** accepts the follow request, the **requesting user** receives any new activities in their home feed. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/follow +``` + +When the server receives a `follow` request, it creates a `follow_request` object containing the status of the follow request which is used to display request information to the target user in their notifications. + +:::{note} +If the **target user** has configured their profile to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Follow` activity][follow]: + +1. A [`Follow` activity][follow] is posted to the **requesting user's** [outbox collection][outbox] with the **target user** as the recipient +2. The **target user** receives the request in their [inbox collection][inbox] +3. The **target user** then needs to [`Accept`][accept] or [`Reject`][reject] the [`Follow`][follow] + - If the **target user** accepts the follow, the **requesting user** is added to the **target user's** [following collection][following]. The **target user** is added to the **requesting user's** [followers collection][followers] + - If the **target user** rejects the follow, the **requesting user** is _not_ added to the **target user's** [following collection][following]. The **target user** is _not_ added to the **requesting user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Follow request + note over Bob's Outbox, Bob's Inbox : Bob's ActivityPub collections + Bob's Outbox ->> Alice's Inbox : Follow request + note over Alice's Inbox, Alice's Outbox : Alice's ActivityPub collections + Alice's Inbox ->> Alice : Display follow request + activate Alice + alt if Alice accepts Bob's request + Alice -->> Alice's Outbox : Accept follow + Alice's Outbox --> Bob's Inbox : Accept + Bob's Inbox --> Bob : Display following + end + alt if Alice rejects Bob's request + Alice -->> Alice's Inbox : Reject follow + end +``` + +:::{note} +If the **target user** has configured their activity to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### Web app behavior + +In the Funkwhale web app, the **requesting user** sees a **Follow** button on the **target user's** profile page. When they select this button, the following happens: + +1. If the **target user's** profile can be followed, an action button is displayed. +2. When the **requesting user** attempts the follow the **target user**, the button should change to a {guilabel}`Pending` status. +3. If the **target user** `Accepts` the follow request, the button should update to show a {guilabel}`Following` status. + +### Unfollowing users + +Following a user is a process by which a **requesting user** unsubscribes from the activities of a **target user**. A **requesting user** may unfollow a **target user** unilaterally at any time to stop receiving updates. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unfollow +``` + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Undo` activity][undo]: + +1. An [`Undo` activity][undo] is posted to the **requesting user's** [outbox collection][outbox] with a [`Follow activity`][follow] as the target +2. The **target user** is removed from the **requesting user's** [following collection][following] +3. The **target user** receives the undo request in their [inbox collection][inbox] +4. The **requesting user** is removed from the **target user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Undo request + note over Bob, Bob's Outbox : The target user is removed + Bob's Outbox ->> Alice's Inbox : Undo Follow + note over Alice's Inbox, Alice : The requesting user is removed +``` + +#### Web app behavior + +When a **requesting user** unfollows a **target user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **target user** must be visually hidden. + +### Blocking users + +When one user blocks another, no information may be shared between them. Blocking is a unilateral action that can be taken by both **requesting** and **target** actors to prevent the other from interacting with them. + +#### API behavior + +Block requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/block +``` + +#### ActivityPub behavior + +If the the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Block` activity][block] with the **blocked user's** [`Actor`][actor] as a target. + +1. A [`Block` activity][block] is posted to the **blocking user's** [outbox collection][outbox] with the **blocked user's** [`Actor`][actor] the target + - If the **blocked user** was previously in the **blocking user's** [following collection][following], they are removed + - If the **blocked user** was previously in the **blocking user's** [followers collection][followers], they are removed + +:::{warning} +As noted in the ActivityPub spec, the **blocked user** must _not_ be informed of the `Block` activity. +::: + +#### Web app behavior + +When a **blocking user** blocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **blocked user** must be visually hidden. + +If a **blocking user** navigates to the profile of a **blocked user** who has blocked them, the UI _must not_ reflect that they are blocked. The **blocking user** must be able to send a follow request which is _not_ sent to the **blocked user**. + +### Unblocking users + +**Blocking users** can unilaterally reverse blocks they have imposed on **blocked users**. This enables them to request to follow the **blocked user's** activities again. + +#### API behavior + +Unblock requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unblock +``` + +#### ActivityPub behavior + +If the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Undo` activity][undo]. + +#### Web app behavior + +When a **blocking user** unblocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. The **Follow** button must become active and interactive again. + +## Availability + +- [x] App frontend +- [x] CLI + +## Responsible parties + +The following working groups are responsible for implementing this feature: + +- The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic +- The **Design group** is responsible for drafting designs for the web app interactions +- The **Frontend group** is responsible for implementing the designs from the **Design group** and adding support for the new API +- The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users + +## Open questions + +- The API actions and endpoint names are placeholders. We need to decide what they should be called +- What limitations are there when fetching activities from remote actors? +- How should a user's followers collection, following collection, and pending requests be displayed in the web app? +- How are followed activities fetched and displayed to a user? + +## Minimum viable product + +The MVP for this feature is to implement the backend logic to enable Funkwhale users to follow one another. This can be added to the web app using existing profile fetching logic. + +### Next steps + +Once the backend logic is implemented, the frontend implementation should be revisited to improve the UX and discoverability. Additional features such as showing federated favorites on audio objects should also be considered. + +[webfinger]: https://www.rfc-editor.org/rfc/rfc7033 +[outbox]: https://www.w3.org/TR/activitypub/#outbox +[inbox]: https://www.w3.org/TR/activitypub/#inbox +[accept]: https://www.w3.org/TR/activitypub/#accept-activity-inbox +[reject]: https://www.w3.org/TR/activitypub/#reject-activity-inbox +[follow]: https://www.w3.org/TR/activitypub/#follow-activity-outbox +[actor]: https://www.w3.org/TR/activitypub/#actors +[following]: https://www.w3.org/TR/activitypub/#following +[followers]: https://www.w3.org/TR/activitypub/#followers +[undo]: https://www.w3.org/TR/activitypub/#undo-activity-outbox +[block]: https://www.w3.org/TR/activitypub/#block-activity-outbox diff --git a/docs/user/libraries/content/tag.md b/docs/user/libraries/content/tag.md index c850fc465..4ad94357f 100644 --- a/docs/user/libraries/content/tag.md +++ b/docs/user/libraries/content/tag.md @@ -1,6 +1,6 @@ # Tag your content with Picard -Funkwhale relies on [ID3 tags](https://en.wikipedia.org/wiki/ID3) to sort audio content. ID3 tags tell Funkwhale information about your files. Funkwhale uses this information to display your content in your {term}`pod`. +Funkwhale relies on [ID3 tags](https://wikipedia.org/wiki/ID3) to sort audio content. ID3 tags tell Funkwhale information about your files. Funkwhale uses this information to display your content in your {term}`pod`. We recommend using [MusicBrainz Picard](https://picard.musicbrainz.org/) to tag your content. MusicBrainz Picard is free and open source software that connects to [MusicBrainz](https://musicbrainz.org). Funkwhale uses MusicBrainz as its primary data source. diff --git a/front/.eslintrc.js b/front/.eslintrc.js index c9ea0eb18..6a2ecc376 100644 --- a/front/.eslintrc.js +++ b/front/.eslintrc.js @@ -26,6 +26,9 @@ module.exports = { // NOTE: Nicer for the eye 'operator-linebreak': ['error', 'before'], + // NOTE: We have a logger instance + 'no-console': 'error', + // NOTE: Handled by typescript '@typescript-eslint/no-unused-vars': 'off', 'no-use-before-define': 'off', diff --git a/front/.gitignore b/front/.gitignore index 185e66319..1b65e24b7 100644 --- a/front/.gitignore +++ b/front/.gitignore @@ -19,3 +19,10 @@ yarn-error.log* *.njsproj *.sln *.sw* + +# Bundle anayzer +stats.html + +# Cypress +cypress/screenshots +cypress/videos diff --git a/front/Dockerfile b/front/Dockerfile index 6cee6678c..c47b3155a 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -1,22 +1,19 @@ -ARG BUILDPLATFORM=linux/amd64 -# default to building on linux/amd64 for legacy builders -# docker buildx overwrites this ARG - FROM --platform=$BUILDPLATFORM node:18-alpine as builder -WORKDIR /app -COPY package.json yarn.lock /app/ -COPY src /app/src/ -COPY scripts /app/scripts -COPY public /app/public -COPY vite.config.ts index.html pwa-manifest.json /app/ - RUN apk add --no-cache jq bash coreutils python3 build-base + +WORKDIR /app + +COPY package.json yarn.lock /app/ +COPY scripts /app/scripts RUN yarn install + +COPY public /app/public +COPY src /app/src +COPY index.html pwa-manifest.json tsconfig.json vite.config.ts /app/ RUN yarn build:deployment - -FROM nginx:1.23.3-alpine as final +FROM nginx:1.23.4-alpine as production COPY --from=builder /app/dist /usr/share/nginx/html COPY docker/funkwhale.conf.template /etc/nginx/templates/default.conf.template diff --git a/front/cypress.config.ts b/front/cypress.config.ts new file mode 100644 index 000000000..ebcfff001 --- /dev/null +++ b/front/cypress.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'cypress' + +export default defineConfig({ + chromeWebSecurity: false, + e2e: { + baseUrl: 'https://demo.funkwhale.audio' + } +}) diff --git a/front/cypress/cypress.d.ts b/front/cypress/cypress.d.ts new file mode 100644 index 000000000..0f8cf8ed0 --- /dev/null +++ b/front/cypress/cypress.d.ts @@ -0,0 +1,9 @@ +declare module 'cypress' { + global { + namespace Cypress { + interface Chainable { + login(): void + } + } + } +} diff --git a/front/cypress/e2e/favorite.cy.ts b/front/cypress/e2e/favorite.cy.ts new file mode 100644 index 000000000..d95c94439 --- /dev/null +++ b/front/cypress/e2e/favorite.cy.ts @@ -0,0 +1,31 @@ +describe('Favorites', () => { + it('can be done from album list view', () => { + // First we need to login + cy.login() + + // Then we can visit the home page + cy.visit('/') + + cy.get('.item.collapse-button-wrapper').click() + cy.contains('Albums').click({ force: true }) + + cy.get('.component-album-card').first().within(() => { + cy.get('a').first().click() + }) + + cy.get('.track-row.row').first().trigger('hover').within(() => { + cy.get('.favorite-icon').then(($favButton) => { + $favButton.click() + // In case everything worked the favorite button should be pink + cy.wrap($favButton).should('have.class', 'pink') + }) + + cy.get('.favorite-icon.pink').then(($unfavButton) => { + $unfavButton.click() + // In case everything worked the favorite button shouldn't be pink + // anymore + cy.wrap($unfavButton).should('not.have.class', 'pink') + }) + }) + }) +}) diff --git a/front/cypress/e2e/login.cy.ts b/front/cypress/e2e/login.cy.ts new file mode 100644 index 000000000..eb8a96d50 --- /dev/null +++ b/front/cypress/e2e/login.cy.ts @@ -0,0 +1,19 @@ +describe('The login', () => { + it('is working with UI', () => { + cy.fixture('testuser.json').then((user) => { + cy.visit('/login') + cy.get('input[name=username]').type(user.username) + cy.get('input[name=password]').type(`${user.password}{enter}`) + }) + + cy.url().should('include', '/library') + cy.getCookie('sessionid').should('exist') + }) + + it('is working without UI', () => { + cy.login() + cy.visit('/library') + cy.get('.ui.avatar.circular.label').should('exist') + cy.getCookie('sessionid').should('exist') + }) +}) diff --git a/front/cypress/fixtures/testuser.json b/front/cypress/fixtures/testuser.json new file mode 100644 index 000000000..448a0ff9b --- /dev/null +++ b/front/cypress/fixtures/testuser.json @@ -0,0 +1,4 @@ +{ + "username": "demo", + "password": "testing1234" +} diff --git a/front/cypress/support/commands.ts b/front/cypress/support/commands.ts new file mode 100644 index 000000000..f5036c174 --- /dev/null +++ b/front/cypress/support/commands.ts @@ -0,0 +1,22 @@ +Cypress.Commands.add('login', () => { + cy.fixture('testuser.json').then(({ username, password }) => { + // We need to request a page that sets the csrf cookie + cy.request('/api/v1/instance/nodeinfo/2.0/') + + cy.getCookie('csrftoken').then(($cookie) => { + cy.request({ + method: 'POST', + url: '/api/v1/users/login', + form: true, + headers: { + 'X-CSRFTOKEN': $cookie?.value, + Referer: Cypress.config().baseUrl + '/login' + }, + body: { + username, + password + } + }) + }) + }) +}) diff --git a/front/cypress/support/e2e.ts b/front/cypress/support/e2e.ts new file mode 100644 index 000000000..43c03b759 --- /dev/null +++ b/front/cypress/support/e2e.ts @@ -0,0 +1 @@ +import './commands' diff --git a/front/cypress/tsconfig.json b/front/cypress/tsconfig.json new file mode 100644 index 000000000..f921779de --- /dev/null +++ b/front/cypress/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["es5", "dom"], + "types": ["cypress", "node"] + }, + "include": ["**/*.ts", "./cypress.d.ts"], + "isolatedModules": false +} diff --git a/front/docker/funkwhale.conf.template b/front/docker/funkwhale.conf.template index af2fac74d..b7081f56d 100644 --- a/front/docker/funkwhale.conf.template +++ b/front/docker/funkwhale.conf.template @@ -1,4 +1,5 @@ upstream funkwhale-api { + # depending on your setup, you may want to update this server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; } @@ -8,18 +9,17 @@ map $http_upgrade $connection_upgrade { '' close; } + server { listen 80; listen [::]:80; - charset utf-8; + server_name _; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; - + # General configs root /usr/share/nginx/html; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -27,7 +27,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -48,6 +47,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -55,17 +60,39 @@ server { proxy_pass http://funkwhale-api; } - location / { + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; alias /usr/share/nginx/html/; + try_files $uri $uri/ /index.html; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; + alias /usr/share/nginx/html/; try_files $uri $uri/ /index.html; } location ~ "/(front/)?embed.html" { + alias /usr/share/nginx/html/embed.html; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - alias /usr/share/nginx/html/embed.html; expires 1d; } @@ -131,4 +158,5 @@ server { # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; } + } diff --git a/front/package.json b/front/package.json index 0b1ef958b..12733c90c 100644 --- a/front/package.json +++ b/front/package.json @@ -10,16 +10,17 @@ "build:deployment": "vite build", "serve": "vite preview", "test": "vitest run", - "test:unit": "vitest run", - "lint": "eslint --ext .ts,.js,.vue,.json,.html src test public/embed.html", - "lint:tsc": "vue-tsc --noEmit", + "test:unit": "vitest run --coverage", + "lint": "eslint --cache --cache-strategy content --ext .ts,.js,.vue,.json,.html src test cypress public/embed.html", + "lint:tsc": "vue-tsc --noEmit --incremental && tsc --noEmit --incremental -p cypress", "fix-fomantic-css": "scripts/fix-fomantic-css.sh", "postinstall": "yarn run fix-fomantic-css" }, "dependencies": { - "@sentry/tracing": "7.27.0", - "@sentry/vue": "7.27.0", - "@vue/runtime-core": "3.2.45", + "@funkwhale/ui": "0.2.2", + "@sentry/tracing": "7.47.0", + "@sentry/vue": "7.47.0", + "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", "@vueuse/math": "10.3.0", @@ -33,19 +34,19 @@ "focus-trap": "7.2.0", "fomantic-ui-css": "2.9.3", "idb-keyval": "6.2.1", - "js-logger": "1.6.1", "lodash-es": "4.17.21", "lru-cache": "7.14.1", "moment": "2.29.4", "showdown": "2.1.0", - "standardized-audio-context": "25.3.59", + "stacktrace-js": "2.0.2", + "standardized-audio-context": "25.3.60", "text-clipper": "2.2.0", "transliteration": "2.3.5", "universal-cookie": "4.0.4", - "vue": "3.2.45", + "vue": "3.3.11", "vue-gettext": "2.1.12", "vue-i18n": "9.3.0-beta.19", - "vue-router": "4.1.6", + "vue-router": "4.2.5", "vue-upload-component": "3.1.8", "vue-virtual-scroller": "2.0.0-beta.8", "vue3-gettext": "2.3.4", @@ -58,25 +59,26 @@ "devDependencies": { "@intlify/eslint-plugin-vue-i18n": "2.0.0", "@intlify/unplugin-vue-i18n": "0.8.2", - "@types/diff": "5.0.2", + "@types/diff": "5.0.9", "@types/dompurify": "2.4.0", - "@types/jquery": "3.5.16", - "@types/lodash-es": "4.17.6", - "@types/moxios": "0.4.15", - "@types/qs": "6.9.7", - "@types/semantic-ui": "2.2.7", - "@types/showdown": "2.0.0", + "@types/jquery": "3.5.29", + "@types/lodash-es": "4.17.12", + "@types/moxios": "0.4.17", + "@types/qs": "6.9.10", + "@types/semantic-ui": "2.2.9", + "@types/showdown": "2.0.6", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", "@typescript-eslint/eslint-plugin": "5.48.2", - "@vitejs/plugin-vue": "4.0.0", + "@vitejs/plugin-vue": "4.2.3", "@vitest/coverage-c8": "0.25.8", "@vue-macros/volar": "0.13.3", - "@vue/compiler-sfc": "3.2.47", + "@vue/compiler-sfc": "3.3.11", "@vue/eslint-config-standard": "8.0.1", - "@vue/eslint-config-typescript": "11.0.2", + "@vue/eslint-config-typescript": "11.0.3", "@vue/test-utils": "2.2.7", "@vue/tsconfig": "0.1.3", "axios-mock-adapter": "1.21.4", + "cypress": "12.14.0", "eslint": "8.30.0", "eslint-config-standard": "17.0.0", "eslint-plugin-html": "7.1.0", @@ -87,16 +89,17 @@ "eslint-plugin-vue": "9.8.0", "jsdom": "20.0.3", "jsonc-eslint-parser": "2.1.0", + "rollup-plugin-visualizer": "5.9.0", "sass": "1.57.1", - "sinon": "15.0.1", - "standardized-audio-context-mock": "9.6.18", - "typescript": "4.9.4", + "sinon": "15.0.2", + "standardized-audio-context-mock": "9.6.32", + "typescript": "4.9.5", "unplugin-vue-macros": "2.4.6", "utility-types": "3.10.0", - "vite": "4.0.4", - "vite-plugin-pwa": "0.14.1", + "vite": "4.3.5", + "vite-plugin-pwa": "0.14.4", "vitest": "0.25.8", - "vue-tsc": "1.0.24", + "vue-tsc": "1.6.5", "workbox-core": "6.5.4", "workbox-precaching": "6.5.4", "workbox-routing": "6.5.4", diff --git a/front/public/embed.html b/front/public/embed.html index e717c4dc6..8e367ada3 100644 --- a/front/public/embed.html +++ b/front/public/embed.html @@ -81,7 +81,14 @@ // NOTE: Add a transcoded MP3 src at the end for browsers // that do not support other codecs to be able to play it :) if (sources.length > 0 && !sources.some(({ mimetype }) => mimetype === 'audio/mpeg')) { - const url = new URL(sources[0].listen_url) + const source = sources[0].listen_url + const regex = /^https?:/ + const url = new URL(regex.test(source) + ? source + : source[0] === '/' + ? `${baseUrl}${source}` + : `${baseUrl}/${source}` + ) url.searchParams.set('to', 'mp3') sources.push({ mimetype: 'audio/mpeg', listen_url: url.toString() }) } diff --git a/front/src/App.vue b/front/src/App.vue index d72b51aed..37b9f48a7 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -2,23 +2,27 @@ import type { QueueTrack } from '~/composables/audio/queue' import { useIntervalFn, useStyleTag, useToggle, useWindowSize } from '@vueuse/core' -import { computed, nextTick, onMounted, ref, watchEffect } from 'vue' +import { computed, nextTick, onMounted, ref, watchEffect, defineAsyncComponent } from 'vue' import { useQueue } from '~/composables/audio/queue' import { useStore } from '~/store' -import ChannelUploadModal from '~/components/channels/UploadModal.vue' -import PlaylistModal from '~/components/playlists/PlaylistModal.vue' -import FilterModal from '~/components/moderation/FilterModal.vue' -import ReportModal from '~/components/moderation/ReportModal.vue' -import SetInstanceModal from '~/components/SetInstanceModal.vue' -import ServiceMessages from '~/components/ServiceMessages.vue' -import ShortcutsModal from '~/components/ShortcutsModal.vue' -import AudioPlayer from '~/components/audio/Player.vue' -import Sidebar from '~/components/Sidebar.vue' -import Queue from '~/components/Queue.vue' - import onKeyboardShortcut from '~/composables/onKeyboardShortcut' +import useLogger from '~/composables/useLogger' + +const ChannelUploadModal = defineAsyncComponent(() => import('~/components/channels/UploadModal.vue')) +const PlaylistModal = defineAsyncComponent(() => import('~/components/playlists/PlaylistModal.vue')) +const FilterModal = defineAsyncComponent(() => import('~/components/moderation/FilterModal.vue')) +const ReportModal = defineAsyncComponent(() => import('~/components/moderation/ReportModal.vue')) +const SetInstanceModal = defineAsyncComponent(() => import('~/components/SetInstanceModal.vue')) +const ServiceMessages = defineAsyncComponent(() => import('~/components/ServiceMessages.vue')) +const ShortcutsModal = defineAsyncComponent(() => import('~/components/ShortcutsModal.vue')) +const AudioPlayer = defineAsyncComponent(() => import('~/components/audio/Player.vue')) +const Sidebar = defineAsyncComponent(() => import('~/components/Sidebar.vue')) +const Queue = defineAsyncComponent(() => import('~/components/Queue.vue')) + +const logger = useLogger() +logger.debug('App setup()') const store = useStore() @@ -126,7 +130,3 @@ store.dispatch('auth/fetchUser') <shortcuts-modal v-model:show="showShortcutsModal" /> </div> </template> - -<style lang="scss"> -@import "style/_main"; -</style> diff --git a/front/src/api/player.ts b/front/src/api/player.ts index 53c72d5a0..97b91a851 100644 --- a/front/src/api/player.ts +++ b/front/src/api/player.ts @@ -4,6 +4,10 @@ import { createEventHook, refDefault, type EventHookOn, useEventListener } from import { createAudioSource } from '~/composables/audio/audio-api' import { effectScope, reactive, ref, type Ref } from 'vue' +import useLogger from '~/composables/useLogger' + +const logger = useLogger() + export interface SoundSource { uuid: string mimetype: string @@ -73,7 +77,7 @@ export class HTMLSound implements Sound { this.#audio.src = source this.#audio.preload = 'auto' - console.log('CREATED SOUND INSTANCE', this) + logger.log('CREATED SOUND INSTANCE', this) this.#scope.run(() => { useEventListener(this.#audio, 'ended', () => this.#soundEndEventHook.trigger(this)) @@ -84,19 +88,19 @@ export class HTMLSound implements Sound { }) useEventListener(this.#audio, 'waiting', () => { - console.log('>> AUDIO WAITING', this) + logger.log('>> AUDIO WAITING', this) }) useEventListener(this.#audio, 'playing', () => { - console.log('>> AUDIO PLAYING', this) + logger.log('>> AUDIO PLAYING', this) }) useEventListener(this.#audio, 'stalled', () => { - console.log('>> AUDIO STALLED', this) + logger.log('>> AUDIO STALLED', this) }) useEventListener(this.#audio, 'suspend', () => { - console.log('>> AUDIO SUSPEND', this) + logger.log('>> AUDIO SUSPEND', this) }) useEventListener(this.#audio, 'loadeddata', () => { @@ -106,7 +110,7 @@ export class HTMLSound implements Sound { useEventListener(this.#audio, 'error', (err) => { if (this.#ignoreError) return - console.error('>> AUDIO ERRORED', err, this) + logger.error('>> AUDIO ERRORED', err, this) this.isErrored.value = true this.isLoaded.value = true }) @@ -116,7 +120,7 @@ export class HTMLSound implements Sound { async preload () { this.isDisposed.value = false this.isErrored.value = false - console.log('CALLING PRELOAD ON', this) + logger.log('CALLING PRELOAD ON', this) this.#audio.load() } @@ -141,7 +145,7 @@ export class HTMLSound implements Sound { try { await this.#audio.play() } catch (err) { - console.error('>> AUDIO PLAY ERROR', err, this) + logger.error('>> AUDIO PLAY ERROR', err, this) this.isErrored.value = true } } diff --git a/front/src/components/Home.vue b/front/src/components/Home.vue index 7cabd3cc6..9b6cd4d80 100644 --- a/front/src/components/Home.vue +++ b/front/src/components/Home.vue @@ -5,6 +5,7 @@ import ChannelsWidget from '~/components/audio/ChannelsWidget.vue' import LoginForm from '~/components/auth/LoginForm.vue' import SignupForm from '~/components/auth/SignupForm.vue' import useMarkdown from '~/composables/useMarkdown' +import useLogger from '~/composables/useLogger' import { humanSize } from '~/utils/filters' import { useStore } from '~/store' import { computed } from 'vue' @@ -18,6 +19,7 @@ const labels = computed(() => ({ })) const store = useStore() +const logger = useLogger() const nodeinfo = computed(() => store.state.instance.nodeinfo) const podName = computed(() => get(nodeinfo.value, 'metadata.nodeName') || 'Funkwhale') @@ -54,7 +56,7 @@ const headerStyle = computed(() => { // TODO (wvffle): Check if needed const router = useRouter() whenever(() => store.state.auth.authenticated, () => { - console.log('Authenticated, redirecting to /library…') + logger.log('Authenticated, redirecting to /library…') router.push('/library') }) </script> @@ -262,7 +264,7 @@ whenever(() => store.state.auth.authenticated, () => { <div class="content"> <a class="header" - href="https://funkwhale.audio/en_US/apps" + href="https://funkwhale.audio/apps" target="_blank" rel="noopener" > diff --git a/front/src/components/RemoteSearchForm.vue b/front/src/components/RemoteSearchForm.vue index 7d3859d71..00e0c858b 100644 --- a/front/src/components/RemoteSearchForm.vue +++ b/front/src/components/RemoteSearchForm.vue @@ -9,6 +9,7 @@ import { useStore } from '~/store' import axios from 'axios' import updateQueryString from '~/composables/updateQueryString' +import useLogger from '~/composables/useLogger' type Type = 'rss' | 'artists' | 'both' @@ -37,6 +38,7 @@ const type = ref(props.initialType) const id = ref(props.initialId) const errors = ref([] as string[]) +const logger = useLogger() const { t } = useI18n() const labels = computed(() => ({ title: type.value === 'rss' @@ -102,7 +104,7 @@ const submit = () => { const isLoading = ref(false) const createFetch = async () => { - console.log(id.value, props.standalone) + logger.debug(id.value, props.standalone) if (!id.value) return if (props.standalone) { history.replaceState(history.state, '', updateQueryString(location.href, 'id', id.value)) diff --git a/front/src/components/admin/SettingsGroup.vue b/front/src/components/admin/SettingsGroup.vue index 609dd8a6e..a2bf872a6 100644 --- a/front/src/components/admin/SettingsGroup.vue +++ b/front/src/components/admin/SettingsGroup.vue @@ -18,15 +18,16 @@ const values = reactive({} as Record<string, unknown | Form | string>) const result = ref<boolean | null>(null) const errors = ref([] as string[]) -const fileRefs = reactive({} as Record<string, HTMLInputElement>) -const setFileRef = (identifier: string) => (el: FunctionRef) => { - console.log(el) - fileRefs[identifier] = el as HTMLInputElement -} - const logger = useLogger() const store = useStore() +// TODO (wvffle): Use VueUse +const fileRefs = reactive({} as Record<string, HTMLInputElement>) +const setFileRef = (identifier: string) => (el: FunctionRef) => { + logger.debug(el) + fileRefs[identifier] = el as HTMLInputElement +} + const settings = computed(() => { const byIdentifier = props.settingsData.reduce((acc, entry) => { acc[entry.identifier] = entry @@ -216,6 +217,20 @@ const save = async () => { {{ v[1] }} </option> </select> + <select + v-else-if="setting.field.class === 'ChoiceField'" + :id="setting.identifier" + v-model="values[setting.identifier]" + class="ui search selection dropdown" + > + <option + v-for="v in setting.additional_data?.choices" + :key="v[0]" + :value="v[0]" + > + {{ v[1] }} + </option> + </select> <div v-else-if="setting.field.widget.class === 'ImageWidget'"> <input :id="setting.identifier" diff --git a/front/src/components/audio/EmbedWizard.vue b/front/src/components/audio/EmbedWizard.vue index 05ddd2441..266ba4c7d 100644 --- a/front/src/components/audio/EmbedWizard.vue +++ b/front/src/components/audio/EmbedWizard.vue @@ -39,8 +39,7 @@ const iframeSrc = computed(() => { const frameWidth = computed(() => width.value ?? '100%') const embedCode = computed(() => `<iframe width="${frameWidth.value}" height="${height.value}" scrolling="no" frameborder="no" src="${iframeSrc.value.replace(/&/g, '&')}"></iframe>`) -const textarea = ref() -const { copy, copied } = useClipboard({ source: textarea }) +const { copy, copied } = useClipboard({ source: embedCode }) </script> <template> @@ -103,8 +102,7 @@ const { copy, copied } = useClipboard({ source: textarea }) {{ $t('components.audio.EmbedWizard.help.embed') }} </p> <textarea - ref="textarea" - :value="embedCode" + v-model="embedCode" rows="5" readonly /> diff --git a/front/src/components/auth/ApplicationNew.vue b/front/src/components/auth/ApplicationNew.vue index b099263fd..9cb2ac956 100644 --- a/front/src/components/auth/ApplicationNew.vue +++ b/front/src/components/auth/ApplicationNew.vue @@ -9,6 +9,8 @@ import { useStore } from '~/store' import ApplicationForm from '~/components/auth/ApplicationForm.vue' +import useLogger from '~/composables/useLogger' + interface Props { name?: string scopes?: string @@ -27,6 +29,7 @@ const defaults = reactive({ redirectUris: props.redirectUris }) +const logger = useLogger() const { t } = useI18n() const labels = computed(() => ({ title: t('components.auth.ApplicationNew.title') @@ -37,7 +40,7 @@ const store = useStore() const created = (application: Application) => { store.state.auth.applicationSecret = application.client_secret - console.log(application) + logger.debug(application) return router.push({ name: 'settings.applications.edit', params: { diff --git a/front/src/components/auth/Plugin.vue b/front/src/components/auth/Plugin.vue index bce020461..4a369d1a9 100644 --- a/front/src/components/auth/Plugin.vue +++ b/front/src/components/auth/Plugin.vue @@ -188,6 +188,19 @@ const submitAndScan = async () => { :html="useMarkdownRaw(field.help)" /> </div> + <div + v-if="field.type === 'boolean'" + class="field" + > + <div class="ui toggle checkbox"> + <input + :id="`plugin-${field.name}`" + v-model="values[field.name]" + type="checkbox" + > + <label :for="`plugin-${field.name}`">{{ field.label || field.name }}</label> + </div> + </div> </template> </template> <button diff --git a/front/src/components/auth/SignupForm.vue b/front/src/components/auth/SignupForm.vue index e08cbb1a7..71c37543c 100644 --- a/front/src/components/auth/SignupForm.vue +++ b/front/src/components/auth/SignupForm.vue @@ -42,7 +42,7 @@ const labels = computed(() => ({ const signupRequiresApproval = computed(() => props.signupApprovalEnabled ?? store.state.instance.settings.moderation.signup_approval_enabled.value) const formCustomization = computed(() => props.customization ?? store.state.instance.settings.moderation.signup_form_customization.value) -watchEffect(() => console.log(store.state.instance.settings.moderation.signup_approval_enabled.value)) +watchEffect(() => logger.debug(store.state.instance.settings.moderation.signup_approval_enabled.value)) const payload = reactive({ username: '', diff --git a/front/src/components/common/ActorAvatar.vue b/front/src/components/common/ActorAvatar.vue index cdd69f948..bd52ac226 100644 --- a/front/src/components/common/ActorAvatar.vue +++ b/front/src/components/common/ActorAvatar.vue @@ -25,5 +25,5 @@ const defaultAvatarStyle = computed(() => ({ backgroundColor: `#${actorColor.val v-else :style="defaultAvatarStyle" class="ui avatar circular label" - >{{ actor.preferred_username[0] }}</span> + >{{ actor.preferred_username?.[0] || "" }}</span> </template> diff --git a/front/src/components/common/ContentForm.vue b/front/src/components/common/ContentForm.vue index 3905cdb55..afa02f994 100644 --- a/front/src/components/common/ContentForm.vue +++ b/front/src/components/common/ContentForm.vue @@ -4,6 +4,8 @@ import { useVModel, watchDebounced, useTextareaAutosize, syncRef } from '@vueuse import { ref, computed, watchEffect, onMounted, nextTick, watch } from 'vue' import { useI18n } from 'vue-i18n' +import useLogger from '~/composables/useLogger' + interface Events { (e: 'update:modelValue', value: string): void } @@ -26,6 +28,8 @@ const props = withDefaults(defineProps<Props>(), { required: false }) +const logger = useLogger() + const { t } = useI18n() const { textarea, input } = useTextareaAutosize() const value = useVModel(props, 'modelValue', emit) @@ -47,7 +51,7 @@ const loadPreview = async () => { const response = await axios.post('text-preview/', { text: value.value, permissive: props.permissive }) preview.value = response.data.rendered } catch (error) { - console.error(error) + logger.error(error) } isLoadingPreview.value = false } diff --git a/front/src/components/favorites/List.vue b/front/src/components/favorites/List.vue index 83f6b23a0..c14d2b0e5 100644 --- a/front/src/components/favorites/List.vue +++ b/front/src/components/favorites/List.vue @@ -64,8 +64,8 @@ const fetchFavorites = async () => { ordering: orderingString.value } + const measureLoading = logger.time('Loading user favorites') try { - logger.time('Loading user favorites') const response = await axios.get('tracks/', { params }) results.length = 0 @@ -81,7 +81,7 @@ const fetchFavorites = async () => { } catch (error) { useErrorHandler(error as Error) } finally { - logger.timeEnd('Loading user favorites') + measureLoading() isLoading.value = false } } diff --git a/front/src/components/library/AlbumBase.vue b/front/src/components/library/AlbumBase.vue index 257d4a9e7..a03100672 100644 --- a/front/src/components/library/AlbumBase.vue +++ b/front/src/components/library/AlbumBase.vue @@ -15,6 +15,7 @@ import TagsList from '~/components/tags/List.vue' import AlbumDropdown from './AlbumDropdown.vue' import useErrorHandler from '~/composables/useErrorHandler' +import useLogger from '~/composables/useLogger' interface Events { (e: 'deleted'): void @@ -39,6 +40,8 @@ const isSerie = computed(() => object.value?.artist.content_category === 'podcas const totalDuration = computed(() => sum((object.value?.tracks ?? []).map(track => track.uploads[0]?.duration ?? 0))) const publicLibraries = computed(() => libraries.value?.filter(library => library.privacy_level === 'everyone') ?? []) +const logger = useLogger() + const { t } = useI18n() const labels = computed(() => ({ title: t('components.library.AlbumBase.title') @@ -93,7 +96,7 @@ const fetchTracks = async () => { tracks.push(...response.data.results) } } catch (error) { - console.error(error) + logger.error(error) } finally { isLoadingTracks.value = false } diff --git a/front/src/components/library/Albums.vue b/front/src/components/library/Albums.vue index aab3ef9f3..1e3f5c6b6 100644 --- a/front/src/components/library/Albums.vue +++ b/front/src/components/library/Albums.vue @@ -72,7 +72,7 @@ const fetchData = async () => { content_category: 'music' } - logger.time('Fetching albums') + const measureLoading = logger.time('Fetching albums') try { const response = await axios.get('albums/', { params, @@ -86,7 +86,7 @@ const fetchData = async () => { useErrorHandler(error as Error) result.value = undefined } finally { - logger.timeEnd('Fetching albums') + measureLoading() isLoading.value = false } } diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue index 4bfd1935b..17f38ee3e 100644 --- a/front/src/components/library/Artists.vue +++ b/front/src/components/library/Artists.vue @@ -73,7 +73,7 @@ const fetchData = async () => { has_albums: excludeCompilation.value } - logger.time('Fetching artists') + const measureLoading = logger.time('Fetching artists') try { const response = await axios.get('artists/', { params, @@ -87,7 +87,7 @@ const fetchData = async () => { useErrorHandler(error as Error) result.value = undefined } finally { - logger.timeEnd('Fetching artists') + measureLoading() isLoading.value = false } } diff --git a/front/src/components/library/Home.vue b/front/src/components/library/Home.vue index 8ff6b2552..49109f610 100644 --- a/front/src/components/library/Home.vue +++ b/front/src/components/library/Home.vue @@ -32,7 +32,7 @@ const labels = computed(() => ({ const isLoading = ref(false) const fetchData = async () => { isLoading.value = true - logger.time('Loading latest artists') + const measureLoading = logger.time('Loading latest artists') const params = { ordering: '-creation_date', @@ -47,7 +47,7 @@ const fetchData = async () => { } isLoading.value = false - logger.timeEnd('Loading latest artists') + measureLoading() } fetchData() diff --git a/front/src/components/library/Podcasts.vue b/front/src/components/library/Podcasts.vue index c01ee6a1c..0925a802d 100644 --- a/front/src/components/library/Podcasts.vue +++ b/front/src/components/library/Podcasts.vue @@ -74,7 +74,7 @@ const fetchData = async () => { content_category: 'podcast' } - logger.time('Fetching podcasts') + const measureLoading = logger.time('Fetching podcasts') try { const response = await axios.get('artists/', { params, @@ -88,7 +88,7 @@ const fetchData = async () => { useErrorHandler(error as Error) result.value = undefined } finally { - logger.timeEnd('Fetching podcasts') + measureLoading() isLoading.value = false } } diff --git a/front/src/components/library/Radios.vue b/front/src/components/library/Radios.vue index 9ebb1a02b..f12b41b39 100644 --- a/front/src/components/library/Radios.vue +++ b/front/src/components/library/Radios.vue @@ -64,7 +64,7 @@ const fetchData = async () => { ordering: orderingString.value } - logger.time('Fetching radios') + const measureLoading = logger.time('Fetching radios') try { const response = await axios.get('radios/radios/', { params @@ -75,7 +75,7 @@ const fetchData = async () => { useErrorHandler(error as Error) result.value = undefined } finally { - logger.timeEnd('Fetching radios') + measureLoading() isLoading.value = false } } diff --git a/front/src/components/manage/moderation/ReportCard.vue b/front/src/components/manage/moderation/ReportCard.vue index 8305710ab..c68989b40 100644 --- a/front/src/components/manage/moderation/ReportCard.vue +++ b/front/src/components/manage/moderation/ReportCard.vue @@ -15,6 +15,7 @@ import NoteForm from '~/components/manage/moderation/NoteForm.vue' import useReportConfigs from '~/composables/moderation/useReportConfigs' import useErrorHandler from '~/composables/useErrorHandler' import useMarkdown from '~/composables/useMarkdown' +import useLogger from '~/composables/useLogger' interface Events { (e: 'updated', updating: { type: string }): void @@ -29,6 +30,7 @@ const emit = defineEmits<Events>() const props = defineProps<Props>() const configs = useReportConfigs() +const logger = useLogger() const obj = ref(props.initObj) const summary = useMarkdown(() => obj.value.summary ?? '') @@ -77,11 +79,11 @@ const actions = computed(() => { handler: async () => { try { await axios.delete(deleteUrl) - console.log('Target deleted') + logger.info('Target deleted') obj.value.target = undefined resolveReport(true) } catch (error) { - console.log('Error while deleting target', error) + logger.error('Error while deleting target', error) useErrorHandler(error as Error) } } diff --git a/front/src/composables/audio/player.ts b/front/src/composables/audio/player.ts index d2704e9e4..e9291b3f7 100644 --- a/front/src/composables/audio/player.ts +++ b/front/src/composables/audio/player.ts @@ -9,6 +9,8 @@ import { useStore } from '~/store' import axios from 'axios' import { useClamp } from '@vueuse/math' +import useLogger from '~/composables/useLogger' + // Looping export enum LoopingMode { None, @@ -17,7 +19,6 @@ export enum LoopingMode { } // Pausing - export enum PauseReason { UserInput, EndOfQueue, @@ -26,6 +27,8 @@ export enum PauseReason { EndOfRadio } +const logger = useLogger() + const MODE_MAX = 1 + Math.max(...Object.values(LoopingMode).filter(mode => typeof mode === 'number') as number[]) export const looping: Ref<number> = useStorage('player:looping', LoopingMode.None) @@ -131,12 +134,12 @@ export const usePlayer = createGlobalState(() => { const trackListenSubmissions = () => { const store = useStore() whenever(listenSubmitted, async () => { - console.log('Listening submitted!') + logger.log('Listening submitted!') if (!store.state.auth.authenticated) return if (!currentTrack.value) return await axios.post('history/listenings/', { track: currentTrack.value.id }) - .catch((error) => console.error('Could not record track in history', error)) + .catch((error) => logger.error('Could not record track in history', error)) }) } diff --git a/front/src/composables/audio/queue.ts b/front/src/composables/audio/queue.ts index dd415a371..b906612a4 100644 --- a/front/src/composables/audio/queue.ts +++ b/front/src/composables/audio/queue.ts @@ -11,6 +11,8 @@ import { delMany, getMany, setMany } from '~/composables/data/indexedDB' import { setGain } from '~/composables/audio/audio-api' import { useTracks } from '~/composables/audio/tracks' +import useLogger from '~/composables/useLogger' + import axios from 'axios' export interface QueueTrackSource { @@ -36,6 +38,8 @@ export interface QueueTrack { sources: QueueTrackSource[] } +const logger = useLogger() + // Queue const tracks = useStorage('queue:tracks', [] as number[]) const shuffledIds = useStorage('queue:tracks:shuffled', [] as number[]) @@ -69,7 +73,7 @@ watchEffect(async () => { tracksById.set(track.id, track) } } catch (error) { - console.error(error) + logger.error(error) } finally { fetchingTracks.value = false } @@ -344,7 +348,7 @@ export const useQueue = createGlobalState(() => { const store = useStore() watchEffect(() => { if (store.state.radios.running && currentIndex.value === tracks.value.length - 1) { - console.log('POPULATING QUEUE FROM RADIO') + logger.log('POPULATING QUEUE FROM RADIO') return store.dispatch('radios/populateQueue') } }) @@ -379,7 +383,7 @@ export const useQueue = createGlobalState(() => { currentIndex.value = index delete localStorage.queue - })().catch((error) => console.error('Could not successfully migrate between queue versions', error)) + })().catch((error) => logger.error('Could not successfully migrate between queue versions', error)) } if (localStorage.player) { @@ -389,7 +393,7 @@ export const useQueue = createGlobalState(() => { setGain(volume ?? 0.7) delete localStorage.player } catch (error) { - console.error('Could not successfully migrate between player versions', error) + logger.error('Could not successfully migrate between player versions', error) } } } diff --git a/front/src/composables/audio/tracks.ts b/front/src/composables/audio/tracks.ts index 95b1214bb..8ea991867 100644 --- a/front/src/composables/audio/tracks.ts +++ b/front/src/composables/audio/tracks.ts @@ -11,6 +11,7 @@ import { useQueue } from '~/composables/audio/queue' import { soundImplementation } from '~/api/player' import useLRUCache from '~/composables/data/useLRUCache' +import useLogger from '~/composables/useLogger' import store from '~/store' import axios from 'axios' @@ -18,6 +19,8 @@ import axios from 'axios' const ALLOWED_PLAY_TYPES: (CanPlayTypeResult | undefined)[] = ['maybe', 'probably'] const AUDIO_ELEMENT = document.createElement('audio') +const logger = useLogger() + const soundPromises = new Map<number, Promise<Sound>>() const soundCache = useLRUCache<number, Sound>({ max: 3, @@ -95,7 +98,7 @@ export const useTracks = createGlobalState(() => { const sound = new SoundImplementation(sources) sound.onSoundEnd(() => { - console.log('TRACK ENDED, PLAYING NEXT') + logger.log('TRACK ENDED, PLAYING NEXT') // NOTE: We push it to the end of the job queue setTimeout(() => playNext(), 0) @@ -140,7 +143,7 @@ export const useTracks = createGlobalState(() => { return sound } - console.log('NO TRACK IN CACHE, CREATING', track) + logger.log('NO TRACK IN CACHE, CREATING', track) const soundPromise = createSoundPromise() soundPromises.set(track.id, soundPromise) return soundPromise @@ -171,7 +174,7 @@ export const useTracks = createGlobalState(() => { const { queue, currentIndex } = useQueue() if (queue.value.length <= index || index === -1) return - console.log('LOADING TRACK', index) + logger.log('LOADING TRACK', index) const track = queue.value[index] const sound = await createSound(track) @@ -181,7 +184,7 @@ export const useTracks = createGlobalState(() => { return } - console.log('CONNECTING NODE', sound) + logger.log('CONNECTING NODE', sound) sound.audioNode.disconnect() connectAudioSource(sound.audioNode) diff --git a/front/src/composables/audio/visualizer.ts b/front/src/composables/audio/visualizer.ts index e59f23e13..14c518a29 100644 --- a/front/src/composables/audio/visualizer.ts +++ b/front/src/composables/audio/visualizer.ts @@ -4,6 +4,8 @@ import { AUDIO_CONTEXT, GAIN_NODE } from './audio-api' import { useResizeObserver, useStorage } from '@vueuse/core' import { watchEffect, ref, markRaw } from 'vue' +import useLogger from '~/composables/useLogger' + // @ts-expect-error butterchurn has no typings import butterchurnPresets from 'butterchurn-presets' @@ -11,6 +13,8 @@ import butterchurnPresets from 'butterchurn-presets' import butterchurn from 'butterchurn' export const useMilkDrop = (canvas: Ref<HTMLCanvasElement>) => { + const logger = useLogger() + const presets = Object.keys(butterchurnPresets) const visualizer = ref() @@ -24,7 +28,7 @@ export const useMilkDrop = (canvas: Ref<HTMLCanvasElement>) => { const name = presetName.value if (name === undefined) return - console.log(`Switching to preset: '${name}'`) + logger.log(`Switching to preset: '${name}'`) visualizer.value?.loadPreset(butterchurnPresets[name], 1) }) @@ -67,7 +71,7 @@ export const useMilkDrop = (canvas: Ref<HTMLCanvasElement>) => { try { visualizer.value?.render() } catch (error) { - console.error(error) + logger.error(error) loadRandomPreset() } } diff --git a/front/src/composables/onKeyboardShortcut.ts b/front/src/composables/onKeyboardShortcut.ts index 2f066775e..b54d428d3 100644 --- a/front/src/composables/onKeyboardShortcut.ts +++ b/front/src/composables/onKeyboardShortcut.ts @@ -2,6 +2,8 @@ import { DefaultMagicKeysAliasMap, tryOnScopeDispose, useEventListener } from '@ import { isEqual, isMatch } from 'lodash-es' import { reactive } from 'vue' +import useLogger from './useLogger' + type KeyFilter = string | string[] interface Entry { @@ -10,6 +12,7 @@ interface Entry { __location?: string } +const logger = useLogger() const combinations = reactive(new Map()) const current = new Set() @@ -59,7 +62,7 @@ export default (key: KeyFilter, handler: () => unknown, prevent = false) => { } if (collisions.length) { - console.warn([ + logger.warn([ 'onKeyboardShortcut detected a possible collision in:', `${entry.__location}: ${combination.join(' + ')}`, ...collisions diff --git a/front/src/composables/useLogger.ts b/front/src/composables/useLogger.ts index 660c79385..cdb14464e 100644 --- a/front/src/composables/useLogger.ts +++ b/front/src/composables/useLogger.ts @@ -1,11 +1,112 @@ -import Logger from 'js-logger' +import Stacktrace from 'stacktrace-js' -Logger.useDefaults({ - defaultLevel: import.meta.env.DEV - ? Logger.DEBUG - : Logger.WARN -}) +type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'time' -export default (logger?: string) => logger - ? Logger.get(logger) - : Logger +const LOG_LEVEL_LABELS: Record<LogLevel, string> = { + info: ' INFO', + warn: ' WARN', + error: 'ERROR', + debug: 'DEBUG', + time: ' TIME' +} + +const LOG_LEVEL_BACKGROUND: Record<LogLevel, string> = { + info: '#a6e22e', + warn: '#FF9800', + error: '#F44336', + debug: '#00BCD4', + time: '#00BCD4' +} + +const LOG_LEVEL_COLOR: Record<LogLevel, string> = { + info: '#000', + warn: '#000', + error: '#fff', + debug: '#000', + time: '#000' +} + +const TIMESTAMP_COLOR = '#9E9E9E' + +const FILETYPE_BACKGROUND: Record<string, string> = { + js: '#f1e05a', + ts: '#2b7489', + vue: '#41b883', + html: '#e34c26', + default: '#ccc' +} + +const FILETYPE_COLOR: Record<string, string> = { + js: '#000', + ts: '#fff', + vue: '#fff', + html: '#fff', + default: '#000' +} + +// NOTE: We're pushing all logs to the end of the event loop +const createLoggerFn = (level: LogLevel) => { + // NOTE: Don't log time and debug in production + if (level === 'time' || level === 'debug') { + if (import.meta.env.PROD) return () => undefined + } + + return async (...args: any[]) => { + const timestamp = new Date().toUTCString() + const stacktrace = await Stacktrace.get() + + // NOTE: First call is a call to logger.log, second one is a call to the function that called logger.log + const { functionName, fileName, lineNumber } = stacktrace[1] + + let file = fileName + + try { + const url = new URL(fileName ?? '') + file = url.pathname + } catch (error) { } + + const ext = file?.split('.').pop() ?? 'default' + + // eslint-disable-next-line no-console + console[level === 'time' ? 'debug' : level]( + '%c %c [%s] %c %s %c%s', + `background: ${LOG_LEVEL_BACKGROUND[level]};border-radius:1em`, + `color: ${TIMESTAMP_COLOR}`, + timestamp, + `background: ${LOG_LEVEL_BACKGROUND[level]}; color: ${LOG_LEVEL_COLOR[level]}; border-radius: 1em 0 0 1em`, + LOG_LEVEL_LABELS[level], + `background: ${FILETYPE_BACKGROUND[ext]}; color: ${FILETYPE_COLOR[ext]}; border-radius: 0 1em 1em 0`, + functionName !== undefined + ? ` ${file}:${lineNumber} ${functionName}() ` + : ` ${file}:${lineNumber} `, + ...args + ) + } +} + +const infoLogger = createLoggerFn('info') +const warnLogger = createLoggerFn('warn') +const timeLogger = createLoggerFn('time') + +const errorLogger = createLoggerFn('error') +const debugLogger = createLoggerFn('debug') + +export const logger = { + log: infoLogger, + info: infoLogger, + warn: warnLogger, + error: errorLogger, + debug: debugLogger, + time: (label: string) => { + const now = performance.now() + + timeLogger(`${label}: start`) + + return () => { + const duration = performance.now() - now + timeLogger(`${label}: ${duration.toFixed(2)}ms`) + } + } +} + +export default () => logger diff --git a/front/src/init/axios.ts b/front/src/init/axios.ts index 6b474fd14..35d17deb1 100644 --- a/front/src/init/axios.ts +++ b/front/src/init/axios.ts @@ -118,7 +118,7 @@ export const install: InitModule = ({ store, router }) => { const refreshAuth = async (failedRequest: AxiosError) => { if (store.state.auth.oauth.accessToken) { - console.log('Failed request, refreshing auth…') + logger.warn('Failed request, refreshing auth…') try { // maybe the token was expired, let's try to refresh it diff --git a/front/src/init/instance.ts b/front/src/init/instance.ts index 0dff8aa4c..c2cd1c797 100644 --- a/front/src/init/instance.ts +++ b/front/src/init/instance.ts @@ -3,22 +3,30 @@ import type { InitModule } from '~/types' import { whenever } from '@vueuse/core' +import useLogger from '~/composables/useLogger' + import axios from 'axios' +const logger = useLogger() + export const install: InitModule = async ({ store, router }) => { await store.dispatch('instance/fetchFrontSettings') const fetchNodeInfo = async () => { - const [{ data }] = await Promise.all([ - axios.get<NodeInfo>('instance/nodeinfo/2.0/'), - store.dispatch('instance/fetchSettings') - ]) + try { + const [{ data }] = await Promise.all([ + axios.get<NodeInfo>('instance/nodeinfo/2.0/'), + store.dispatch('instance/fetchSettings') + ]) - if (data.metadata.library.music?.hours) { - data.metadata.library.music.hours = Math.floor(data.metadata.library.music.hours) + if (data.metadata.library.music?.hours) { + data.metadata.library.music.hours = Math.floor(data.metadata.library.music.hours) + } + + store.commit('instance/nodeinfo', data) + } catch (error) { + logger.error('Error while fetching node info', error) } - - store.commit('instance/nodeinfo', data) } whenever(() => store.state.instance.instanceUrl, fetchNodeInfo) diff --git a/front/src/init/lazyLoad.ts b/front/src/init/lazyLoad.ts index f3b1775c1..82d349d47 100644 --- a/front/src/init/lazyLoad.ts +++ b/front/src/init/lazyLoad.ts @@ -3,5 +3,5 @@ import type { InitModule } from '~/types' import VueLazyload from 'vue3-lazyload' export const install: InitModule = ({ app }) => { - app.use(VueLazyload) + app.use(VueLazyload, {}) } diff --git a/front/src/init/serviceWorker.ts b/front/src/init/serviceWorker.ts index 264b76e5d..d5f7195ed 100644 --- a/front/src/init/serviceWorker.ts +++ b/front/src/init/serviceWorker.ts @@ -10,8 +10,21 @@ const logger = useLogger() export const install: InitModule = ({ store }) => { const updateSW = registerSW({ - onRegisterError () { - logger.error('SW install error') + onRegisterError (error) { + const importStatementsSupported = navigator.userAgent.includes('Chrome') + || navigator.userAgent.includes('Chromium') + || navigator.userAgent.includes('Opera') + || navigator.userAgent.includes('Brave') + + if (import.meta.env.DEV && !importStatementsSupported) { + logger.warn( + 'Service Worker is not supported in your browser in development mode.\n', + 'For more information, please refer to \'Support for ECMAScript modules\' section at:\n', + 'https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker#browser_compatibility' + ) + } + + logger.error('Service Worker install error:', error) }, onOfflineReady () { logger.info('Funkwhale is being served from cache by a service worker.') diff --git a/front/src/init/webSocket.ts b/front/src/init/webSocket.ts index b8fe0c151..8a2a04f0a 100644 --- a/front/src/init/webSocket.ts +++ b/front/src/init/webSocket.ts @@ -3,11 +3,14 @@ import type { InitModule } from '~/types' import { watchEffect, watch } from 'vue' import { useWebSocket, whenever } from '@vueuse/core' import useWebSocketHandler from '~/composables/useWebSocketHandler' +import useLogger from '~/composables/useLogger' import { CLIENT_RADIOS } from '~/utils/clientRadios' export const install: InitModule = ({ store }) => { + const logger = useLogger() + watch(() => store.state.instance.instanceUrl, () => { - const url = store.getters['instance/absoluteUrl']('api/v1/activity') + const url = store.getters['instance/absoluteUrl']('/api/v1/activity') .replace(/^http/, 'ws') const { data, status, open, close } = useWebSocket(url, { @@ -25,7 +28,7 @@ export const install: InitModule = ({ store }) => { }) watchEffect(() => { - console.log('Websocket status:', status.value) + logger.log('Websocket status:', status.value) }) }, { immediate: true }) diff --git a/front/src/locales/bn_BD.json b/front/src/locales/bn_BD.json new file mode 100644 index 000000000..7261c92dc --- /dev/null +++ b/front/src/locales/bn_BD.json @@ -0,0 +1,4616 @@ +{ + "App": { + "loading": "" + }, + "components": { + "About": { + "description": { + "findApp": "", + "funkwhale": "", + "publicContent": "", + "quota": "", + "signup": "" + }, + "header": { + "aboutPod": "", + "findApp": "", + "funkwhale": "", + "publicContent": "", + "signup": "" + }, + "help": { + "closedRegistrations": "" + }, + "link": { + "findOtherPod": "", + "learnMore": "" + }, + "message": { + "greeting": "", + "loggedIn": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "AboutPod": { + "feature": { + "allowList": "", + "anonymousAccess": "", + "federation": "", + "quota": "", + "registrations": "", + "status": { + "closed": "", + "disabled": "", + "enabled": "", + "open": "" + }, + "version": "" + }, + "header": { + "about": "", + "contact": "", + "features": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "link": { + "about": "", + "features": "", + "introduction": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "message": { + "contact": "" + }, + "notApplicable": "", + "placeholder": { + "noDescription": "", + "noRules": "", + "noTerms": "" + }, + "stat": { + "activeUsers": "", + "albumsCount": "", + "artistsCount": "", + "hoursOfMusic": "", + "listeningsCount": "", + "tracksCount": "" + }, + "title": "" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "", + "paragraph2": "" + }, + "quota": "", + "signup": "" + }, + "header": { + "about": "", + "aboutFunkwhale": "", + "contact": "", + "links": "", + "login": "", + "newAlbums": "", + "newChannels": "", + "signup": "", + "statistics": "", + "welcome": "" + }, + "help": { + "registrationsClosed": "" + }, + "link": { + "findOtherPod": "", + "funkwhale": "", + "learnMore": "", + "mobileApps": { + "description": "", + "label": "" + }, + "publicContent": { + "description": "", + "label": "" + }, + "rules": "", + "userGuides": { + "description": "", + "label": "" + }, + "viewMore": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "PageNotFound": { + "header": { + "pageNotFound": "" + }, + "link": { + "home": "" + }, + "message": { + "pageNotFound": "" + }, + "title": "" + }, + "Queue": { + "button": { + "clear": "", + "close": "", + "stopRadio": "" + }, + "header": { + "failure": "", + "noSources": "", + "radio": "" + }, + "label": { + "addArtistContentFilter": "", + "duration": "", + "enterFullscreen": "", + "exitFullscreen": "", + "favorite": "", + "next": "", + "pause": "", + "play": "", + "populatingRadio": "", + "previous": "", + "queue": "", + "remove": "", + "restart": "", + "selectTrack": "", + "showCoverArt": "", + "showVisualizer": "" + }, + "message": { + "automaticPlay": "", + "radio": "", + "webglUnsupported": "" + }, + "meta": { + "end": "", + "queuePosition": "", + "startTime": "", + "unknownAlbum": "", + "unknownArtist": "" + }, + "warning": { + "connectivity": "" + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "", + "rss": "", + "search": "" + }, + "description": { + "fediverse": "", + "rss": "" + }, + "error": { + "fetchFailed": "" + }, + "header": { + "fetchFailed": "" + }, + "label": { + "fediverse": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + }, + "rss": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + } + }, + "warning": { + "unsupported": "" + } + }, + "SetInstanceModal": { + "button": { + "cancel": "", + "submit": "" + }, + "header": { + "chooseInstance": "", + "failure": "", + "suggestions": "" + }, + "help": { + "notFunkwhaleServer": "", + "selectPod": "", + "serverDown": "" + }, + "label": { + "url": "" + }, + "message": { + "currentConnection": "", + "newUrl": "" + } + }, + "ShortcutsModal": { + "button": { + "close": "" + }, + "header": { + "modal": "" + }, + "shortcut": { + "audio": { + "clearQueue": "", + "decreaseVolume": "", + "expandQueue": "", + "increaseVolume": "", + "label": "", + "playNext": "", + "playPause": "", + "playPrevious": "", + "seekBack30": "", + "seekBack5": "", + "seekForward30": "", + "seekForward5": "", + "shuffleQueue": "", + "toggleFavorite": "", + "toggleLoop": "", + "toggleMute": "" + }, + "general": { + "focus": "", + "label": "", + "show": "", + "unfocus": "" + } + } + }, + "Sidebar": { + "header": { + "administration": "", + "explore": "", + "library": "", + "main": "", + "more": "" + }, + "label": { + "add": "", + "administration": "", + "edits": "", + "follows": "", + "language": "", + "main": "", + "play": "", + "reports": "", + "theme": "" + }, + "link": { + "about": "", + "albums": "", + "artists": "", + "browse": "", + "channels": "", + "createAccount": "", + "favorites": "", + "home": "", + "library": "", + "login": "", + "moderation": "", + "playlists": "", + "podcasts": "", + "radios": "", + "search": "", + "settings": "", + "switchInstance": "", + "users": "" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "" + }, + "header": { + "error": "", + "image": "" + }, + "message": { + "success": "" + } + }, + "SignupFormBuilder": { + "button": { + "add": "", + "edit": "", + "preview": "" + }, + "help": { + "additionalFields": "", + "helpText": "" + }, + "label": { + "additionalField": "", + "additionalFields": "", + "delete": "", + "helpText": "", + "moveDown": "", + "moveUp": "" + }, + "table": { + "additionalFields": { + "header": { + "actions": "", + "label": "", + "required": "", + "type": "" + }, + "required": { + "false": "", + "true": "" + }, + "type": { + "long": "", + "short": "" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "ChannelEntries": { + "help": { + "subscribe": "" + } + }, + "ChannelForm": { + "header": { + "error": "" + }, + "help": { + "discography": "", + "podcast": "", + "podcastFields": "", + "username": "" + }, + "label": { + "category": "", + "description": "", + "discography": "", + "email": "", + "image": "", + "language": "", + "name": "", + "owner": "", + "podcast": "", + "subcategory": "", + "tags": "", + "username": "" + }, + "legend": { + "purpose": "" + }, + "loader": { + "loading": "" + }, + "placeholder": { + "name": "", + "username": "" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "" + } + }, + "ChannelSeries": { + "button": { + "showMore": "" + }, + "help": { + "subscribe": "" + } + }, + "ChannelsWidget": { + "button": { + "showMore": "" + } + }, + "EmbedWizard": { + "button": { + "copy": "" + }, + "header": { + "preview": "" + }, + "help": { + "anonymous": "", + "embed": "", + "width": "" + }, + "label": { + "embed": "", + "height": "", + "width": "" + }, + "message": { + "copy": "" + }, + "warning": { + "anonymous": "" + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "", + "follow": "", + "unfollow": "" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "", + "addToQueue": "", + "discretePlay": "", + "episodeDetails": "", + "hideArtist": "", + "playAlbum": "", + "playArtist": "", + "playNext": "", + "playNow": "", + "playPlaylist": "", + "playTrack": "", + "playTracks": "", + "report": "", + "startRadio": "", + "trackDetails": "" + }, + "title": { + "more": "", + "unavailable": "" + } + }, + "Player": { + "header": { + "player": "" + }, + "label": { + "addArtistContentFilter": "", + "audioPlayer": "", + "clearQueue": "", + "expandQueue": "", + "loopingDisabled": "", + "loopingSingle": "", + "loopingWholeQueue": "", + "mute": "", + "nextTrack": "", + "pause": "", + "play": "", + "previousTrack": "", + "shuffleQueue": "", + "unmute": "" + }, + "meta": { + "position": "", + "unknownAlbum": "", + "unknownArtist": "" + } + }, + "PlayerControls": { + "labels": { + "next": "", + "pause": "", + "play": "", + "previous": "" + } + }, + "Search": { + "empty": { + "noAlbums": "", + "noArtists": "" + }, + "header": { + "albums": "", + "artists": "", + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "SearchBar": { + "empty": { + "noResults": "" + }, + "header": { + "noResults": "" + }, + "label": { + "album": "", + "artist": "", + "category": { + "federation": "", + "podcasts": "" + }, + "search": "", + "tag": "", + "track": "" + }, + "link": { + "fediverse": "", + "more": "", + "rss": "" + }, + "placeholder": { + "search": "" + } + }, + "VolumeControl": { + "button": { + "mute": "", + "unmute": "" + }, + "label": { + "slider": "" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "", + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + }, + "Table": { + "table": { + "header": { + "album": "", + "artist": "", + "title": "" + } + } + }, + "Widget": { + "button": { + "more": "" + }, + "empty": { + "noResults": "" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "" + }, + "header": { + "appDetails": "", + "appSecretWarning": "", + "editApp": "" + }, + "help": { + "appDetails": "" + }, + "label": { + "accessToken": "", + "appId": "", + "appSecret": "" + }, + "link": { + "settings": "" + }, + "message": { + "appSecretWarning": "" + }, + "title": "" + }, + "ApplicationForm": { + "button": { + "create": "", + "update": "" + }, + "header": { + "failure": "" + }, + "help": { + "redirectUri": "" + }, + "label": { + "name": "", + "redirectUri": "", + "scopes": { + "description": "", + "label": "", + "read": { + "description": "", + "label": "" + }, + "write": { + "description": "", + "label": "" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "" + }, + "title": "" + }, + "Authorize": { + "button": { + "authorize": "" + }, + "header": { + "access": "", + "allScopes": "", + "authorize": "", + "authorizeFailure": "", + "fetchFailure": "", + "readOnly": "", + "writeOnly": "" + }, + "help": { + "copyCode": "", + "pasteCode": "", + "redirect": "" + }, + "message": { + "unknownPermissions": "" + }, + "title": "" + }, + "LoginForm": { + "button": { + "login": "" + }, + "header": { + "loginFailure": "" + }, + "help": { + "approvalRequired": "", + "invalidCredentials": "" + }, + "label": { + "password": "", + "username": "" + }, + "link": { + "createAccount": "", + "resetPassword": "" + }, + "message": { + "redirect": "" + }, + "placeholder": { + "username": "" + } + }, + "Logout": { + "button": { + "logout": "" + }, + "header": { + "confirm": "", + "unauthenticated": "" + }, + "link": { + "login": "" + }, + "message": { + "loggedIn": "" + }, + "title": "" + }, + "Plugin": { + "button": { + "save": "", + "scan": "" + }, + "description": { + "library": "" + }, + "header": { + "failure": "" + }, + "label": { + "library": "", + "pluginEnabled": "" + }, + "link": { + "documentation": "" + } + }, + "Settings": { + "button": { + "delete": "", + "deleteAccount": "", + "deleteAccountConfirm": "", + "disableSubsonic": "", + "edit": "", + "password": "", + "refresh": "", + "remove": "", + "removeApp": "", + "revoke": "", + "revokeAccess": "", + "update": "", + "updateSettings": "" + }, + "description": { + "authorizedApps": "", + "changeEmail": "", + "changePassword": { + "paragraph1": "", + "paragraph2": "" + }, + "contentFilters": "", + "deleteAccount": "", + "plugins": "", + "yourApps": "" + }, + "header": { + "accountFailure": "", + "accountSettings": "", + "authorizedApps": "", + "avatar": "", + "avatarFailure": "", + "changeEmail": "", + "changePassword": "", + "contentFilters": "", + "deleteAccount": "", + "emailFailure": "", + "hiddenArtists": "", + "noApps": "", + "noPersonalApps": "", + "passwordFailure": "", + "plugins": "", + "settingsUpdated": "", + "updateFailure": "", + "yourApps": "" + }, + "help": { + "changePassword": "", + "noApps": "", + "noPersonalApps": "" + }, + "label": { + "avatar": "", + "currentPassword": "", + "newEmail": "", + "newPassword": "", + "password": "" + }, + "link": { + "managePlugins": "", + "newApp": "" + }, + "message": { + "confirmDelete": "", + "currentEmail": "" + }, + "modal": { + "changePassword": { + "content": { + "logout": "", + "subsonic": "", + "warning": "" + }, + "header": "" + }, + "deleteAccount": { + "content": { + "warning": "" + }, + "header": "" + }, + "deleteApp": { + "content": { + "warning": "" + }, + "header": "" + }, + "revokeApp": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "", + "name": "" + } + }, + "authorizedApps": { + "header": { + "application": "", + "permissions": "" + } + }, + "yourApps": { + "header": { + "application": "", + "creationDate": "", + "scopes": "" + } + } + }, + "title": "", + "warning": { + "deleteAccount": "" + } + }, + "SignupForm": { + "button": { + "create": "" + }, + "header": { + "login": "", + "signupFailure": "" + }, + "label": { + "email": "", + "invitation": "", + "password": "", + "username": "" + }, + "message": { + "accountCreated": "", + "awaitingReview": "", + "registrationClosed": "", + "requiresReview": "" + }, + "placeholder": { + "email": "", + "invitation": "", + "username": "" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "", + "confirmNewPassword": "", + "disable": "", + "newPassword": "" + }, + "description": { + "subsonic": { + "paragraph1": "", + "paragraph2": "", + "paragraph3": "" + } + }, + "header": { + "error": "", + "subsonic": "" + }, + "label": { + "subsonicField": "" + }, + "link": { + "apps": "" + }, + "message": { + "accessDisabled": "", + "passwordUpdated": "", + "unavailable": "" + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "" + }, + "header": "" + }, + "newPassword": { + "content": { + "warning": "" + }, + "header": "" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "" + }, + "label": { + "albumTitle": "" + } + }, + "AlbumModal": { + "button": { + "cancel": "", + "create": "" + }, + "header": { + "newAlbum": "", + "newSeries": "" + } + }, + "AlbumSelect": { + "label": { + "album": "", + "series": "" + }, + "meta": { + "tracks": "" + }, + "option": { + "none": "" + } + }, + "LicenseSelect": { + "label": { + "license": "" + }, + "link": { + "license": "" + }, + "option": { + "none": "" + } + }, + "SubscribeButton": { + "help": { + "auth": "" + }, + "title": { + "subscribe": "", + "unsubscribe": "" + } + }, + "UploadForm": { + "button": { + "edit": "", + "ignore": "", + "remove": "", + "resume": "", + "retry": "" + }, + "description": { + "extensions": "" + }, + "header": { + "error": "" + }, + "help": { + "license": "" + }, + "label": { + "channel": "", + "openBrowser": "" + }, + "message": { + "dragAndDrop": "", + "pending": "" + }, + "status": { + "errored": "", + "pending": "", + "uploading": "" + }, + "warning": { + "quota": "" + } + }, + "UploadMetadataForm": { + "label": { + "description": "", + "image": "", + "position": "", + "tags": "", + "title": "" + } + }, + "UploadModal": { + "button": { + "cancel": "", + "close": "", + "finishLater": "", + "next": "", + "previous": "", + "publish": "", + "update": "" + }, + "header": { + "processing": "", + "publish": "", + "uploadDetails": "", + "uploadFiles": "" + }, + "meta": { + "files": "", + "quota": "" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "", + "go": "", + "launch": "", + "refresh": "", + "select": "", + "selectAll": "", + "selectCurrentPage": "", + "selectElement": "", + "selected": "" + }, + "header": { + "error": "" + }, + "label": { + "actions": "", + "performAction": "" + }, + "message": { + "needsRefresh": "", + "success": "" + }, + "modal": { + "performAction": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "" + }, + "header": { + "failure": "" + }, + "help": { + "upload": "" + }, + "label": { + "upload": "" + }, + "loader": { + "uploading": "" + } + }, + "CollapseLink": { + "button": { + "collapse": "", + "expand": "" + } + }, + "ContentForm": { + "button": { + "preview": "", + "write": "" + }, + "empty": { + "noContent": "" + }, + "help": { + "markdown": "" + }, + "placeholder": { + "input": "" + } + }, + "CopyInput": { + "button": { + "copy": "" + }, + "message": { + "success": "" + } + }, + "DangerousButton": { + "button": { + "cancel": "", + "confirm": "" + }, + "header": { + "confirm": "" + } + }, + "Duration": { + "meta": { + "hours": "", + "minutes": "" + } + }, + "EmptyState": { + "button": { + "refresh": "" + }, + "header": { + "noResults": "" + } + }, + "ExpandableDiv": { + "button": { + "less": "", + "more": "" + } + }, + "InlineSearchBar": { + "button": { + "clear": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "LoginModal": { + "description": { + "noAccess": "" + }, + "header": { + "unauthenticated": "" + }, + "link": { + "login": "", + "signup": "" + } + }, + "RenderedDescription": { + "button": { + "cancel": "", + "edit": "", + "less": "", + "more": "", + "update": "" + }, + "empty": { + "noDescription": "" + }, + "header": { + "failure": "" + } + }, + "UserLink": { + "link": { + "username": "" + } + }, + "UserMenu": { + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + }, + "UserModal": { + "button": { + "switchInstance": "" + }, + "header": { + "options": "" + }, + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "" + }, + "header": { + "favorites": "" + }, + "link": { + "library": "" + }, + "loader": { + "loading": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "title": "" + }, + "TrackFavoriteIcon": { + "button": { + "add": "", + "remove": "" + }, + "label": { + "inFavorites": "" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "", + "reload": "" + }, + "description": { + "failure": "", + "pending": "", + "skipped": "", + "success": "" + }, + "header": { + "failure": "", + "pending": "", + "refresh": "", + "saveFailure": "", + "skipped": "", + "success": "" + }, + "loader": { + "awaitingResult": "", + "fetchRequest": "" + }, + "table": { + "error": { + "label": { + "detail": "", + "type": "" + }, + "value": { + "connectionError": "", + "httpError": "", + "httpStatus": "", + "invalidAttributesError": "", + "invalidJsonError": "", + "timeoutError": "", + "unknownError": "" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "" + }, + "empty": { + "noMatch": "" + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "" + }, + "message": { + "copy": "" + }, + "title": "" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "" + }, + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "AlbumDetail": { + "description": { + "libraries": "" + }, + "header": { + "episodes": "", + "libraries": "", + "tracks": "" + }, + "meta": { + "volume": "" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "", + "delete": "", + "edit": "", + "embed": "", + "more": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Albums": { + "button": { + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "link": { + "addMusic": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "ArtistBase": { + "button": { + "cancel": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "", + "wikipedia": "" + }, + "meta": { + "albums": "", + "tracks": "" + }, + "modal": { + "embed": { + "header": "" + } + }, + "title": "" + }, + "ArtistDetail": { + "button": { + "filter": "", + "more": "" + }, + "description": { + "library": "" + }, + "header": { + "album": "", + "library": "", + "track": "" + }, + "link": { + "filter": "" + }, + "message": { + "filter": "" + } + }, + "ArtistEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Artists": { + "button": { + "search": "", + "upload": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "excludeCompilation": "", + "search": "", + "tags": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "EditCard": { + "button": { + "approve": "", + "delete": "", + "reject": "" + }, + "header": { + "modification": "" + }, + "link": { + "track": "" + }, + "modal": { + "content": { + "warning": "" + }, + "delete": { + "header": "" + } + }, + "status": { + "applied": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "table": { + "update": { + "header": { + "field": "", + "newValue": "", + "oldValue": "" + }, + "notApplicable": "" + } + } + }, + "EditForm": { + "button": { + "cancel": "", + "clear": "", + "new": "", + "reset": "", + "showAll": "", + "showUnreviewed": "", + "submit": "", + "suggest": "" + }, + "empty": { + "suggestEdit": "" + }, + "header": { + "failure": "", + "recentEdits": "", + "success": "", + "unreviewed": "" + }, + "label": { + "summary": "" + }, + "message": { + "noPermission": "" + }, + "notApplicable": "", + "placeholder": { + "summary": "" + } + }, + "FileUpload": { + "button": { + "cancel": "", + "retry": "" + }, + "description": { + "import": "", + "previousImport": "" + }, + "empty": { + "noFiles": "" + }, + "header": { + "failure": "", + "local": "", + "server": "", + "status": "" + }, + "label": { + "extensions": "", + "remainingSpace": "", + "uploadWidget": "" + }, + "link": { + "picard": "", + "processing": "", + "uploading": "" + }, + "message": { + "listener": "", + "local": { + "copyright": "", + "format": "", + "message": "", + "tag": "" + } + }, + "table": { + "upload": { + "header": { + "actions": "", + "filename": "", + "size": "", + "status": "" + }, + "progress": "", + "status": { + "pending": "", + "uploaded": "", + "uploading": "" + } + } + }, + "tooltip": { + "denied": "", + "extension": "", + "network": "", + "retry": "", + "size": "", + "timeout": "" + } + }, + "FsBrowser": { + "button": { + "import": "" + } + }, + "FsLogs": { + "empty": { + "notStarted": "" + } + }, + "Home": { + "header": { + "newChannels": "", + "playlists": "", + "recentlyAdded": "", + "recentlyFavorited": "", + "recentlyListened": "" + }, + "title": "" + }, + "ImportStatusModal": { + "button": { + "close": "" + }, + "error": { + "importFailure": "", + "invalidMetadata": { + "label": "", + "message": "" + }, + "unknownError": { + "label": "", + "message": "" + } + }, + "header": { + "importDetail": "" + }, + "link": { + "documentation": "", + "support": "" + }, + "message": { + "importDetail": "", + "importSuccess": "" + }, + "table": { + "error": { + "debug": "", + "errorDetail": "", + "errorType": "", + "help": "" + } + }, + "warning": { + "importSkipped": "" + } + }, + "Podcasts": { + "button": { + "cancel": "", + "channel": "", + "feed": "", + "search": "", + "subscribe": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "Radios": { + "button": { + "add": "", + "create": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "instance": "", + "user": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "TagDetail": { + "header": { + "channels": "", + "tracks": "" + }, + "link": { + "albums": "", + "artists": "", + "moderation": "" + } + }, + "TagSelector": { + "placeholder": { + "search": "" + } + }, + "TrackBase": { + "button": { + "cancel": "", + "delete": "", + "download": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "wikipedia": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "subtitle": { + "with-uploader": "", + "without-uploader": "" + }, + "title": "" + }, + "TrackDetail": { + "description": { + "library": "" + }, + "header": { + "episode": "", + "library": "", + "playlists": "", + "release": "", + "track": "" + }, + "link": { + "musicbrainz": "" + }, + "notApplicable": "", + "table": { + "release": { + "album": "", + "artist": "", + "copyright": "", + "license": "", + "series": "", + "url": "", + "year": "" + }, + "track": { + "bitrate": { + "label": "", + "value": "" + }, + "codec": "", + "downloads": "", + "duration": "", + "size": "" + } + } + }, + "TrackEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "radios": { + "Builder": { + "button": { + "filter": "", + "save": "" + }, + "description": { + "builder": "" + }, + "header": { + "builder": "", + "created": "", + "matches": "", + "updated": "" + }, + "label": { + "description": "", + "filter": "", + "name": "", + "public": "" + }, + "option": { + "filter": "" + }, + "placeholder": { + "description": "", + "name": "" + }, + "table": { + "filter": { + "header": { + "actions": "", + "candidates": "", + "config": "", + "exclude": "", + "name": "" + } + } + }, + "title": "" + }, + "Filter": { + "cancelButton": "", + "excludeLabel": "", + "matchingTracks": "", + "matchingTracksModalHeader": "", + "removeButton": "" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "channel": { + "header": { + "account": "", + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "album": { + "header": { + "artist": "", + "creationDate": "", + "domain": "", + "name": "", + "releaseDate": "", + "tracks": "" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "artist": { + "header": { + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "", + "status": "" + }, + "option": { + "all": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "library": { + "header": { + "account": "", + "creationDate": "", + "domain": "", + "followers": "", + "name": "", + "uploads": "", + "visibility": "" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "tag": { + "header": { + "albums": "", + "artists": "", + "creationDate": "", + "name": "", + "tracks": "" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "track": { + "header": { + "album": "", + "artist": "", + "creationDate": "", + "domain": "", + "license": "", + "title": "" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "status": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "option": { + "all": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "upload": { + "header": { + "accessedDate": "", + "account": "", + "creationDate": "", + "domain": "", + "importStatus": "", + "library": "", + "name": "", + "size": "", + "visibility": "" + } + } + } + } + }, + "moderation": { + "AccountsTable": { + "action": { + "purge": { + "label": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "account": { + "header": { + "domain": "", + "firstSeen": "", + "lastSeen": "", + "moderationRule": "", + "name": "", + "uploads": "" + }, + "moderationRule": "" + } + } + }, + "DomainsTable": { + "action": { + "add": { + "label": "" + }, + "purge": { + "label": "" + }, + "remove": { + "label": "" + } + }, + "empty": { + "noPods": "" + }, + "label": { + "inList": "", + "search": "" + }, + "link": { + "list": "" + }, + "option": { + "all": "", + "no": "", + "yes": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "domain": { + "header": { + "firstSeen": "", + "moderationRule": "", + "name": "", + "receivedMessages": "", + "users": "" + }, + "moderationRule": "" + } + } + }, + "InstancePolicyCard": { + "button": { + "edit": "" + }, + "header": { + "rule": "" + }, + "label": { + "blockAll": "", + "muteActivity": "", + "muteNotifications": "", + "reason": "", + "rejectMedia": "" + }, + "status": { + "enabled": "", + "paused": "" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "", + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "header": { + "addRule": "", + "editRule": "", + "failure": "" + }, + "label": { + "blockAll": "", + "customizeRule": "", + "policyDisabled": "", + "policyEnabled": "", + "policyReason": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "blockAll": "", + "isActive": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "", + "summary": "" + } + }, + "InstancePolicyModal": { + "button": { + "close": "", + "show": "" + }, + "modal": { + "manage": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "NoteForm": { + "button": { + "add": "" + }, + "header": { + "failure": "" + }, + "placeholder": { + "summary": "" + } + }, + "NotesThread": { + "button": { + "delete": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "ReportCard": { + "button": { + "confirmDelete": "", + "delete": "", + "resolve": "", + "unresolve": "" + }, + "header": { + "actions": "", + "message": "", + "notes": "", + "reportedObject": "" + }, + "link": { + "moderation": "", + "publicPage": "", + "report": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "object": { + "account": "", + "domain": "", + "local": "", + "owner": "", + "type": "" + }, + "report": { + "category": "", + "creationDate": "", + "submittedBy": "" + }, + "status": { + "assignedTo": "", + "internalNotes": "", + "resolutionDate": "", + "resolved": "", + "status": "", + "unresolved": "" + } + }, + "warning": { + "objectDeleted": "" + } + }, + "UserRequestCard": { + "button": { + "approve": "", + "reject": "" + }, + "header": { + "actions": "", + "notes": "", + "signup": "" + }, + "link": { + "request": "" + }, + "message": { + "signup": "" + }, + "notApplicable": "", + "table": { + "request": { + "creationDate": "", + "submittedBy": "" + }, + "status": { + "approved": "", + "assignedTo": "", + "internalNotes": "", + "pending": "", + "refused": "", + "resolutionDate": "", + "status": "" + } + } + } + }, + "users": { + "InvitationForm": { + "button": { + "clear": "", + "new": "" + }, + "header": { + "failure": "" + }, + "label": { + "invite": "" + }, + "placeholder": { + "invitation": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "link": "" + } + } + } + }, + "InvitationsTable": { + "action": { + "delete": "" + }, + "label": { + "expired": "", + "search": "", + "status": "", + "unused": "", + "used": "" + }, + "option": { + "all": "", + "expired": "", + "open": "" + }, + "ordering": { + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "creationDate": "", + "expirationDate": "", + "owner": "", + "status": "", + "user": "" + } + } + } + }, + "UsersTable": { + "label": { + "search": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "permission": { + "library": "", + "moderation": "", + "settings": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "user": { + "accountStatus": { + "active": "", + "inactive": "" + }, + "header": { + "accountStatus": "", + "email": "", + "lastActivity": "", + "permissions": "", + "signup": "", + "status": "", + "username": "" + }, + "status": { + "admin": "", + "regular": "", + "staff": "" + } + } + } + } + } + }, + "moderation": { + "FilterModal": { + "button": { + "cancel": "", + "hide": "" + }, + "header": { + "failure": "", + "modal": "" + }, + "help": { + "createFilter": "" + }, + "message": { + "success": "" + }, + "warning": { + "createFilter": { + "listIntro": "", + "listItem1": "", + "listItem2": "", + "listItem3": "", + "listItem4": "" + } + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "" + }, + "option": { + "all": "" + } + }, + "ReportModal": { + "button": { + "cancel": "", + "submit": "" + }, + "description": { + "email": "", + "forwardToDomain": "", + "message": "", + "modal": "" + }, + "error": { + "nodeinfoFetch": "" + }, + "header": { + "disabled": "", + "modal": "", + "submissionFailure": "" + }, + "label": { + "email": "", + "forwardToDomain": "", + "message": "" + }, + "message": { + "submissionSuccess": "" + } + } + }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "", + "markRead": "", + "markUnread": "", + "reject": "" + }, + "message": { + "libraryAcceptFollow": "", + "libraryFollow": "", + "libraryPendingFollow": "", + "libraryReject": "" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Editor": { + "button": { + "addDuplicate": "", + "clear": "", + "copy": "", + "insertFromQueue": "" + }, + "error": { + "sync": "" + }, + "header": { + "editor": "" + }, + "help": { + "reorder": "" + }, + "loading": { + "sync": "" + }, + "message": { + "sync": "" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "warning": { + "duplicate": "" + } + }, + "Form": { + "button": { + "create": "", + "update": "" + }, + "header": { + "createFailure": "", + "createPlaylist": "", + "createSuccess": "", + "updateSuccess": "" + }, + "label": { + "name": "", + "visibility": "" + }, + "placeholder": { + "name": "" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "", + "addToPlaylist": "", + "addTrack": "", + "cancel": "", + "edit": "" + }, + "empty": { + "noPlaylists": "" + }, + "header": { + "addFailure": "", + "addToPlaylist": "", + "available": "", + "manage": "", + "noResults": "", + "track": "" + }, + "label": { + "filter": "" + }, + "placeholder": { + "filterPlaylist": "" + }, + "table": { + "edit": { + "header": { + "edit": "", + "lastModification": "", + "name": "", + "tracks": "" + } + } + }, + "warning": { + "duplicate": "" + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "" + } + }, + "Widget": { + "button": { + "create": "", + "more": "" + }, + "placeholder": { + "noPlaylists": "" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "", + "startPlaylistsRadio": "", + "startRadio": "", + "startTagsRadio": "", + "stopArtistsRadio": "", + "stopPlaylistsRadio": "", + "stopRadio": "", + "stopTagsRadio": "" + }, + "Card": { + "button": { + "edit": "" + } + } + }, + "tags": { + "List": { + "button": { + "more": "" + } + } + }, + "vui": { + "Pagination": { + "label": "", + "next": "", + "previous": "" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "", + "other": "", + "podcast": "" + }, + "label": "" + }, + "importStatus": { + "choices": { + "draft": { + "help": "", + "label": "" + }, + "errored": { + "help": "", + "label": "" + }, + "finished": { + "help": "", + "label": "" + }, + "pending": { + "help": "", + "label": "" + }, + "skipped": { + "help": "", + "label": "" + } + }, + "label": "" + }, + "privacyLevel": { + "choices": { + "instance": "", + "private": "", + "public": "" + }, + "help": "", + "label": "", + "shortChoices": { + "instance": "", + "private": "", + "public": "" + } + }, + "reportType": { + "choices": { + "illegalContent": "", + "invalidMetadata": "", + "offensiveContent": "", + "other": "", + "takedownRequest": "" + }, + "label": "" + }, + "summary": { + "label": "" + } + }, + "filters": { + "accessedDate": "", + "albumTitle": "", + "appliedDate": "", + "artistName": "", + "bitrate": "", + "creationDate": "", + "dateJoined": "", + "domain": "", + "duration": "", + "expirationDate": "", + "firstSeen": "", + "followers": "", + "handledDate": "", + "itemsCount": "", + "lastActivity": "", + "lastSeen": "", + "modificationDate": "", + "name": "", + "receivedMessages": "", + "releaseDate": "", + "size": "", + "trackTitle": "", + "uploads": "", + "username": "", + "users": "" + }, + "scopes": { + "edits": { + "description": "", + "label": "" + }, + "favorites": { + "description": "", + "label": "" + }, + "filters": { + "description": "", + "label": "" + }, + "follows": { + "description": "", + "label": "" + }, + "libraries": { + "description": "", + "label": "" + }, + "listenings": { + "description": "", + "label": "" + }, + "notifications": { + "description": "", + "label": "" + }, + "playlists": { + "description": "", + "label": "" + }, + "profile": { + "description": "", + "label": "" + }, + "radios": { + "description": "", + "label": "" + }, + "reports": { + "description": "", + "label": "" + }, + "security": { + "description": "", + "label": "" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "", + "title": "" + }, + "artist": { + "name": "" + }, + "cover": { + "label": "" + }, + "description": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "license": "", + "position": "", + "title": "" + } + }, + "useReport": { + "account": { + "label": "", + "typeLabel": "" + }, + "album": { + "label": "", + "typeLabel": "" + }, + "artist": { + "label": "", + "typeLabel": "", + "unknownLabel": "" + }, + "channel": { + "label": "", + "typeLabel": "" + }, + "library": { + "label": "", + "typeLabel": "" + }, + "playlist": { + "label": "", + "typeLabel": "" + }, + "track": { + "label": "", + "typeLabel": "" + } + }, + "useReportConfigs": { + "account": { + "label": "", + "summary": "" + }, + "album": { + "label": "", + "releaseDate": "", + "title": "" + }, + "artist": { + "label": "" + }, + "channel": { + "label": "" + }, + "creationDate": { + "label": "" + }, + "library": { + "description": "", + "label": "" + }, + "musicbrainzId": { + "label": "" + }, + "name": { + "label": "" + }, + "playlist": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "label": "", + "license": "", + "position": "", + "title": "" + }, + "visibility": { + "label": "" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "", + "errorReportTitle": "", + "leaveFeedback": "", + "unexpectedError": "" + }, + "useThemeList": { + "browserDefault": "", + "darkTheme": "", + "lightTheme": "" + } + }, + "init": { + "axios": { + "rateLimitDelay": "", + "rateLimitLater": "" + }, + "sentry": { + "allow": "", + "deny": "", + "funkwhaleInstance": "", + "message": "", + "title": "" + }, + "serviceWorker": { + "actions": { + "later": "", + "update": "" + }, + "newAppVersion": "" + } + }, + "views": { + "Notifications": { + "button": { + "read": "", + "submit": "" + }, + "empty": { + "notifications": "" + }, + "header": { + "funkwhaleSupport": "", + "instanceSupport": "", + "messages": "", + "notifications": "" + }, + "label": { + "reminder": "", + "showRead": "" + }, + "link": { + "donate": "", + "help": "" + }, + "loading": { + "notifications": "" + }, + "message": { + "funkwhaleSupport": "" + }, + "option": { + "delay": { + "30": "", + "60": "", + "90": "", + "never": "" + } + }, + "title": "" + }, + "Search": { + "button": { + "submit": "" + }, + "header": { + "remote": "", + "rss": "", + "search": "" + }, + "label": { + "albums": "", + "artists": "", + "playlists": "", + "podcasts": "", + "radios": "", + "series": "", + "tags": "", + "tracks": "" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "", + "openRemote": "", + "refresh": "" + }, + "header": { + "activity": "", + "audioContent": "", + "channelData": "" + }, + "label": { + "local": "" + }, + "link": { + "django": "", + "localProfile": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "edits": "", + "favorited": "", + "firstSeen": "", + "linkedReports": "", + "listenings": "", + "playlists": "" + }, + "audioContent": { + "albums": "", + "cachedSize": "", + "totalSize": "", + "tracks": "", + "uploads": "" + }, + "channelData": { + "account": "", + "category": "", + "description": "", + "domain": "", + "name": "", + "rss": "", + "url": "" + } + }, + "warning": { + "stats": "" + } + }, + "CommonList": { + "title": { + "accounts": "", + "albums": "", + "artists": "", + "channels": "", + "invitations": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "", + "users": "" + } + }, + "Settings": { + "header": { + "channels": "", + "federation": "", + "instanceInfo": "", + "moderation": "", + "music": "", + "playlists": "", + "sections": "", + "security": "", + "settings": "", + "signups": "", + "stats": "", + "subsonic": "", + "ui": "" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "albumData": "", + "audioContent": "", + "local": "" + }, + "link": { + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "album": { + "description": "", + "title": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "ArtistDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "artistData": "", + "audioContent": "", + "local": "" + }, + "link": { + "albums": "", + "category": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "artist": { + "description": "", + "name": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "albums": "", + "artists": "", + "channels": "", + "edits": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "EditsList": { + "header": { + "edits": "" + }, + "title": "" + }, + "LibraryDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "libraryData": "", + "local": "" + }, + "link": { + "account": "", + "albums": "", + "artists": "", + "django": "", + "domain": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "", + "followers": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "library": { + "description": "", + "name": "" + } + }, + "warning": { + "stats": "" + } + }, + "TagDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "tagData": "" + }, + "link": { + "albums": "", + "artists": "", + "django": "", + "localProfile": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "" + }, + "tag": { + "name": "" + } + } + }, + "TrackDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "local": "", + "trackData": "" + }, + "link": { + "album": "", + "albumArtist": "", + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "track": { + "copyright": "", + "description": "", + "discNumber": "", + "license": "", + "position": "", + "title": "" + }, + "trackData": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "UploadDetail": { + "button": { + "delete": "", + "download": "" + }, + "header": { + "activity": "", + "audioContent": "", + "local": "", + "uploadData": "" + }, + "link": { + "account": "", + "django": "", + "domain": "", + "importStatus": "", + "library": "", + "remoteProfile": "", + "type": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "activity": { + "accessedDate": "", + "firstSeen": "" + }, + "audioContent": { + "bitrate": { + "label": "", + "value": "" + }, + "cachedSize": "", + "duration": "", + "size": "", + "track": "" + }, + "upload": { + "name": "" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "" + }, + "description": { + "policy": "" + }, + "header": { + "accountData": "", + "activePolicy": "", + "activity": "", + "audioContent": "", + "localAccount": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "domain": "", + "libraries": "", + "linkedReports": "", + "openProfile": "", + "remoteProfile": "", + "requests": "", + "tracks": "", + "uploads": "" + }, + "notApplicable": "", + "option": { + "permission": { + "library": "", + "moderation": "", + "settings": "" + } + }, + "table": { + "accountData": { + "displayName": "", + "email": "", + "lastActivity": "", + "lastChecked": "", + "loginStatus": { + "disabled": "", + "enabled": "", + "label": "" + }, + "permissions": "", + "signupDate": "", + "userType": "", + "username": "" + }, + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "megabyte": "", + "totalSize": "", + "uploadQuota": "" + } + }, + "tooltip": { + "uploadQuota": "" + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "accounts": "", + "domains": "", + "reports": "", + "userRequests": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "DomainsDetail": { + "button": { + "addPolicy": "", + "addToAllowList": "", + "refreshNodeInfo": "", + "removeFromAllowList": "" + }, + "description": { + "policy": "" + }, + "header": { + "activePolicy": "", + "activity": "", + "audioContent": "", + "instanceData": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "knownAccounts": "", + "libraries": "", + "tracks": "", + "uploads": "", + "website": "" + }, + "notApplicable": "", + "table": { + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "instanceData": { + "domainName": "", + "inAllowList": { + "false": "", + "label": "", + "true": "" + }, + "lastChecked": "", + "nodeInfoStatus": { + "label": "", + "value": "" + }, + "software": { + "label": "", + "value": "" + }, + "totalUsers": "" + } + }, + "warning": { + "stats": "" + } + }, + "DomainsList": { + "button": { + "add": "" + }, + "header": { + "domains": "", + "failure": "" + }, + "label": { + "addDomain": "", + "addToAllowList": "" + }, + "title": "" + }, + "ReportsList": { + "header": { + "reports": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "resolved": "", + "unresolved": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "RequestsList": { + "header": { + "userRequests": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "approved": "", + "pending": "", + "refused": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "users": { + "Base": { + "link": { + "invitations": "", + "users": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "" + } + }, + "EmailConfirm": { + "header": { + "failure": "", + "success": "" + }, + "label": { + "confirmationCode": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "success": "" + }, + "title": "" + }, + "Login": { + "header": { + "login": "" + }, + "title": "" + }, + "PasswordReset": { + "button": { + "requestReset": "" + }, + "header": { + "failure": "", + "reset": "" + }, + "help": { + "form": "" + }, + "label": { + "email": "" + }, + "link": { + "back": "" + }, + "placeholder": { + "email": "" + }, + "title": "" + }, + "PasswordResetConfirm": { + "button": { + "update": "" + }, + "header": { + "failure": "", + "success": "" + }, + "label": { + "newPassword": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "requestSent": "", + "success": "" + }, + "title": "" + }, + "Plugins": { + "title": "" + }, + "ProfileActivity": { + "header": { + "playlists": "", + "recentlyFavorited": "", + "recentlyListened": "" + } + }, + "ProfileBase": { + "label": { + "self": "" + }, + "link": { + "activity": "", + "domainView": "", + "moderation": "", + "overview": "" + }, + "title": "" + }, + "ProfileOverview": { + "button": { + "cancel": "", + "createChannel": "", + "next": "", + "previous": "" + }, + "header": { + "channels": "", + "libraries": "", + "sharedLibraries": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "createChannel": { + "artist": { + "header": "" + }, + "header": "", + "podcast": { + "header": "" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "" + }, + "title": "" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "play": "", + "updateChannel": "", + "upload": "" + }, + "header": { + "artistChannel": "", + "podcastChannel": "" + }, + "link": { + "channelEpisodes": "", + "channelOverview": "", + "channelTracks": "", + "domainView": "", + "mirrored": "", + "moderation": "" + }, + "meta": { + "episodes": "", + "listenings": "", + "subscribers": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "" + }, + "header": "" + }, + "funkwhale": { + "header": "" + }, + "header": "", + "rss": { + "content": { + "help": "" + }, + "header": "" + } + } + }, + "title": "" + }, + "DetailOverview": { + "header": { + "albums": "", + "latestEpisodes": "", + "latestTracks": "", + "series": "", + "uploadsFailure": "", + "uploadsProcessing": "", + "uploadsSuccess": "" + }, + "link": { + "addAlbum": "", + "erroredUploads": "", + "skippedUploads": "" + }, + "message": { + "processing": "" + }, + "meta": { + "progress": "" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "", + "subscribe": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "content": { + "Base": { + "link": { + "libraries": "", + "tracks": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "Home": { + "button": { + "start": "" + }, + "description": { + "channel": { + "1": "", + "2": "" + }, + "follow": "", + "upload": "" + }, + "header": { + "channel": "", + "follow": "", + "upload": "" + }, + "help": { + "uploadQuota": "" + }, + "title": "" + }, + "libraries": { + "Card": { + "button": { + "upload": "" + }, + "label": { + "size": "" + }, + "link": { + "details": "" + }, + "meta": { + "tracks": "" + } + }, + "FilesTable": { + "action": { + "delete": "", + "restartImport": "" + }, + "button": { + "showStatus": "" + }, + "empty": { + "noTracks": "" + }, + "label": { + "importStatus": "", + "search": "" + }, + "notApplicable": "", + "option": { + "status": { + "all": "", + "draft": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "file": { + "header": { + "album": "", + "artist": "", + "duration": "", + "importStatus": "", + "size": "", + "title": "", + "uploadDate": "" + } + } + } + }, + "Form": { + "button": { + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "description": { + "library": "", + "visibility": "" + }, + "header": { + "failure": "" + }, + "label": { + "description": "", + "name": "", + "visibility": "" + }, + "message": { + "libraryCreated": "", + "libraryDeleted": "", + "libraryUpdated": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "placeholder": { + "description": "", + "name": "" + } + }, + "Home": { + "empty": { + "noLibrary": "" + }, + "header": { + "libraries": "" + }, + "link": { + "createLibrary": "" + }, + "loading": { + "libraries": "" + } + }, + "Quota": { + "button": { + "purge": "" + }, + "header": { + "currentUsage": "" + }, + "label": { + "currentUsage": "", + "errored": "", + "pending": "", + "percentUsed": "", + "skipped": "" + }, + "link": { + "viewFiles": "" + }, + "loading": { + "currentUsage": "" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "" + }, + "header": "" + }, + "purgePending": { + "content": { + "description": "" + }, + "header": "" + }, + "purgeSkipped": { + "content": { + "description": "" + }, + "header": "" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "", + "follow": "", + "pending": "", + "unfollow": "" + }, + "error": { + "follow": "", + "unfollow": "" + }, + "label": { + "scanFailure": "", + "scanPartialSuccess": "", + "scanPending": "", + "scanProgress": "", + "scanSuccess": "", + "sharingLink": "" + }, + "link": { + "scan": "", + "scanDetails": "" + }, + "message": { + "scanLaunched": "", + "scanSkipped": "" + }, + "meta": { + "failedTracks": "", + "lastUpdate": "", + "tracks": "" + }, + "modal": { + "unfollow": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "private": "", + "public": "" + } + }, + "Home": { + "button": { + "refresh": "" + }, + "description": { + "remoteLibraries": "" + }, + "header": { + "knownLibraries": "", + "remoteLibraries": "" + }, + "loading": { + "remoteLibraries": "" + } + }, + "ScanForm": { + "button": { + "submit": "" + }, + "header": { + "failure": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "url": "" + } + } + } + }, + "library": { + "DetailAlbums": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailOverview": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailTracks": { + "empty": { + "follow": "", + "upload": "" + } + }, + "Edit": { + "button": { + "accept": "", + "reject": "" + }, + "empty": { + "noFollowers": "" + }, + "header": { + "followers": "", + "libraryContents": "" + }, + "loading": { + "followers": "" + }, + "table": { + "action": { + "header": { + "action": "", + "date": "", + "status": "", + "user": "" + }, + "status": { + "accepted": "", + "pending": "", + "rejected": "" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "", + "upload": "" + }, + "description": { + "sharingLink": "" + }, + "label": { + "instance": "", + "private": "", + "public": "", + "sharingLink": "" + }, + "link": { + "albums": "", + "artists": "", + "domain": "", + "moderation": "", + "owner": "", + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "title": "", + "tooltip": { + "instance": "", + "private": "", + "public": "" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "playAll": "", + "stopEdit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "title": "" + }, + "List": { + "button": { + "create": "", + "manage": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "playlists": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "", + "delete": "", + "edit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "radio": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "title": "" + } + } + } +} diff --git a/front/src/locales/ca.json b/front/src/locales/ca.json index a49a0f6ba..47382e4b8 100644 --- a/front/src/locales/ca.json +++ b/front/src/locales/ca.json @@ -1,13 +1,13 @@ { "App": { - "loading": "Carregant..." + "loading": "Carregant…" }, "components": { "About": { "description": { - "findApp": "Utilitzeu Funkwhale en d'altres terminals amb les nostres aplicacions", + "findApp": "Utilitzeu Funkwhale en d'altres terminals amb les nostres aplicacions.", "funkwhale": "Aquest pod funciona amb Funkwhale, un projecte impulsat per la comunitat que us permet escoltar i compartir música i àudio en una xarxa oberta descentralitzada.", - "publicContent": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod", + "publicContent": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod.", "quota": "Els usuaris d’aquest pod també aconsegueixen % {quota} d’emmagatzematge gratuït per penjar el seu propi contingut!", "signup": "Registra't ara per fer un seguiment dels teus favorits, crear llistes de reproducció, descobrir contingut nou i molt més!" }, @@ -18,6 +18,9 @@ "publicContent": "Explorar el contingut públic", "signup": "Inscripció" }, + "help": { + "closedRegistrations": "Les inscripcions estan tancades en aquest pod. Podeu registrar-vos en un altre pod mitjançant l'enllaç següent." + }, "link": { "findOtherPod": "Trobar una altra instàncies", "learnMore": "Aprèn més" @@ -27,7 +30,7 @@ "loggedIn": "Ja t'has registrat!" }, "placeholder": { - "noDescription": "Descripció no disponible." + "noDescription": "Descripció no disponible" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -71,9 +74,9 @@ }, "notApplicable": "No disponible", "placeholder": { - "noDescription": "Descripció no disponible.", - "noRules": "Sense regles disponibles.", - "noTerms": "No hi ha termes disponibles." + "noDescription": "Descripció no disponible", + "noRules": "Sense regles disponibles", + "noTerms": "No hi ha termes disponibles" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -106,6 +109,9 @@ "statistics": "Estadístiques", "welcome": "Benvinguts a { podName }!" }, + "help": { + "registrationsClosed": "Les inscripcions estan tancades en aquest pod. Podeu registrar-vos en un altre pod mitjançant l'enllaç següent." + }, "link": { "findOtherPod": "Trobar una altra instàncies", "funkwhale": "Visitar funkwhale.audio", @@ -115,7 +121,7 @@ "label": "Aplicacions mòbils" }, "publicContent": { - "description": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod", + "description": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod.", "label": "Explorar el contingut públic" }, "rules": "Regles del servidor", @@ -126,7 +132,7 @@ "viewMore": "Veure més …" }, "placeholder": { - "noDescription": "Descripció no disponible." + "noDescription": "Descripció no disponible" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -154,6 +160,7 @@ }, "header": { "failure": "La pista no s'ha pogut carregar", + "noSources": "La pista no té fonts disponibles.", "radio": "Estàs escoltant la ràdio" }, "label": { @@ -165,17 +172,22 @@ "next": "Pista següent", "pause": "Pausa", "play": "Reproduir", + "populatingRadio": "S'està recuperant la pista de ràdio…", "previous": "Pista anterior", "queue": "Cua de reproducció", "remove": "Retirar", "restart": "Pista següent", - "selectTrack": "Selecciona una pista" + "selectTrack": "Selecciona una pista", + "showCoverArt": "Mostra la portada", + "showVisualizer": "Mostra el visualitzador MoonDrop" }, "message": { "automaticPlay": "La següent pista serà reproduïda automàticament en pocs segons …", - "radio": "Les noves pistes s'afegiran automàticament aquí." + "radio": "Les noves pistes s'afegiran automàticament aquí.", + "webglUnsupported": "Sembla que el vostre navegador no suporta WebGL2." }, "meta": { + "end": "Fi", "queuePosition": "Pista { index } de { length }", "startTime": "00:00", "unknownAlbum": "Àlbum desconegut", @@ -192,7 +204,8 @@ "search": "Buscar" }, "description": { - "fediverse": "Utilitzeu aquest formulari per recuperar un objecte allotjat en algun altre lloc en la fediverse." + "fediverse": "Utilitzeu aquest formulari per recuperar un objecte allotjat en algun altre lloc en la fediverse.", + "rss": "Utilitzeu aquest formulari per subscriure's a un canal RSS des del seu URL." }, "error": { "fetchFailed": "No es pot recuperar aquest objecte" @@ -235,6 +248,7 @@ "url": "Adreça de la instància" }, "message": { + "currentConnection": "Actualment esteu connectat a {0}. Si continueu, se us desconnectarà de la vostra instància actual i se suprimiran totes les vostres dades locals.", "newUrl": "Ara utilitzeu la instància de Funkwhale a { url }" } }, @@ -288,6 +302,7 @@ "language": "Idioma", "main": "Menú principal", "play": "Reprodueix aquesta pista", + "reports": "Informes pendents de revisió", "theme": "Tema" }, "link": { @@ -317,7 +332,7 @@ "save": "Guardar" }, "header": { - "error": "Error guardant els canvis", + "error": "Error guardant els canvis.", "image": "Imatge actual" }, "message": { @@ -377,11 +392,12 @@ }, "ChannelForm": { "header": { - "error": "Error guardant el canal" + "error": "Error desant el canal." }, "help": { "discography": "Publiqueu música que feu com ara una bonica discografia d'àlbums o senzills.", "podcast": "Allotja els teus episodis i mantén la teva comunitat actualitzada.", + "podcastFields": "S'utilitza per als camps itunes:email i itunes:name requerits per certes plataformes com Spotify o iTunes.", "username": "S'utilitza en URLs i per seguir aquest canal a la federació. No es pot canviar més tard." }, "label": { @@ -395,7 +411,8 @@ "owner": "Propietari", "podcast": "Podcasts", "subcategory": "Subcategoria", - "tags": "Etiquetes" + "tags": "Etiquetes", + "username": "Identificador al Fedivers" }, "legend": { "purpose": "Per a què s'utilitzarà aquest canal?" @@ -459,7 +476,7 @@ }, "PlayButton": { "button": { - "addToPlaylist": "Afegir a la llista de reproducció …", + "addToPlaylist": "Afegir a la llista de reproducció", "addToQueue": "Afegir a la cua de reproducció actual", "discretePlay": "Reproduir", "episodeDetails": "Detalls de l'episodi", @@ -510,7 +527,7 @@ "labels": { "next": "Següent pista", "pause": "Pausa", - "play": "Play", + "play": "Reproducció", "previous": "Pista anterior" } }, @@ -598,7 +615,7 @@ "Modal": { "button": { "addToFavorites": "Afegir a favorits", - "addToPlaylist": "Afegir a la llista de reproducció …", + "addToPlaylist": "Afegir a la llista de reproducció", "addToQueue": "Afegir a la cua de reproducció", "albumDetails": "Nou àlbum", "artistDetails": "Artistes ocults", @@ -622,7 +639,7 @@ "Modal": { "button": { "addToFavorites": "Afegir a favorits", - "addToPlaylist": "Afegir a la llista de reproducció …", + "addToPlaylist": "Afegir a la llista de reproducció", "addToQueue": "Afegir a la cua de reproducció", "albumDetails": "Nou àlbum", "artistDetails": "Artistes ocults", @@ -657,8 +674,12 @@ }, "auth": { "ApplicationEdit": { + "button": { + "regenerateToken": "Regenerar testimoni" + }, "header": { "appDetails": "Detalls de l'aplicació", + "appSecretWarning": "Guardeu una còpia d'aquest testimoni en un lloc segur.", "editApp": "Editar l'aplicació" }, "help": { @@ -693,6 +714,7 @@ "redirectUri": "URI de redirecció", "scopes": { "description": "Comprovar els àmbits pare “Llegir” o “Escriure” implica l’accés a tots els àmbits fill que en deriven.", + "label": "Àmbits", "read": { "description": "Accés a llegir només les dades d'utilització", "label": "Llegir" @@ -724,7 +746,7 @@ "writeOnly": "Només d'escriptura" }, "help": { - "copyCode": "Se us mostrarà un codi per copiar i enganxar a l’aplicació.", + "copyCode": "Se us mostrarà un codi per copiar i enganxar a l’aplicació", "pasteCode": "Copia i enganxa el codi de seguiment a la vostra aplicació:", "redirect": "Es redirigirà a { 0 }" }, @@ -768,7 +790,7 @@ "unauthenticated": "Actualment esteu connectat com a { username }" }, "link": { - "login": "Iniciar sessió" + "login": "Iniciar sessió!" }, "message": { "loggedIn": "Actualment esteu connectat com a { username }" @@ -819,6 +841,7 @@ }, "contentFilters": "Els filtres de contingut us ajuden a amagar el contingut que no voleu veure al servei.", "deleteAccount": "Podeu suprimir de manera permanent i irreversible el vostre compte i totes les dades associades mitjançant el formulari següent. Se us demanarà confirmació.", + "plugins": "Utilitzeu connectors per ampliar Funkwhale i obtenir funcions addicionals.", "yourApps": "Aquesta és la llista d'aplicacions que has creat." }, "header": { @@ -866,7 +889,7 @@ "content": { "logout": "Es tancarà la sessió d’aquest compte i hauràs d’iniciar sessió amb la nou", "subsonic": "La vostra contrasenya Subsonic es canviarà a una altra nova i aleatòria, i us iniciarà la sessió des dels dispositius que utilitzen la contrasenya antiga de Subsonic", - "warning": "Canviar la teva contrasenya tindrà les següents conseqüències:" + "warning": "Canviar la teva contrasenya tindrà les següents conseqüències" }, "header": "Canviar la teva contrasenya?" }, @@ -1030,7 +1053,7 @@ }, "SubscribeButton": { "help": { - "auth": "És possible que hagueu de subscriure-vos aquesta biblioteca per veure'n el contingut." + "auth": "És possible que hagueu de subscriure-vos a aquesta biblioteca per veure'n el contingut" }, "title": { "subscribe": "Subscriu-te", @@ -1098,7 +1121,7 @@ }, "meta": { "files": "{ n } fitxer | { n } fitxers", - "quota": "Espai d’emmagatzematge restant:" + "quota": "Espai d’emmagatzematge restant: {space}" } } }, @@ -1124,7 +1147,7 @@ }, "message": { "needsRefresh": "S'ha actualitzat el contingut, refresca per veure el contingut actualitzat", - "success": "L'acció { action } està en marxa en { n } element | L'acció { action } està en marxa en { n } elements" + "success": "L'acció { action } està en marxa en { n } element | L'acció { action } està en marxa en { n } elements" }, "modal": { "performAction": { @@ -1164,10 +1187,10 @@ "write": "Escriu" }, "empty": { - "noContent": "No hi ha res a previsualitzar." + "noContent": "No hi ha res a previsualitzar" }, "help": { - "markdown": "Es pot utilitzar la sintaxi Markdown." + "markdown": "Es pot utilitzar la sintaxi Markdown" }, "placeholder": { "input": "Escriu alguna cosa aquí…" @@ -1250,12 +1273,12 @@ }, "UserLink": { "link": { - "username": "{'@'}{usuari}" + "username": "{'@'}{username}" } }, "UserMenu": { "label": { - "language": "Idioma", + "language": "Llengua", "shortcuts": "Dreceres de teclat", "theme": "Canviar tema" }, @@ -1428,7 +1451,7 @@ "AlbumDropdown": { "button": { "cancel": "Cancelar", - "delete": "Suprimir …", + "delete": "Suprimir", "edit": "Editar", "embed": "Incrustar", "more": "Més …" @@ -1631,7 +1654,7 @@ "suggest": "Enviar suggerències" }, "empty": { - "suggestEdit": "Suggereix un canvi mitjançant el formulari següent." + "suggestEdit": "Suggereix un canvi mitjançant el formulari següent" }, "header": { "failure": "Error trametent les modificaions", @@ -1664,6 +1687,7 @@ }, "header": { "failure": "Error al enviar l'informe", + "local": "Penja música des de '~/el teu emmagatzematge local", "server": "Estat de la importació", "status": "Estat de la importació" }, @@ -1681,7 +1705,7 @@ "listener": "Aquesta pàgina et demana que confirmis que vols sortir - és possible que no es guardin les dades que has introduït.", "local": { "copyright": "No pengis contingut amb drets d'autor en una biblioteca pública, en cas contrari, podries infringir la llei", - "format": "L'arxiu de música que has carregat està ben etiquetat.", + "format": "L'arxiu de música que heu carregat està en format OGG, Flac, MP3 or AIFF", "message": "Estàs apunt de carregar música a la teva biblioteca. Abans de començar, assegurat de:", "tag": "L'arxiu de música que has carregat està ben etiquetat." } @@ -1694,6 +1718,7 @@ "size": "Mida", "status": "Estat" }, + "progress": "{percent}%", "status": { "pending": "Pendent", "uploaded": "Carregat", @@ -1859,7 +1884,7 @@ "TrackBase": { "button": { "cancel": "Cancelar", - "delete": "Suprimir …", + "delete": "Suprimir", "download": "Descarregar", "edit": "Editar", "embed": "Incrustar", @@ -1884,6 +1909,10 @@ "header": "Incrusta aquesta pista a la teva pàgina web" } }, + "subtitle": { + "with-uploader": "Penjat per {0} el {1}", + "without-uploader": "Penjat a {0}" + }, "title": "Pista" }, "TrackDetail": { @@ -1913,7 +1942,8 @@ }, "track": { "bitrate": { - "label": "Taxa de bits" + "label": "Taxa de bits", + "value": "{bitrate}/s" }, "codec": "Codec", "downloads": "Descarregar", @@ -1975,6 +2005,7 @@ "Filter": { "cancelButton": "Cancelar", "excludeLabel": "Excloure", + "matchingTracks": "0 pistes que coincideixen amb el filtre | {n} filtre de coincidència de pistes | {n} pistes que coincideixen amb el filtre", "matchingTracksModalHeader": "Pistes coincidents amb el filtre", "removeButton": "Retirar" } @@ -2448,7 +2479,7 @@ "modal": { "delete": { "content": { - "warning": "Aquesta acció és irreversible." + "warning": "Aquesta acció és irreversible" }, "header": "Suprimir la regla de moderació?" } @@ -2459,7 +2490,7 @@ "rejectMedia": "No descarregueu cap fitxer multimèdia (àudio, portada, avatar del compte, …) des d'aquest compte o domini. Això també eliminarà el contingut existent.", "silenceActivity": "Amagar el contingut del compte o domini, excepte pels seguidors.", "silenceNotifications": "Eviteu que el compte o el domini desencadenin notificacions, llevat dels seguidors.", - "summary": "Explica perquè apliques aquesta regla. En funció de la configuració de la vostra instància, això us ajudarà a recordar per què heu actuat així en aquest compte o aquest domini i que es pot mostrar públicament per ajudar als usuaris a entendre quines són les normes de moderació." + "summary": "Explica perquè apliques aquesta regla. En funció de la configuració de la vostra instància, això us ajudarà a recordar per què heu actuat així en aquest compte o aquest domini i que es pot mostrar públicament per ajudar als usuaris a entendre quines són les normes de moderació." } }, "InstancePolicyModal": { @@ -2581,6 +2612,7 @@ "internalNotes": "Notes internes", "pending": "Pendent", "refused": "Rebutjat", + "resolutionDate": "Data de resolució", "status": "Estat" } } @@ -2630,7 +2662,7 @@ "label": "Ordenar" }, "pagination": { - "results": "Esperant el resultat … | Esperant el resultat …" + "results": "Es mostren zero resultats | Es mostra un resultat | Es mostren els resultats del {start} al {end} del {total}" }, "placeholder": { "search": "Cercar per nom d'usuari, correu electrònic, codi, …" @@ -2662,7 +2694,7 @@ "label": "Ordenar" }, "pagination": { - "results": "Esperant el resultat … | Esperant el resultat …" + "results": "Es mostren zero resultats | Es mostra un resultat | Es mostren els resultats del {start} al {end} del {total}" }, "permission": { "library": "Biblioteca", @@ -2740,7 +2772,10 @@ "email": "Utilitzarem aquesta adreça de correu electrònic per si hem de contactar amb vosaltres sobre aquest informe.", "forwardToDomain": "Reenvia una copa anònima del teu informe al servidor que allotja aquest element.", "message": "Utilitzeu aquest camp per proporcionar un context addicional al moderador que gestionarà l'informe.", - "modal": "Utilitzeu aquest formulari per enviar un informe al nostre equip de moderació." + "modal": "Utilitzeu aquest formulari per enviar un informe al nostre equip de moderació" + }, + "error": { + "nodeinfoFetch": "No es pot obtenir la informació del node: {error}" }, "header": { "disabled": "Els informes anònims estan deshabilitats, si us plau inicia sessió per a enviar l'informe.", @@ -2888,8 +2923,14 @@ }, "radios": { "Button": { + "startArtistsRadio": "Inicia les artistes de ràdio", + "startPlaylistsRadio": "Inicia les llistes de reproducció de ràdio", "startRadio": "Reprodueix la pista", - "stopRadio": "Parar la ràdio" + "startTagsRadio": "Inicia les etiquetes de ràdio", + "stopArtistsRadio": "Atura les artistes de ràdio", + "stopPlaylistsRadio": "Atura les llistes de reproducció de ràdio", + "stopRadio": "Parar la ràdio", + "stopTagsRadio": "Atura les etiquetes de ràdio" }, "Card": { "button": { @@ -2979,12 +3020,13 @@ "label": "Categoria" }, "summary": { - "label": "Bio" + "label": "Biografia" } }, "filters": { "accessedDate": "Data d'accés", "albumTitle": "Nom de l'àlbum", + "appliedDate": "Data aplicada", "artistName": "Nom de l'artista", "bitrate": "Taxa de bits", "creationDate": "Data de creació", @@ -2994,6 +3036,7 @@ "expirationDate": "Data de caducitat", "firstSeen": "Data de descoberta", "followers": "Seguidors", + "handledDate": "Data tractada", "itemsCount": "Elements", "lastActivity": "Última activitat", "lastSeen": "Data de la darrera visita", @@ -3013,6 +3056,7 @@ "label": "Modificacions" }, "favorites": { + "description": "Accés als preferits", "label": "Preferides" }, "filters": { @@ -3052,6 +3096,7 @@ "label": "Informes" }, "security": { + "description": "Accés a la configuració de seguretat, com ara contrasenya i autorització", "label": "Seguretat" } } @@ -3116,7 +3161,7 @@ "useReportConfigs": { "account": { "label": "Compte", - "summary": "Bio" + "summary": "Biografia" }, "album": { "label": "Àlbum", @@ -3161,10 +3206,13 @@ } }, "useErrorHandler": { + "errorReportMessage": "Per ajudar-nos a entendre per què va passar, adjunteu una descripció detallada del que vau fer que va provocar l'error.", "errorReportTitle": "S'ha produit un error inesperat.", + "leaveFeedback": "Deixa un comentari", "unexpectedError": "S'ha produit un error inesperat." }, "useThemeList": { + "browserDefault": "Navegador predeterminat", "darkTheme": "Fosc", "lightTheme": "Clar" } @@ -3176,7 +3224,10 @@ }, "sentry": { "allow": "Permetre", - "deny": "Denegar" + "deny": "Denegar", + "funkwhaleInstance": "La instància oficial de Glitchtip de Funkwhale", + "message": "Les traces de la pila es compartiran amb { 0 } per ajudar-nos a entendre com i quan es produeixen els errors.", + "title": "Per millorar la qualitat dels nostres serveis, ens agradaria recopilar informació sobre errors durant la sessió." }, "serviceWorker": { "actions": { @@ -3193,7 +3244,7 @@ "submit": "Entesos!" }, "empty": { - "notifications": "No hi ha notificacions." + "notifications": "No hi ha notificacions per mostrar" }, "header": { "funkwhaleSupport": "T'agrada Funkwhale?", @@ -3638,7 +3689,8 @@ }, "audioContent": { "bitrate": { - "label": "Taxa de bits" + "label": "Taxa de bits", + "value": "{bitrate}/s" }, "cachedSize": "Mida de la memòria cau", "duration": "Durada", @@ -3657,7 +3709,7 @@ "addPolicy": "Afegir una nova política de moderació" }, "description": { - "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat." + "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat" }, "header": { "accountData": "Dades del compte", @@ -3745,7 +3797,7 @@ "removeFromAllowList": "Eliminar de la llista d'autoritzacions" }, "description": { - "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat." + "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat" }, "header": { "activePolicy": "Aquest domini està subjecta a normes de moderació específiques", @@ -3790,7 +3842,8 @@ "value": "Error obtenint informació del node" }, "software": { - "label": "Programari" + "label": "Programari", + "value": "{name} ({version})" }, "totalUsers": "Usuaris totals" } @@ -3866,7 +3919,7 @@ "label": "Ordenar" }, "placeholder": { - "search": "Cercar per nom d'usuari…" + "search": "Cercar per nom d'usuari" }, "title": "Peticions de l'usuari" } @@ -3887,7 +3940,7 @@ "auth": { "Callback": { "header": { - "loggingIn": "Carregant les biblioteques …" + "loggingIn": "Iniciant sessió…" } }, "EmailConfirm": { @@ -3903,7 +3956,7 @@ "login": "Iniciar la sessió" }, "message": { - "success": "Ara podeu utilitzar el servei sense limitacions." + "success": "Ara podeu utilitzar el servei sense limitacions" }, "title": "Confirma el teu correu electrònic" }, @@ -3988,7 +4041,7 @@ "header": { "channels": "Canals", "libraries": "Biblioteques de l'usuari", - "sharedLibraries": "Aquest usuari ha compartit les biblioteques que segueix." + "sharedLibraries": "Aquest usuari ha compartit les següents biblioteques" }, "link": { "addNew": "Afegeix nou" @@ -4092,7 +4145,7 @@ "processing": "Funkwhale està processant les pujades i es publicaran ben aviat." }, "meta": { - "progress": "Càrregues processades:" + "progress": "Càrregues processades: {finished}/{total}" } }, "SubscriptionsList": { @@ -4224,7 +4277,7 @@ "update": "Actualitzar la biblioteca" }, "description": { - "library": "Les biblioteques t'ajuden a organitzar i compartir la teva col·lecció de música. Pots pujar-la a Funkwahale i compartir-la amb els teus amics i familiars.", + "library": "Les biblioteques t'ajuden a organitzar i compartir la teva col·lecció de música. Pots pujar-la a Funkwahale i compartir-la amb els teus amics i familiars.", "visibility": "Pots compartir la teva biblioteca amb altres persones, independentment de la seva visibilitat." }, "header": { @@ -4278,6 +4331,7 @@ "currentUsage": "{ current } usats del { max } permesos", "errored": "Arxius erronis", "pending": "Fitxers pendents", + "percentUsed": "{progress}%", "skipped": "Arxius ignorats" }, "link": { @@ -4326,10 +4380,10 @@ "scanPending": "Anàlisi pendent", "scanProgress": "Analitzant … ({ progress }%)", "scanSuccess": "Anàlisis realitzat", - "sharingLink": "Compartir enllaç" + "sharingLink": "Compartint enllaç" }, "link": { - "scan": "Analitzar ara", + "scan": "Analitzar ara · ", "scanDetails": "Detalls" }, "message": { @@ -4337,8 +4391,8 @@ "scanSkipped": "L’anàlisi s’ha omès (l’anàlisi anterior és massa recent)" }, "meta": { - "failedTracks": "Pistes fallides:", - "lastUpdate": "Última actualització:", + "failedTracks": "Pistes fallides: {tracks}", + "lastUpdate": "Última actualització: · ", "tracks": "{ n } pista | { n } pistes" }, "modal": { @@ -4447,7 +4501,7 @@ "instance": "Restringit", "private": "Privat", "public": "Públic", - "sharingLink": "Compartir enllaç" + "sharingLink": "Compartint enllaç" }, "link": { "albums": "Àlbums", @@ -4544,6 +4598,7 @@ "noTracks": "Encara no s'ha afegit cap pista a aquesta ràdio" }, "header": { + "radio": "Ràdio que conté {tracks} cançons, per ", "tracks": "Pistes" }, "modal": { diff --git a/front/src/locales/cs.json b/front/src/locales/cs.json index cf647dbf4..7e4a6bcb2 100644 --- a/front/src/locales/cs.json +++ b/front/src/locales/cs.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Načítání..." + "loading": "Načítání…" }, "components": { "About": { @@ -22,7 +22,7 @@ "closedRegistrations": "Registrace na tomto podu jsou uzavřené. Můžete se zaregistrovat na jiném skrz odkaz níže." }, "link": { - "findOtherPod": "Hledat další pod", + "findOtherPod": "Najít jiný pod", "learnMore": "Dozvědět se více" }, "message": { @@ -113,7 +113,7 @@ "registrationsClosed": "Registrace na tomto podu jsou uzavřené. Můžete se zaregistrovat na jiném skrz odkaz níže." }, "link": { - "findOtherPod": "Hledat další pody", + "findOtherPod": "Najít jiný pod", "funkwhale": "Navštívit funkwhale.audio", "learnMore": "Dozvědět se více", "mobileApps": { @@ -172,7 +172,7 @@ "next": "Další skladba", "pause": "Pozastavit", "play": "Hrát", - "populatingRadio": "Načítání skladby rádia...", + "populatingRadio": "Načítání skladby rádia…", "previous": "Předchozí skladba", "queue": "Fronta", "remove": "Odstranit", @@ -1958,7 +1958,7 @@ "suggest": "Navrhnout úpravu této skladby" }, "message": { - "remote": " Tento objekt je spravován jiným serverem, nemůžete ho upravovat." + "remote": "Tento objekt je spravován jiným serverem, nemůžete ho upravovat." } }, "radios": { diff --git a/front/src/locales/de.json b/front/src/locales/de.json index 119fff877..98ee1ae79 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -30,7 +30,7 @@ "loggedIn": "Du bist bereits eingeloggt!" }, "placeholder": { - "noDescription": "Keine Beschreibung verfügbar." + "noDescription": "Keine Beschreibung verfügbar" }, "stat": { "activeUsers": "{ n } aktive Person | { n } aktive Personen", @@ -74,9 +74,9 @@ }, "notApplicable": "k. A.", "placeholder": { - "noDescription": "Keine Beschreibung verfügbar.", - "noRules": "Keine Regeln verfügbar.", - "noTerms": "Keine Bedingungen verfügbar." + "noDescription": "Keine Beschreibung verfügbar", + "noRules": "Keine Regeln verfügbar", + "noTerms": "Keine Bedingungen verfügbar" }, "stat": { "activeUsers": "Eine aktive Person | { n } aktive Personen", @@ -121,7 +121,7 @@ "label": "Mobile Apps" }, "publicContent": { - "description": "Höre öffentliche Alben und Wiedergabelisten an, die auf diesem Pod freigegeben werden", + "description": "Höre öffentliche Alben und Wiedergabelisten an, die auf diesem Pod freigegeben werden.", "label": "Öffentliche Inhalte durchsuchen" }, "rules": "Serverregeln", @@ -132,7 +132,7 @@ "viewMore": "Mehr anzeigen…" }, "placeholder": { - "noDescription": "Keine Beschreibung verfügbar." + "noDescription": "Keine Beschreibung verfügbar" }, "stat": { "activeUsers": "{ n } aktive Person | { n } aktive Personen", @@ -332,7 +332,7 @@ "save": "Speichern" }, "header": { - "error": "Fehler beim Speichern der Einstellungen", + "error": "Fehler beim Speichern der Einstellungen.", "image": "Aktuelles Bild" }, "message": { @@ -392,7 +392,7 @@ }, "ChannelForm": { "header": { - "error": "Fehler beim Speichern des Kanals" + "error": "Fehler beim Speichern des Kanals." }, "help": { "discography": "Veröffentliche die Musik, die du machst, als schöne Diskographie von Alben und Singles.", @@ -476,7 +476,7 @@ }, "PlayButton": { "button": { - "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen…", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen", "addToQueue": "Zur Warteschlange hinzufügen", "discretePlay": "Abspielen", "episodeDetails": "Details zu dieser Folge", @@ -615,7 +615,7 @@ "Modal": { "button": { "addToFavorites": "Zu den Favoriten hinzufügen", - "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen…", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen", "addToQueue": "Zur Warteschlange hinzufügen", "albumDetails": "Album ansehen", "artistDetails": "Künstler·innen ansehen", @@ -639,7 +639,7 @@ "Modal": { "button": { "addToFavorites": "Zu den Favoriten hinzufügen", - "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen…", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen", "addToQueue": "Zur Warteschlange hinzufügen", "albumDetails": "Album ansehen", "artistDetails": "Künstler·innen ansehen", @@ -746,7 +746,7 @@ "writeOnly": "Nur schreiben" }, "help": { - "copyCode": "Dir wird ein Code angezeigt, der du in die Anwendung einfügen musst.", + "copyCode": "Dir wird ein Code angezeigt, der du in die Anwendung einfügen musst", "pasteCode": "Kopiere den folgenden Code in die Anwendung:", "redirect": "Du wirst zu { 0 } weitergeleitet" }, @@ -771,7 +771,7 @@ "username": "Benutzername oder E-Mail-Adresse" }, "link": { - "createAccount": "Konto erstellen", + "createAccount": "Erstelle ein Konto", "resetPassword": "Kennwort zurücksetzen" }, "message": { @@ -856,7 +856,7 @@ "deleteAccount": "Mein Konto löschen", "emailFailure": "Deine E-Mail-Adresse kann nicht geändert werden", "hiddenArtists": "Verborgene Künstler·innen", - "noApps": "Du hast keine aktiven Moderationsregeln für dieses Konto.", + "noApps": "Aktuell ist keine Anwendung mit deinem Konto verbunden.", "noPersonalApps": "Du hast bisher keine Anwendung registriert.", "passwordFailure": "Dein Kennwort kann nicht geändert werden", "plugins": "Plugins", @@ -882,14 +882,14 @@ }, "message": { "confirmDelete": "Dein Löschungsantrag wurde eingereicht. Dein Konto und deine Inhalte werden in Kürze gelöscht", - "currentEmail": "Deine aktuelle E-Mail-Adresse lautet { email }." + "currentEmail": "Deine aktuelle E-Mail-Adresse lautet {email}" }, "modal": { "changePassword": { "content": { "logout": "Du wirst von dieser Sitzung abgemeldet und du musst dich mit deinem neuen Kennwort anmelden", "subsonic": "Dein Subsonic-Kennwort wird mit einem neuen zufälligen Kennwort ersetzt. Du wirst auf allen aktuell verbundenen Geräten abgemeldet, die noch das alte Kennwort nutzen", - "warning": "Wenn du dein Kennwort änderst, hat dies folgende Auswirkungen:" + "warning": "Wenn du dein Kennwort änderst, hat dies folgende Auswirkungen" }, "header": "Möchtest du dein Kennwort ändern?" }, @@ -1098,7 +1098,7 @@ "label": { "description": "Beschreibung", "image": "Titelbild", - "position": "Seitennummerierung", + "position": "Position", "tags": "Schlagwörter", "title": "Titel" } @@ -1121,7 +1121,7 @@ }, "meta": { "files": "{ n } Datei | { n } Dateien", - "quota": "Verbleibender Speicherplatz:" + "quota": "Verbleibender Speicherplatz: {space}" } } }, @@ -1129,7 +1129,7 @@ "ActionTable": { "button": { "allSelected": "Einziges Element ausgewählt | Alle { count } Elemente ausgewählt", - "go": "Los!", + "go": "Los", "launch": "Starten", "refresh": "Tabelleninhalt aktualisieren", "select": "Auswählen", @@ -1187,10 +1187,10 @@ "write": "Schreiben" }, "empty": { - "noContent": "Es gibt nichts zum vorzeigen." + "noContent": "Es ist keine Vorschau verfügbar" }, "help": { - "markdown": "Markdown-Syntax wird unterstützt." + "markdown": "Markdown-Syntax wird unterstützt" }, "placeholder": { "input": "Schreibe hier ein paar Worte…" @@ -1246,7 +1246,7 @@ }, "LoginModal": { "description": { - "noAccess": "Du bist nicht zugriffsberechtigt!" + "noAccess": "Du hast keinen Zugriff" }, "header": { "unauthenticated": "Unauthorisiert" @@ -1451,7 +1451,7 @@ "AlbumDropdown": { "button": { "cancel": "Abbrechen", - "delete": "Löschen…", + "delete": "Löschen", "edit": "Bearbeiten", "embed": "Einbetten", "more": "Mehr…" @@ -1535,7 +1535,7 @@ }, "meta": { "albums": "{ n } Alben | { n } Alben", - "tracks": "{ n } Titel in | { n } Titel in " + "tracks": "0 Titel in | {count} Titel in | {count} Titel in" }, "modal": { "embed": { @@ -1654,7 +1654,7 @@ "suggest": "Empfehlung abschicken" }, "empty": { - "suggestEdit": "Schlage eine Änderung mit dem untenstehenden Formular vor." + "suggestEdit": "Schlage eine Änderung mit dem untenstehenden Formular vor" }, "header": { "failure": "Fehler beim Speichern der Änderungen", @@ -1679,7 +1679,7 @@ "retry": "Fehlgeschlagene Uploads wiederholen" }, "description": { - "import": "Import-Ergebnisse:", + "import": "Import Status", "previousImport": "Ergebnisse des letzten Imports:" }, "empty": { @@ -1884,7 +1884,7 @@ "TrackBase": { "button": { "cancel": "Abbrechen", - "delete": "Löschen…", + "delete": "Löschen", "download": "Herunterladen", "edit": "Bearbeiten", "embed": "Einbetten", @@ -2479,7 +2479,7 @@ "modal": { "delete": { "content": { - "warning": "Dieser Vorgang ist unwiderruflich." + "warning": "Diese Aktion kann nicht rückgängig gemacht werden" }, "header": "Diese Moderationsregel löschen?" } @@ -2772,7 +2772,7 @@ "email": "Wir werden diese E-Mail-Adresse verwenden, wenn wir Dich bezüglich Deines Berichts kontaktieren müssen.", "forwardToDomain": "Leite eine anonymisierte Kopie deines Berichts an den Server weiter, auf dem sich dieses Element befindet.", "message": "Verwende dieses Feld, um dem Moderationsteam zusätzlichen Kontext bereitzustellen.", - "modal": "Mithilfe dieses Formulars kannst du einen Bericht an unser Moderationsteam senden." + "modal": "Nutze dieses Formular für eine Meldung an das Moderationsteam" }, "error": { "nodeinfoFetch": "Informationen über diese Instanz können nicht abgerufen werden: {error}" @@ -3026,6 +3026,7 @@ "filters": { "accessedDate": "Zugriffsdatum", "albumTitle": "Albumname", + "appliedDate": "Änderungsdatum", "artistName": "Name der Künstler·in", "bitrate": "Bitrate", "creationDate": "Erstellungsdatum", @@ -3034,7 +3035,8 @@ "duration": "Dauer", "expirationDate": "Ablaufdatum", "firstSeen": "Erstmals gesehen", - "followers": "Abonnenten", + "followers": "Abonnent·innen", + "handledDate": "Bearbeitungsdatum", "itemsCount": "Elemente", "lastActivity": "Letzte Aktivität", "lastSeen": "Zuletzt gesehen am", @@ -3054,6 +3056,7 @@ "label": "Bearbeitungen" }, "favorites": { + "description": "Zugang zu den Favoriten", "label": "Favoriten" }, "filters": { @@ -3120,12 +3123,13 @@ "track": { "copyright": "Urheberrecht", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" } }, "useReport": { "account": { + "label": "Melde {'@'}{username}", "typeLabel": "Konto" }, "album": { @@ -3134,7 +3138,8 @@ }, "artist": { "label": "Diese kunstschaffende Person melden…", - "typeLabel": "Künstler·in" + "typeLabel": "Künstler·in", + "unknownLabel": "Unbekannte*r Künstler*in" }, "channel": { "label": "Diesen Kanal melden…", @@ -3192,7 +3197,7 @@ "copyright": "Urheberrecht", "label": "Titel", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" }, "visibility": { @@ -3201,9 +3206,13 @@ } }, "useErrorHandler": { + "errorReportMessage": "Damit wir die Ursache des Fehlers besser verstehen können, füge bitte eine detaillierte Beschreibung des Vorgangs bei, der den Fehler ausgelöst hat.", + "errorReportTitle": "Ein unerwarteter Fehler ist aufgetreten.", + "leaveFeedback": "Feedback hinterlassen", "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten." }, "useThemeList": { + "browserDefault": "Browser-Standard", "darkTheme": "Dunkel", "lightTheme": "Hell" } @@ -3213,6 +3222,13 @@ "rateLimitDelay": "Du hast zu viele Anfragen gesendet und bist derzeit eingeschränkt. Bitte versuche es in { delay } noch einmal", "rateLimitLater": "Du hast zu viele Anfragen gesendet und bist derzeit eingeschränkt. Bitte versuche es später noch einmal" }, + "sentry": { + "allow": "Erlauben", + "deny": "Verweigern", + "funkwhaleInstance": "Funkwhale's offizieller Glitchtip-Server", + "message": "Die Fehlerberichte werden an { 0 } weitergegeben, damit wir besser verstehen, wie und wann die Fehler auftreten.", + "title": "Um die Qualität unseres Service zu verbessern, würden wir gerne Informationen über Abstürze während deiner Sitzung sammeln." + }, "serviceWorker": { "actions": { "later": "Später", @@ -3228,7 +3244,7 @@ "submit": "Verstanden!" }, "empty": { - "notifications": "Keine Benachrichtigungen zum Anzeigen." + "notifications": "Es gibt keine neuen Benachrichtigungen" }, "header": { "funkwhaleSupport": "Magst du Funkwhale?", @@ -3624,7 +3640,7 @@ "description": "Beschreibung", "discNumber": "CD-Nummer", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" }, "trackData": { @@ -3673,7 +3689,8 @@ }, "audioContent": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{Bitrate}/s" }, "cachedSize": "Cache-Größe", "duration": "Dauer", @@ -3692,7 +3709,7 @@ "addPolicy": "Moderationsregel hinzufügen" }, "description": { - "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert." + "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert" }, "header": { "accountData": "Kontoübersicht", @@ -3780,7 +3797,7 @@ "removeFromAllowList": "Aus der Zulassungsliste entfernen" }, "description": { - "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert." + "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert" }, "header": { "activePolicy": "Für diese Domain gelten besondere Moderationsregeln", @@ -3825,7 +3842,8 @@ "value": "Fehler beim Abrufen der Knoten-Information" }, "software": { - "label": "Software" + "label": "Software", + "value": "{name} ({version})" }, "totalUsers": "Gesamtanzahl der Nutzenden" } @@ -3901,7 +3919,7 @@ "label": "Sortieren nach" }, "placeholder": { - "search": "Nach Nutzername suchen…" + "search": "Nach Benutzernamen suchen" }, "title": "Nutzeranfragen" } @@ -3938,7 +3956,7 @@ "login": "Weiter zum Anmelden" }, "message": { - "success": "Du kannst jetzt den Service unbegrenzt nutzen." + "success": "Du kannst jetzt den Service unbegrenzt nutzen" }, "title": "E-Mail-Adresse bestätigen" }, @@ -4127,7 +4145,7 @@ "processing": "Deine Uploads werden von Funkwhale verarbeitet und sehr bald abrufbar sein." }, "meta": { - "progress": "Verarbeitete Uploads:" + "progress": "Verarbeitete Uploads: {finished}/{total}" } }, "SubscriptionsList": { @@ -4313,6 +4331,7 @@ "currentUsage": "{ current } von { max } belegt", "errored": "Fehlgeschlagene Dateien", "pending": "Ausstehende Dateien", + "percentUsed": "{progress}%", "skipped": "Übersprungene Dateien" }, "link": { @@ -4351,6 +4370,10 @@ "pending": "Ausstehende Abonnements-Anfrage", "unfollow": "Abonnement beenden" }, + "error": { + "follow": "Kann entfernter Bibliothek nicht folgen: {error}", + "unfollow": "Entfernte Bibliothek kann nicht entfolgt werden: {error}" + }, "label": { "scanFailure": "Fehler beim Durchsuchen", "scanPartialSuccess": "Scan mit Fehlern abgeschlossen", @@ -4568,12 +4591,14 @@ "Detail": { "button": { "confirm": "Radio löschen", + "delete": "Löschen", "edit": "Bearbeiten…" }, "empty": { "noTracks": "Diesem Radio wurden noch keine Titel hinzugefügt" }, "header": { + "radio": "Radio mit {tracks} Titeln, von ", "tracks": "Titel" }, "modal": { diff --git a/front/src/locales/el.json b/front/src/locales/el.json index 1c4d5f320..f7cd70abf 100644 --- a/front/src/locales/el.json +++ b/front/src/locales/el.json @@ -1,343 +1,328 @@ { + "App": { + "loading": "Φορτώνει..." + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "Το { app } ζητάει πρόσβαση στον Funkwhale λογαριασμό σας", - "authorize": "Εξουσιοδότηση εφαρμογής τρίτου", - "allScopes": "Πλήρης πρόσβαση" - }, - "title": "επιτρέψτε την εφαρμογή", - "button": { - "authorize": "Εξουσιοδότηση { app }" - }, - "help": { - "pasteCode": "Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα στην εφαρμογή:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Απενεργοποιημένη πρόσβαση" - }, - "button": { - "confirmDisable": "Απενεργοποίηση πρόσβασης", - "disable": "Απενεργοποίηση πρόσβασης στο Subsonic" - }, - "modal": { - "disableSubsonic": { - "header": "Απενεργοποίηση πρόσβασης στο Subsonic API;" - } - }, - "link": { - "apps": "Ανακαλύψτε πως μπορείτε να χρησιμοποιήσετε το Funkwhale από άλλες εφαρμογές" - }, - "header": { - "error": "Σφάλμα" - }, - "description": { - "subsonic": { - "paragraph1": "Το Funkwhale είναι συμβατό με άλλα προγράμματα αναπαραγωγής μουσικής που υποστηρίζουν το Subsonic API.", - "paragraph3": "Ωστόσο, η πρόσβαση στο Funkwhale από αυτούς τους clients απαιτεί έναν ξεχωριστό κωδικό τον οποίο μπορείτε να ορίσετε παρακάτω." - } - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Access token", - "appId": "Αναγνωριστικό Εφαρμογής", - "appSecret": "Μυστικό εφαρμογής" - }, - "header": { - "appDetails": "Λεπτομέρειες εφαρμογής", - "editApp": "Επεξεργασία εφαρμογής" - }, - "help": { - "appDetails": "Το αναγνωριστικό εφαρμογής και το μυστικό είναι ευαίσθητες πληροφορίες και πρέπει να τα αντιμετωπίζεται σαν κωδικούς. Μην τα μοιραστείτε με κανέναν." - }, - "link": { - "settings": "Πίσω στις ρυθμίσεις" - }, - "title": "Επεξεργασία εφαρμογής" - }, - "Settings": { - "title": "Ρυθμίσεις Λογαριασμού", - "header": { - "accountSettings": "Ρυθμίσεις λογαριασμού", - "authorizedApps": "Εξουσιοδοτημένες εφαρμογές", - "avatar": "Avatar", - "changeEmail": "Αλλαγή της διεύθυνσης e-mail μου", - "changePassword": "Αλλαγή του κωδικού μου", - "contentFilters": "Φίλτρα περιεχομένου", - "deleteAccount": "Διαγραφή του λογαριασμού μου", - "avatarFailure": "Το avatar σας δε μπορεί να αποθηκευτεί" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Εφαρμογή" - } - }, - "yourApps": { - "header": { - "application": "Εφαρμογή", - "creationDate": "Ημερομηνία δημιουργίας" - } - }, - "artists": { - "header": { - "creationDate": "Ημερομηνία δημιουργίας" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Τρέχων κωδικός" - }, - "button": { - "password": "Αλλαγή κωδικού", - "delete": "Διαγραφή", - "deleteAccountConfirm": "Διαγραφή του λογαριασμού μου", - "deleteAccount": "Διαγραφή του λογαριασμού μου…", - "disableSubsonic": "Απενεργοποίηση πρόσβασης", - "edit": "Επεξεργασία" - }, - "description": { - "changeEmail": "Αλλαγή της διεύθυνσης e-mail του λογαριασμού σας. Θα σας σταλθεί e-mail επιβεβαίωσης στην καινούρια διεύθυνση.", - "changePassword": { - "paragraph1": "Εάν αλλάξετε τον κωδικό σας θα αλλάξει και ο κωδικός του Subsonic API αν έχετε έναν." - }, - "contentFilters": "Τα φίλτρα περιεχομένου βοηθάνε στο να κρύβουν το περιεχόμενο το οποίο δεν θέλετε να βλέπετε στην υπηρεσία." - }, - "modal": { - "changePassword": { - "header": "Αλλαγή κωδικού;", - "content": { - "warning": "Η αλλαγή του κωδικού σας θα έχει τις εξής συνέπειες:" - } - }, - "deleteAccount": { - "header": "Θέλετε να διαγράψετε τον λογαριασμό σας;" - } - }, - "help": { - "noApps": "Εάν εξουσιοδοτήσετε τρίτες εφαρμογές να έχουν πρόσβαση στα δεδομένα σας, αυτές οι εφαρμογές θα είναι καταγεγραμμένες εδώ." - }, - "message": { - "currentEmail": "Η τρέχουσα διεύθυνση e-mail σας είναι { email }.", - "confirmDelete": "Το αίτημα διαγραφής σας υποβλήθηκε, ο λογαριαμός σας και το περιεχόμενό του θα διαγραφούν σύντομα." - } - }, - "Logout": { - "header": { - "confirm": "Είστε σίγουρος πως θέλετε να αποσυνδεθείτε;" - } - }, - "ApplicationNew": { - "link": { - "settings": "Πίσω στις ρυθμίσεις" - }, - "title": "Δημιουργία νέας εφαρμογής" - }, - "LoginForm": { - "link": { - "createAccount": "Δημιουργία λογαριασμού" - }, - "placeholder": { - "username": "Εισάγετε το όνομα χρήστη ή τη διεύθυνση e-mail σας" - }, - "help": { - "approvalRequired": "Εάν γραφτήκατε πρόσφατα, μπορεί να χρειαστεί να περιμένετε μέχρι οι διαχειριστές να ελέγξουν το λογαριασμό σας, ή να επαληθεύσουν τη διεύθυνση e-mail σας." - } - }, - "ApplicationForm": { - "button": { - "create": "Δημιουργία εφαρμογής" - } - }, - "SignupForm": { - "button": { - "create": "Δημιουργία του λογαριασμού σας" - }, - "label": { - "email": "Διεύθυνση e-mail" - }, - "placeholder": { - "username": "Εισάγετε το όνομα χρήστη σας" - } - }, - "Plugin": { - "link": { - "documentation": "Τεχνικά Έγγραφα" - }, - "label": { - "pluginEnabled": "Ενεργό" - }, - "header": { - "failure": "Σφάλμα κατά την αποθήκευση πρόσθετου" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } ενεργός χρήστης | { n } ενεργοί χρήστες", - "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής" - }, - "title": "Σχετικά με", "header": { "aboutPod": "Σχετικά με αυτό το pod", + "findApp": "Βρείτε άλλο pod", + "funkwhale": "Μια κοινωνική πλατφόρμα για να απολαμβάνετε και να μοιράζεστε μουσική", "publicContent": "Περιήγηση δημόσιων δεδομένων", - "findApp": "Βρείτε άλλο pod" + "signup": "Εγγραφή" + }, + "help": { + "closedRegistrations": "Οι εγγραφές έχουν κλείσει σε αυτό το pod. Μπορείτε να εγγραφείτε σε άλλο pod χρησιμοποιώντας τον παρακάτω σύνδεσμο." }, "link": { - "findOtherPod": "Βρείτε άλλο pod" - } + "findOtherPod": "Βρείτε άλλο pod", + "learnMore": "Μάθετε περισσότερα" + }, + "message": { + "greeting": "Γειά χαρά {username}", + "loggedIn": "Έχεις ήδη συνδεθεί!" + }, + "placeholder": { + "noDescription": "Δεν υπάρχει διαθέσιμη περιγραφή" + }, + "stat": { + "activeUsers": "Κανένας ενεργός χρήστης | { n } ενεργός χρήστης | { n } ενεργοί χρήστες", + "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής" + }, + "title": "Σχετικά" + }, + "AboutPod": { + "feature": { + "allowList": "Λίστα Επιτρεπομένων", + "anonymousAccess": "Ανώνυμη πρόσβαση", + "quota": "Όριο ανεβάσματος", + "registrations": "Εγγραφές", + "status": { + "closed": "Κλειστό", + "disabled": "Ανενεργό", + "enabled": "Ενεργό", + "open": "Ανοικτό" + }, + "version": "Έκδοση Funkwhale" + }, + "header": { + "about": "Σχετικά με αυτό το pod", + "contact": "Επικοινωνία", + "features": "Δυνατότητες", + "rules": "Κανόνες", + "statistics": "Στατιστικά", + "terms": "Όροι και πολιτική απορρήτου" + }, + "link": { + "about": "Σχετικά με αυτό το pod", + "features": "Δυνατότητες", + "introduction": "Εισαγωγή", + "rules": "Κανόνες", + "statistics": "Στατιστικά", + "terms": "Όροι και πολιτική απορρήτου" + }, + "message": { + "contact": "Στείλτε μας ένα email: { contactEmail }" + }, + "placeholder": { + "noDescription": "Δεν υπάρχει διαθέσιμη περιγραφή", + "noRules": "Δεν υπάρχουν διαθέσιμοι κανόνες", + "noTerms": "Δεν υπάρχουν διαθέσιμοι όροι" + }, + "stat": { + "activeUsers": "Κανένας ενεργός χρήστης | { n } ενεργός χρήστης | { n } ενεργοί χρήστες", + "albumsCount": "0 άλμπουμ | {n} άλμπουμ | {n} άλμπουμ", + "artistsCount": "0 καλλιτέχνες | {n} καλλιτέχνης | {n} καλλιτέχνες", + "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής", + "listeningsCount": "{ n } ακρόαση | { n } ακροάσεις", + "tracksCount": "0 κομμάτια | {n} κομμάτι | {n} κομμάτια" + }, + "title": "Σχετικά" }, "Home": { + "description": { + "funkwhale": { + "paragraph1": "Αυτό το pod εκτελεί το Funkwhale, ένα έργο βασισμένο στην κοινότητα που σας επιτρέπει να ακούτε και να μοιράζεστε μουσική και ήχο σε ένα αποκεντρωμένο, ανοιχτό δίκτυο.", + "paragraph2": "Το Funkwhale είναι δωρεάν και αναπτύσσεται από μια φιλική κοινότητα από εθελοντές." + }, + "quota": "Οι χρήστες σε αυτό το pod λαμβάνουν επίσης {quota} δωρεάν αποθηκευτικού χώρου για να ανεβάσουν το δικό τους περιεχόμενο!", + "signup": "Εγγραφείτε τώρα για να παρακολουθείτε την αγαπημένη σας μουσική, να δημιουργήσετε λίστες αναπαραγωγής, να ανακαλύψετε νέο περιεχόμενο και πολλά άλλα!" + }, + "header": { + "about": "Σχετικά με αυτό το Funkwhale pod", + "aboutFunkwhale": "Σχετικά με το Funkwhale", + "contact": "Επικοινωνία", + "links": "Χρήσιμοι σύνδεσμοι", + "login": "Σύνδεση", + "newChannels": "Νέα κανάλια", + "signup": "Εγγραφή", + "statistics": "Στατιστικά", + "welcome": "Καλώς ήρθατε στο {podName}!" + }, + "help": { + "registrationsClosed": "Οι εγγραφές έχουν κλείσει σε αυτό το pod. Μπορείτε να εγγραφείτε σε άλλο pod χρησιμοποιώντας τον παρακάτω σύνδεσμο." + }, + "link": { + "findOtherPod": "Βρείτε άλλο pod", + "funkwhale": "Επισκεφθείτε το funkwhale.audio", + "learnMore": "Μάθετε περισσότερα", + "mobileApps": { + "description": "Χρησιμοποιήστε το Funkwhale σε άλλες συσκευές με τις εφαρμογές μας", + "label": "Εφαρμογές για κινητά" + }, + "publicContent": { + "description": "Ακούστε δημόσια άλμπουμ και λίστες αναπαραγωγής που διαμοιράζονται σε αυτό το pod.", + "label": "Περιήγηση δημόσιων δεδομένων" + }, + "rules": "Κανόνες του σέρβερ", + "userGuides": { + "description": "Ανακαλύψτε ότι χρειάζεται να γνωρίζετε για το Funkwhale και τις δυνατότητες του", + "label": "Οδηγοί χρήσης" + }, + "viewMore": "Δείτε περισσότερα…" + }, + "placeholder": { + "noDescription": "Δεν υπάρχει διαθέσιμη περιγραφή" + }, "stat": { "activeUsers": "{ n } ενεργός χρήστης | { n } ενεργοί χρήστες", "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής" }, - "header": { - "aboutFunkwhale": "Σχετικά με το Funkwhale", - "about": "Σχετικά με αυτό το Funkwhale pod", - "contact": "Επικοινωνία" - }, - "link": { - "publicContent": { - "label": "Περιήγηση δημόσιων δεδομένων" - }, - "userGuides": { - "description": "Ανακαλύψτε ότι χρειάζεται να γνωρίζετε για το Funkwhale και τις δυνατότητες του" - }, - "findOtherPod": "Βρείτε άλλο pod" - }, - "description": { - "funkwhale": { - "paragraph2": "Το Funkwhale είναι δωρεάν και αναπτύσσεται από μια φιλική κοινότητα από εθελοντές." - } - }, "title": "Αρχική" }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } επεισόδιο | { n } επεισόδια", - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } + "PageNotFound": { + "header": { + "pageNotFound": "Η σελίδα δεν βρέθηκε!" + }, + "link": { + "home": "Πηγαίνετε στην αρχική σελίδα" + }, + "message": { + "pageNotFound": "Λυπούμαστε, η σελίδα που ζητήσατε δεν υπάρχει:" + }, + "title": "Η σελίδα δεν βρέθηκε" + }, + "Queue": { + "button": { + "clear": "Καθάρισμα", + "close": "Κλείσιμο" + }, + "header": { + "failure": "Το κομμάτι δεν μπορεί να φορτώσει" + }, + "label": { + "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…", + "duration": "Διάρκεια", + "enterFullscreen": "Πλήρης οθόνη", + "exitFullscreen": "Κλείσιμο πλήρους οθόνης", + "favorite": "Αγαπημένο κομμάτι", + "next": "Επόμενο κομμάτι", + "pause": "Παύση", + "play": "Έναρξη", + "previous": "Προηγούμενο κομμάτι", + "remove": "Αφαίρεση", + "selectTrack": "Επιλογή κομματιού", + "showCoverArt": "Προβολή Εξωφύλλου" + }, + "message": { + "automaticPlay": "Το επόμενο κομμάτι θα ξεκινήσει σε μερικά δευτερόλεπτα…", + "radio": "Τα νέα κομμάτια θα προστίθενται εδώ αυτόματα.", + "webglUnsupported": "Το πρόγραμμα περιήγησής σας δεν φαίνεται να υποστηρίζει το WebGL2." + }, + "meta": { + "end": "Τέλος", + "queuePosition": "Κομμάτι {index} από {length}", + "startTime": "00:00", + "unknownAlbum": "Άγνωστο άλμπουμ", + "unknownArtist": "Άγνωστος καλλιτέχνης" + }, + "warning": { + "connectivity": "Μπορεί να έχετε πρόβλημα συνδεσιμότητας." + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Αναζήτηση" + }, + "label": { + "rss": { + "fieldPlaceholder": "https://website.example.com/rss.xml" + } + } + }, + "SetInstanceModal": { + "button": { + "cancel": "Ακύρωση", + "submit": "Υποβολή" + }, + "header": { + "chooseInstance": "Επιλέξτε το instance σας", + "failure": "Δεν είναι δυνατή η σύνδεση στο συγκεκριμένο URL" + } + }, + "ShortcutsModal": { + "button": { + "close": "Κλείσιμο" + }, + "header": { + "modal": "Συντομεύσεις πληκτρολογίου" + }, + "shortcut": { + "audio": { + "clearQueue": "Καθάρισμα ουράς", + "decreaseVolume": "Μείωση έντασης", + "label": "Συντομεύσεις αναπαραγωγής", + "playPrevious": "Προηγούμενο κομμάτι", + "shuffleQueue": "Τυχαία αναπαραγωγή", + "toggleMute": "Σίγαση" + }, + "general": { + "label": "Γενικές συντομεύσεις", + "show": "Εμφάνιση διαθέσιμων συντομεύσεων πληκτρολογίου" + } + } + }, + "Sidebar": { + "header": { + "administration": "Διαχείριση", + "explore": "Ανακάλυψε", + "library": "Βιβλιοθήκη", + "more": "Επιπλέον" + }, + "label": { + "add": "Προσθήκη περιεχομένου", + "administration": "Διαχείριση", + "language": "Αλλαγή γλώσσας" + }, + "link": { + "about": "Σχετικά με αυτό το pod", + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "browse": "Περιήγηση", + "channels": "Κανάλια", + "createAccount": "Δημιουργία λογαριασμού", + "favorites": "Αγαπημένα", + "home": "Αρχική", + "library": "Βιβλιοθήκη", + "login": "Σύνδεση", + "podcasts": "Podcasts", + "radios": "Ράδιο", + "search": "Αναζήτηση", + "settings": "Ρυθμίσεις", + "switchInstance": "Αλλαγή pod", + "users": "Χρήστες" + } + }, + "admin": { + "SettingsGroup": { + "header": { + "error": "Σφάλμα κατά την αποθήκευση ρυθμίσεων", + "image": "Τρέχων εικόνα" } }, + "SignupFormBuilder": { + "button": { + "add": "Προσθήκη πεδίου", + "edit": "Επεξεργασία φόρμας" + }, + "help": { + "additionalFields": "Επιπλέον πεδία που θα εμφανιστούν στην φόρμα. Εμφανίζονται μόνο αν είναι ενεργοποιημένη η χειροκίνητη αποδοχή εγγραφών.", + "helpText": "Προαιρετικό κείμενο που θα εμφανίζεται στην αρχή της φόρμας εγγραφής." + }, + "label": { + "additionalField": "Επιπλέον πεδίο", + "additionalFields": "Επιπλέον πεδία", + "delete": "Διαγραφή" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Ενέργειες", + "type": "Τύπος πεδίου" + }, + "required": { + "false": "Λάθος" + } + } + } + } + }, + "audio": { "ChannelCard": { "meta": { "episodes": "{ n } επεισόδιο | { n } επεισόδια", "tracks": "{ n } κομμάτι | { n } κομμάτια" } }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } επεισόδιο | { n } επεισόδια" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } - } - }, - "Player": { - "meta": { - "position": "{ index } απο { length }" - }, - "header": { - "player": "Αναπαραγωγή ήχου και χειρισμός" - }, - "label": { - "clearQueue": "Καθάρισμα της ουράς σας", - "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Προσθήκη στην τρέχουσα ουρά", - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", - "episodeDetails": "Επεισόδια", - "hideArtist": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Προσθήκη στα αγαπημένα", - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", - "addToQueue": "Προσθήκη στην ουρά", - "episodeDetails": "Επεισόδια", - "startRadio": "Διαγραφή ράδιο", - "artistDetails": "Καλλιτέχνης Άλμπουμ", - "channelDetails": "Κανάλι καλλιτέχνη" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Προσθήκη στα αγαπημένα", - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", - "addToQueue": "Προσθήκη στην ουρά", - "episodeDetails": "Επεισόδια", - "startRadio": "Διαγραφή ράδιο", - "artistDetails": "Καλλιτέχνης Άλμπουμ", - "channelDetails": "Κανάλι καλλιτέχνη" - } - }, - "Table": { - "table": { - "header": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης" - } - } - } - }, - "VolumeControl": { - "label": { - "slider": "Ρύθμιση έντασης" - } - }, - "SearchBar": { - "label": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης" - } - }, - "Search": { - "header": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "placeholder": { - "search": "Καλλιτέχνης, άλμπουμ, κομμάτι…" + "ChannelEntries": { + "help": { + "subscribe": "Εγγραφείτε σε αυτό το κανάλι για να δείτε το περιεχόμενό του." } }, "ChannelForm": { + "header": { + "error": "Σφάλμα κατά την αποθήκευση του καναλιού" + }, "label": { - "discography": "Δισκογραφία καλλιτέχνη", "category": "Κατηγορία", + "description": "Περιγραφή", + "discography": "Δισκογραφία καλλιτέχνη", "image": "Φωτογραφία Καναλιού", - "description": "Περιγραφή" + "language": "Γλώσσα", + "name": "Όνομα", + "podcast": "Podcasts", + "subcategory": "Υποκατηγορία" }, "placeholder": { "name": "φοβερό όνομα καναλιού", "username": "φοβεροονομακαναλιου" - }, - "header": { - "error": "Σφάλμα κατά την αποθήκευση του καναλιού" } }, - "LibraryFollowButton": { - "button": { - "cancel": "Ακύρωση αιτήματος ακόλουθου", - "follow": "Ακολούθησε" + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } επεισόδιο | { n } επεισόδια" } }, "EmbedWizard": { @@ -350,234 +335,509 @@ "label": { "embed": "Ενσωμάτωση κώδικα" } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Ακύρωση αιτήματος ακόλουθου", + "follow": "Ακολούθησε" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", + "addToQueue": "Προσθήκη στην τρέχουσα ουρά", + "discretePlay": "Έναρξη", + "episodeDetails": "Επεισόδια", + "hideArtist": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη", + "report": "Αναφορά…", + "trackDetails": "Λεπτομέρειες κομματιού" + } + }, + "Player": { + "header": { + "player": "Αναπαραγωγή ήχου και χειρισμός" + }, + "label": { + "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…", + "clearQueue": "Καθάρισμα της ουράς σας", + "mute": "Σίγαση", + "pause": "Παύση", + "unmute": "Αναίρεση σίγασης" + }, + "meta": { + "position": "{ index } απο { length }", + "unknownAlbum": "Άγνωστο άλμπουμ", + "unknownArtist": "Άγνωστος καλλιτέχνης" + } + }, + "Search": { + "header": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "search": "Αναζήτηση μουσικής" + }, + "placeholder": { + "search": "Καλλιτέχνης, άλμπουμ, κομμάτι…" + } + }, + "SearchBar": { + "label": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "category": { + "podcasts": "Podcasts" + }, + "track": "Κομμάτι" + }, + "link": { + "fediverse": "Αναζήτηση στο fediverse", + "more": "Περισσότερα αποτελέσματα 🡒" + } + }, + "VolumeControl": { + "button": { + "mute": "Σίγαση", + "unmute": "Αναίρεση σίγασης" + }, + "label": { + "slider": "Ρύθμιση έντασης" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } επεισόδιο | { n } επεισόδια", + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + } + }, + "podcast": { + "Modal": { + "button": { + "addToFavorites": "Προσθήκη στα αγαπημένα", + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", + "addToQueue": "Προσθήκη στην ουρά", + "artistDetails": "Καλλιτέχνης Άλμπουμ", + "channelDetails": "Κανάλι καλλιτέχνη", + "episodeDetails": "Επεισόδια", + "startRadio": "Διαγραφή ράδιο" + } + } + }, + "track": { + "Modal": { + "button": { + "addToFavorites": "Προσθήκη στα αγαπημένα", + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", + "addToQueue": "Προσθήκη στην ουρά", + "artistDetails": "Καλλιτέχνης Άλμπουμ", + "channelDetails": "Κανάλι καλλιτέχνη", + "episodeDetails": "Επεισόδια", + "startRadio": "Διαγραφή ράδιο" + } + }, + "Table": { + "table": { + "header": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης" + } + } + } + } + }, + "auth": { + "ApplicationEdit": { + "header": { + "appDetails": "Λεπτομέρειες εφαρμογής", + "editApp": "Επεξεργασία εφαρμογής" + }, + "help": { + "appDetails": "Το αναγνωριστικό εφαρμογής και το μυστικό είναι ευαίσθητες πληροφορίες και πρέπει να τα αντιμετωπίζεται σαν κωδικούς. Μην τα μοιραστείτε με κανέναν." + }, + "label": { + "accessToken": "Access token", + "appId": "Αναγνωριστικό Εφαρμογής", + "appSecret": "Μυστικό εφαρμογής" + }, + "link": { + "settings": "Πίσω στις ρυθμίσεις" + }, + "title": "Επεξεργασία εφαρμογής" + }, + "ApplicationForm": { + "button": { + "create": "Δημιουργία εφαρμογής" + } + }, + "ApplicationNew": { + "link": { + "settings": "Πίσω στις ρυθμίσεις" + }, + "title": "Δημιουργία νέας εφαρμογής" + }, + "Authorize": { + "button": { + "authorize": "Εξουσιοδότηση { app }" + }, + "header": { + "access": "Το { app } ζητάει πρόσβαση στον Funkwhale λογαριασμό σας", + "allScopes": "Πλήρης πρόσβαση", + "authorize": "Εξουσιοδότηση εφαρμογής τρίτου" + }, + "help": { + "pasteCode": "Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα στην εφαρμογή:" + }, + "title": "επιτρέψτε την εφαρμογή" + }, + "LoginForm": { + "help": { + "approvalRequired": "Εάν γραφτήκατε πρόσφατα, μπορεί να χρειαστεί να περιμένετε μέχρι οι διαχειριστές να ελέγξουν το λογαριασμό σας, ή να επαληθεύσουν τη διεύθυνση e-mail σας." + }, + "link": { + "createAccount": "Δημιουργία λογαριασμού" + }, + "placeholder": { + "username": "Εισάγετε το όνομα χρήστη ή τη διεύθυνση e-mail σας" + } + }, + "Logout": { + "header": { + "confirm": "Είστε σίγουρος πως θέλετε να αποσυνδεθείτε;" + } + }, + "Plugin": { + "header": { + "failure": "Σφάλμα κατά την αποθήκευση πρόσθετου" + }, + "label": { + "pluginEnabled": "Ενεργό" + }, + "link": { + "documentation": "Τεχνικά Έγγραφα" + } + }, + "Settings": { + "button": { + "delete": "Διαγραφή", + "deleteAccount": "Διαγραφή του λογαριασμού μου…", + "deleteAccountConfirm": "Διαγραφή του λογαριασμού μου", + "disableSubsonic": "Απενεργοποίηση πρόσβασης", + "edit": "Επεξεργασία", + "password": "Αλλαγή κωδικού" + }, + "description": { + "changeEmail": "Αλλαγή της διεύθυνσης e-mail του λογαριασμού σας. Θα σας σταλθεί e-mail επιβεβαίωσης στην καινούρια διεύθυνση.", + "changePassword": { + "paragraph1": "Εάν αλλάξετε τον κωδικό σας θα αλλάξει και ο κωδικός του Subsonic API αν έχετε έναν." + }, + "contentFilters": "Τα φίλτρα περιεχομένου βοηθάνε στο να κρύβουν το περιεχόμενο το οποίο δεν θέλετε να βλέπετε στην υπηρεσία." + }, + "header": { + "accountSettings": "Ρυθμίσεις λογαριασμού", + "authorizedApps": "Εξουσιοδοτημένες εφαρμογές", + "avatar": "Avatar", + "avatarFailure": "Το avatar σας δε μπορεί να αποθηκευτεί", + "changeEmail": "Αλλαγή της διεύθυνσης e-mail μου", + "changePassword": "Αλλαγή του κωδικού μου", + "contentFilters": "Φίλτρα περιεχομένου", + "deleteAccount": "Διαγραφή του λογαριασμού μου" + }, + "help": { + "noApps": "Εάν εξουσιοδοτήσετε τρίτες εφαρμογές να έχουν πρόσβαση στα δεδομένα σας, αυτές οι εφαρμογές θα είναι καταγεγραμμένες εδώ." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Τρέχων κωδικός" + }, + "message": { + "confirmDelete": "Το αίτημα διαγραφής σας υποβλήθηκε, ο λογαριαμός σας και το περιεχόμενό του θα διαγραφούν σύντομα.", + "currentEmail": "Η τρέχουσα διεύθυνση e-mail σας είναι { email }." + }, + "modal": { + "changePassword": { + "content": { + "warning": "Η αλλαγή του κωδικού σας θα έχει τις εξής συνέπειες:" + }, + "header": "Αλλαγή κωδικού;" + }, + "deleteAccount": { + "header": "Θέλετε να διαγράψετε τον λογαριασμό σας;" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Ημερομηνία δημιουργίας" + } + }, + "authorizedApps": { + "header": { + "application": "Εφαρμογή" + } + }, + "yourApps": { + "header": { + "application": "Εφαρμογή", + "creationDate": "Ημερομηνία δημιουργίας" + } + } + }, + "title": "Ρυθμίσεις Λογαριασμού" + }, + "SignupForm": { + "button": { + "create": "Δημιουργία του λογαριασμού σας" + }, + "label": { + "email": "Διεύθυνση e-mail" + }, + "placeholder": { + "username": "Εισάγετε το όνομα χρήστη σας" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Απενεργοποίηση πρόσβασης", + "disable": "Απενεργοποίηση πρόσβασης στο Subsonic" + }, + "description": { + "subsonic": { + "paragraph1": "Το Funkwhale είναι συμβατό με άλλα προγράμματα αναπαραγωγής μουσικής που υποστηρίζουν το Subsonic API.", + "paragraph3": "Ωστόσο, η πρόσβαση στο Funkwhale από αυτούς τους clients απαιτεί έναν ξεχωριστό κωδικό τον οποίο μπορείτε να ορίσετε παρακάτω." + } + }, + "header": { + "error": "Σφάλμα" + }, + "link": { + "apps": "Ανακαλύψτε πως μπορείτε να χρησιμοποιήσετε το Funkwhale από άλλες εφαρμογές" + }, + "message": { + "accessDisabled": "Απενεργοποιημένη πρόσβαση" + }, + "modal": { + "disableSubsonic": { + "header": "Απενεργοποίηση πρόσβασης στο Subsonic API;" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Σφάλμα κατά τη δημιουργία" + } + }, + "AlbumModal": { + "button": { + "cancel": "Ακύρωση", + "create": "Δημιουργία" + } + }, + "AlbumSelect": { + "label": { + "album": "Άλμπουμ" + }, + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + }, + "LicenseSelect": { + "link": { + "license": "Σχετικά με αυτήν την άδεια" + } + }, + "UploadForm": { + "button": { + "edit": "Επεξεργασία" + }, + "header": { + "error": "Σφάλμα κατά τη δημοσίευση" + }, + "help": { + "license": "Προσθέστε μια άδεια σε αυτό που ανεβάσατε για να εξασφαλίσετε μερικές ελευθερίες στο κοινό σας." + }, + "label": { + "channel": "Κανάλι", + "openBrowser": "Περιήγηση…" + }, + "message": { + "dragAndDrop": "Κάντε drag and drop τα αρχεία σας εδώ ή ανοίχτε τον περιηγητή για να ανεβάσετε τα αρχεία σας" + } + }, + "UploadMetadataForm": { + "label": { + "description": "Περιγραφή" + } + }, + "UploadModal": { + "button": { + "cancel": "Ακύρωση", + "close": "Κλείσιμο" + }, + "header": { + "uploadFiles": "Αρχεία προς ανέβασμα" + }, + "meta": { + "files": "{ n } αρχείο | { n } αρχεία" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{ n } στοιχείο επιλεγμένο | { n } στοιχεία επιλεγμένα", + "go": "Ξεκινήστε", + "selected": "{ n } απο τα { total } επιλεγμένο | { n } απο τα { total } επιλεγμένα" + }, + "label": { + "actions": "Ενέργειες" + }, + "message": { + "needsRefresh": "Το περιεχόμενο έχει ανανεωθεί, κάντε ανανέωση για να δείτε το ενημερωμένο περιεχόμενο", + "success": "Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχείο | Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχεία" + }, + "modal": { + "performAction": { + "header": "Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχεία; | Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχείο;" + } + } + }, + "CopyInput": { + "button": { + "copy": "Αντιγραφή" + } + }, + "DangerousButton": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Επιβεβαίωση" + }, + "header": { + "confirm": "Επιβεβαίωση δράσης;" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } ώρες { minutes } λεπτά", + "minutes": "{ minutes } λεπτά" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Καθάρισμα" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Ακύρωση", + "edit": "Επεξεργασία" + }, + "header": { + "failure": "Σφάλμα κατά την ενημέρωση της περιγραφής" + } + }, + "UserMenu": { + "label": { + "language": "Αλλαγή γλώσσας" + }, + "link": { + "about": "Σχετικά με", + "chat": "Δωμάτιο συνομιλιών", + "docs": "Τεχνικά Έγγραφα" + } + }, + "UserModal": { + "button": { + "switchInstance": "Επιλέξτε το instance σας" + }, + "header": { + "options": "Ενέργειες" + }, + "label": { + "language": "Αλλαγή γλώσσας" + }, + "link": { + "about": "Σχετικά με", + "chat": "Δωμάτιο συνομιλιών" + } + } + }, + "favorites": { + "List": { + "header": { + "favorites": "{ n } αγαπημένο | { n } αγαπημένα" + }, + "link": { + "library": "Περιήγηση στην βιβλιοθήκη" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + }, + "TrackFavoriteIcon": { + "button": { + "add": "Προσθήκη στα αγαπημένα" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Κλείσιμο", + "reload": "Κλείσιμο και ανανέωση σελίδας" + }, + "description": { + "failure": "Σφάλμα κατά την ανανέωση των στοιχείων:", + "success": "Τα δεδομένα από τον απομακρυσμένο server ανανεώθηκαν επιτυχώς." + }, + "header": { + "saveFailure": "Σφάλμα κατά την αποθήκευση ρυθμίσεων" + }, + "table": { + "error": { + "label": { + "type": "Τύπος σφάλματος" + }, + "value": { + "httpError": "Ένα σφάλμα HTTP συνέβη κατά την επικοινωνία με τον απομακρυσμένο εξυπηρετητή", + "invalidAttributesError": "Τα δεδομένα που πάρθηκαν από τον απομακρυσμένο server είχαν μη έγκυρα ή ελλιπής χαρακτηριστικά" + } + } + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Αντιγραφή" + } } }, "library": { "AlbumBase": { + "link": { + "addDescription": "Προσθήκη περιγραφής…" + }, "meta": { "episodes": "{ n } επεισόδιο | { n } επεισόδια", "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "link": { - "addDescription": "Προσθήκη περιγραφής…" } }, - "ArtistBase": { - "meta": { - "tracks": "{ n } κομμάτι σε | { n } κομμάτια σε", - "albums": "{ n } άλμπουμ | { n } άλμπουμ" - }, - "title": "Καλλιτέχνης", - "button": { - "cancel": "Ακύρωση", - "edit": "Επεξεργασία", - "embed": "Ενσωμάτωση" - }, - "modal": { - "embed": { - "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" - } - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } κομμάτι που ταιριάζει στα συνδυασμένα φίλτρα | { n } κομμάτια που ταιριάζουν στα συνδυασμένα φίλτρα", - "builder": "Κατασκευαστής" - }, - "table": { - "filter": { - "header": { - "actions": "Ενέργειες", - "candidates": "Υποψήφιοι", - "config": "Ρυθμίσεις", - "name": "Όνομα φίλτρου" - } - } - }, - "button": { - "filter": "Προσθήκη φίλτρου" - }, - "label": { - "filter": "Προσθέστε φίλτρα για να προσαρμόσετε το ράδιο σας", - "description": "Περιγραφή", - "public": "Εμφάνιση δημοσίως" - } - }, - "Filter": { - "cancelButton": "Ακύρωση" - } - }, - "FileUpload": { - "tooltip": { - "network": "Σφάλμα δικτύου κατά το ανέβασμα του αρχείου", - "size": "Δεν είναι δυνατή η μεταφόρτωση του αρχείου, σιγουρευτείτε ότι δεν είναι πολύ μεγάλο" - }, - "table": { - "upload": { - "header": { - "actions": "Ενέργειες", - "filename": "Όνομα αρχείου" - } - } - }, - "button": { - "cancel": "Ακύρωση" - }, - "label": { - "uploadWidget": "Κάντε κλικ για να επιλέξετε αρχεία για μεταφόρτωση ή κάντε drag and drop αρχεία ή φακέλους" - } - }, - "EditForm": { - "placeholder": { - "summary": "Μια περίληψη των αλλαγών σας." - }, - "button": { - "cancel": "Ακύρωση", - "clear": "Καθάρισμα" - }, + "AlbumDetail": { "header": { - "failure": "Σφάλμα κατά την υποβολή αλλαγών" - } - }, - "Albums": { - "link": { - "addMusic": "Προσθέστε μουσική" - }, - "title": "Άλμπουμ", - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση Άλμπουμ" - }, - "placeholder": { - "search": "Εισάγετε τίτλο άλμπουμ…" - } - }, - "Artists": { - "button": { - "upload": "Προσθέστε μουσική" - }, - "label": { - "search": "Όνομα καλλιτέχνη" - }, - "title": "Καλλιτέχνες", - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στους καλλιτέχνες" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης", - "copyright": "Πνευματικά Δικαιώματα" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Λήψεις", - "duration": "Διάρκεια" - } - } - }, - "TagDetail": { - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "header": { - "channels": "Κανάλια" - } - }, - "ArtistDetail": { - "header": { - "album": "Άλμπουμ από τον καλλιτέχνη", - "track": "Άλμπουμ από τον καλλιτέχνη" - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Σφάλμα κατά την επεξεργασία της μεταφόρτωσης. Θα βρείτε επιπλέον πληροφορίες παρακάτω.", - "unknownError": { - "message": "Συνέβη κάποιο άγνωστο σφάλμα" - } - }, - "button": { - "close": "Κλείσιμο" - }, - "table": { - "error": { - "debug": "Πληροφορίες εντοπισμού σφαλμάτων", - "errorType": "Τύπος σφάλματος" - } - } - }, - "EditCard": { - "button": { - "approve": "Αποδοχή", - "delete": "Διαγραφή" - }, - "status": { - "approved": "Eγκρίθηκε", - "applied": "Εγκρίθηκε και εφαρμόστηκε" - }, - "modal": { - "delete": { - "header": "Διαγραφή της υπόδειξης;" - } - }, - "table": { - "update": { - "header": { - "field": "Πεδίο" - } - } - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στα podcast" - }, - "button": { - "cancel": "Ακύρωση", - "channel": "Δημιουργία Καναλιού" - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στα ράδιο" - }, - "button": { - "add": "Δημιουργία ράδιο", - "create": "Δημιουργία δικού σας ράδιο" - }, - "placeholder": { - "search": "Εισάγετε όνομα ράδιο…" + "episodes": "Επεισόδια" } }, "AlbumDropdown": { @@ -596,6 +856,188 @@ } } }, + "AlbumEdit": { + "header": { + "edit": "Επεξεργασία άλμπουμ" + } + }, + "Albums": { + "header": { + "browse": "Περιήγηση Άλμπουμ" + }, + "link": { + "addMusic": "Προσθέστε μουσική" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "placeholder": { + "search": "Εισάγετε τίτλο άλμπουμ…" + }, + "title": "Άλμπουμ" + }, + "ArtistBase": { + "button": { + "cancel": "Ακύρωση", + "edit": "Επεξεργασία", + "embed": "Ενσωμάτωση" + }, + "meta": { + "albums": "{ n } άλμπουμ | { n } άλμπουμ", + "tracks": "{ n } κομμάτι σε | { n } κομμάτια σε" + }, + "modal": { + "embed": { + "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" + } + }, + "title": "Καλλιτέχνης" + }, + "ArtistDetail": { + "header": { + "album": "Άλμπουμ από τον καλλιτέχνη", + "track": "Άλμπουμ από τον καλλιτέχνη" + } + }, + "ArtistEdit": { + "header": { + "edit": "Επεξεργασία καλλιτέχνη" + } + }, + "Artists": { + "button": { + "upload": "Προσθέστε μουσική" + }, + "header": { + "browse": "Περιήγηση στους καλλιτέχνες" + }, + "label": { + "search": "Όνομα καλλιτέχνη" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "title": "Καλλιτέχνες" + }, + "EditCard": { + "button": { + "approve": "Αποδοχή", + "delete": "Διαγραφή" + }, + "modal": { + "delete": { + "header": "Διαγραφή της υπόδειξης;" + } + }, + "status": { + "applied": "Εγκρίθηκε και εφαρμόστηκε", + "approved": "Eγκρίθηκε" + }, + "table": { + "update": { + "header": { + "field": "Πεδίο" + } + } + } + }, + "EditForm": { + "button": { + "cancel": "Ακύρωση", + "clear": "Καθάρισμα" + }, + "header": { + "failure": "Σφάλμα κατά την υποβολή αλλαγών" + }, + "placeholder": { + "summary": "Μια περίληψη των αλλαγών σας." + } + }, + "FileUpload": { + "button": { + "cancel": "Ακύρωση" + }, + "label": { + "uploadWidget": "Κάντε κλικ για να επιλέξετε αρχεία για μεταφόρτωση ή κάντε drag and drop αρχεία ή φακέλους" + }, + "table": { + "upload": { + "header": { + "actions": "Ενέργειες", + "filename": "Όνομα αρχείου" + } + } + }, + "tooltip": { + "network": "Σφάλμα δικτύου κατά το ανέβασμα του αρχείου", + "size": "Δεν είναι δυνατή η μεταφόρτωση του αρχείου, σιγουρευτείτε ότι δεν είναι πολύ μεγάλο" + } + }, + "ImportStatusModal": { + "button": { + "close": "Κλείσιμο" + }, + "error": { + "importFailure": "Σφάλμα κατά την επεξεργασία της μεταφόρτωσης. Θα βρείτε επιπλέον πληροφορίες παρακάτω.", + "unknownError": { + "message": "Συνέβη κάποιο άγνωστο σφάλμα" + } + }, + "table": { + "error": { + "debug": "Πληροφορίες εντοπισμού σφαλμάτων", + "errorType": "Τύπος σφάλματος" + } + } + }, + "Podcasts": { + "button": { + "cancel": "Ακύρωση", + "channel": "Δημιουργία Καναλιού" + }, + "header": { + "browse": "Περιήγηση στα podcast" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + }, + "Radios": { + "button": { + "add": "Δημιουργία ράδιο", + "create": "Δημιουργία δικού σας ράδιο" + }, + "header": { + "browse": "Περιήγηση στα ράδιο" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "placeholder": { + "search": "Εισάγετε όνομα ράδιο…" + } + }, + "TagDetail": { + "header": { + "channels": "Κανάλια" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + } + }, "TrackBase": { "button": { "cancel": "Ακύρωση", @@ -613,14 +1055,21 @@ } } }, - "AlbumEdit": { - "header": { - "edit": "Επεξεργασία άλμπουμ" - } - }, - "ArtistEdit": { - "header": { - "edit": "Επεξεργασία καλλιτέχνη" + "TrackDetail": { + "table": { + "release": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "copyright": "Πνευματικά Δικαιώματα" + }, + "track": { + "bitrate": { + "label": "Bitrate" + }, + "codec": "Codec", + "downloads": "Λήψεις", + "duration": "Διάρκεια" + } } }, "TrackEdit": { @@ -628,16 +1077,43 @@ "edit": "Επεξεργασία κομματιού" } }, - "AlbumDetail": { - "header": { - "episodes": "Επεισόδια" + "radios": { + "Builder": { + "button": { + "filter": "Προσθήκη φίλτρου" + }, + "header": { + "builder": "Κατασκευαστής", + "matches": "{ n } κομμάτι που ταιριάζει στα συνδυασμένα φίλτρα | { n } κομμάτια που ταιριάζουν στα συνδυασμένα φίλτρα" + }, + "label": { + "description": "Περιγραφή", + "filter": "Προσθέστε φίλτρα για να προσαρμόσετε το ράδιο σας", + "public": "Εμφάνιση δημοσίως" + }, + "table": { + "filter": { + "header": { + "actions": "Ενέργειες", + "candidates": "Υποψήφιοι", + "config": "Ρυθμίσεις", + "name": "Όνομα φίλτρου" + } + } + } + }, + "Filter": { + "cancelButton": "Ακύρωση" } } }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } αγαπημένο | { n } αγαπημένα" + "manage": { + "ChannelsTable": { + "label": { + "category": "Κατηγορία" + }, + "option": { + "all": "Όλα" }, "ordering": { "direction": { @@ -645,357 +1121,51 @@ "descending": "Φθίνουσα" } }, - "link": { - "library": "Περιήγηση στην βιβλιοθήκη" - } - }, - "TrackFavoriteIcon": { - "button": { - "add": "Προσθήκη στα αγαπημένα" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } αρχείο | { n } αρχεία" - }, - "button": { - "cancel": "Ακύρωση", - "close": "Κλείσιμο" - }, - "header": { - "uploadFiles": "Αρχεία προς ανέβασμα" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "label": { - "album": "Άλμπουμ" - } - }, - "LicenseSelect": { - "link": { - "license": "Σχετικά με αυτήν την άδεια" - } - }, - "UploadForm": { - "help": { - "license": "Προσθέστε μια άδεια σε αυτό που ανεβάσατε για να εξασφαλίσετε μερικές ελευθερίες στο κοινό σας." - }, - "label": { - "openBrowser": "Περιήγηση…", - "channel": "Κανάλι" - }, - "message": { - "dragAndDrop": "Κάντε drag and drop τα αρχεία σας εδώ ή ανοίχτε τον περιηγητή για να ανεβάσετε τα αρχεία σας" - }, - "button": { - "edit": "Επεξεργασία" - }, - "header": { - "error": "Σφάλμα κατά τη δημοσίευση" - } - }, - "AlbumModal": { - "button": { - "cancel": "Ακύρωση", - "create": "Δημιουργία" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Περιγραφή" - } - }, - "AlbumForm": { - "header": { - "error": "Σφάλμα κατά τη δημιουργία" - } - } - }, - "AboutPod": { - "stat": { - "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής", - "activeUsers": "{ n } ενεργός χρήστης | { n } ενεργοί χρήστες", - "albumsCount": "Άλμπουμ | Άλμπουμ", - "artistsCount": "Καλλιτέχνης | Καλλιτέχνης", - "listeningsCount": "{ n } ακρόαση | { n } ακροάσεις", - "tracksCount": "Προσθήκη κομματιού | Προσθήκη κομματιού" - }, - "title": "Σχετικά με", - "link": { - "about": "Σχετικά με αυτό το pod" - }, - "header": { - "about": "Σχετικά με αυτό το pod", - "contact": "Επικοινωνία" - }, - "feature": { - "allowList": "Λίστα Επιτρεπομένων", - "anonymousAccess": "Ανώνυμη πρόσβαση", - "status": { - "closed": "Κλειστό", - "disabled": "Απενεργοποιημένο", - "enabled": "Ενεργό" - }, - "version": "Έκδοση Funkwhale" - } - }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } απο τα { total } επιλεγμένο | { n } απο τα { total } επιλεγμένα", - "allSelected": "{ n } στοιχείο επιλεγμένο | { n } στοιχεία επιλεγμένα", - "go": "Ξεκινήστε" - }, - "message": { - "success": "Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχείο | Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχεία", - "needsRefresh": "Το περιεχόμενο έχει ανανεωθεί, κάντε ανανέωση για να δείτε το ενημερωμένο περιεχόμενο" - }, - "label": { - "actions": "Ενέργειες" - }, - "modal": { - "performAction": { - "header": "Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχεία; | Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχείο;" - } - } - }, - "Duration": { - "meta": { - "hours": "{ hours } ώρες { minutes } λεπτά", - "minutes": "{ minutes } λεπτά" - } - }, - "UserMenu": { - "link": { - "about": "Σχετικά με", - "chat": "Δωμάτιο συνομιλιών", - "docs": "Τεχνικά Έγγραφα" - }, - "label": { - "language": "Αλλαγή γλώσσας" - } - }, - "UserModal": { - "link": { - "about": "Σχετικά με", - "chat": "Δωμάτιο συνομιλιών" - }, - "label": { - "language": "Αλλαγή γλώσσας" - }, - "header": { - "options": "Ενέργειες" - }, - "button": { - "switchInstance": "Επιλέξτε το instance σας" - } - }, - "DangerousButton": { - "button": { - "cancel": "Ακύρωση", - "confirm": "Επιβεβαίωση" - }, - "header": { - "confirm": "Επιβεβαίωση δράσης;" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Ακύρωση", - "edit": "Επεξεργασία" - }, - "header": { - "failure": "Σφάλμα κατά την ενημέρωση της περιγραφής" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Καθάρισμα" - } - }, - "CopyInput": { - "button": { - "copy": "Αντιγραφή" - } - } - }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } - }, - "PlaylistModal": { - "warning": { - "duplicate": "Το { 0 } είναι ήδη στην λίστα { 1 }." - }, - "button": { - "addDuplicate": "Προσθήκη ούτως ή άλλως", - "addToPlaylist": "Προσθήκη σε αυτήν την λίστα αναπαραγωγής", - "addTrack": "Προσθήκη κομματιού", - "cancel": "Ακύρωση", - "edit": "Επεξεργασία" - }, - "header": { - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής", - "available": "Διαθέσιμες λίστες αναπαραγωγής" - }, "table": { - "edit": { + "channel": { "header": { - "edit": "Επεξεργασία" + "account": "Λογαριασμός", + "albums": "Άλμπουμ", + "creationDate": "Ημερομηνία δημιουργίας", + "domain": "Διεύθυνση" } } - }, - "placeholder": { - "filterPlaylist": "Εισάγετε όνομα λίστας αναπαραγωγής" - }, - "label": { - "filter": "Φίλτρο" } }, - "Editor": { - "button": { - "addDuplicate": "Προσθήκη ούτως ή άλλως", - "clear": "Καθάρισμα λίστας αναπαραγωγής", - "copy": "Αντιγραφή της τρέχουσας ουράς σε αυτήν την λίστα αναπαραγωγής" - }, - "error": { - "sync": "Σφάλμα κατά την αποθήκευση των αλλαγών σας" - }, - "message": { - "sync": "Οι αλλαγές συγχρονίστηκαν με τον διακομιστή" - }, - "modal": { - "clearPlaylist": { - "header": "Θέλετε να εκκαθαρίσετε την λίστα αναπαραγωγής \"{ playlist }\";" - } - }, - "help": { - "reorder": "Κάντε drag and drop σειρές για να αναδιάταξη των κομματιών στην λίστα αναπαραγωγής" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Προσθήκη στην λίστα αναπαραγωγής…" - } - }, - "Form": { - "header": { - "createPlaylist": "Δημιουργία νέας λίστας αναπαραγωγής" - }, - "button": { - "create": "Δημιουργία λίστας αναπαραγωγής" - } - }, - "Widget": { - "button": { - "create": "Δημιουργία Λίστας Αναπαραγωγής" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } αποδέχθηκε την ακολούθηση της βιβλιοθήκης \"{ library }\"", - "libraryFollow": "{ username } ακολούθησε την βιβλιοθήκη σας \"{ library }\"", - "libraryPendingFollow": "{ username } θέλει να ακολουθήσει την βιβλιοθήκη σας \"{ library }\"" - }, - "button": { - "approve": "Αποδοχή" - } - } - }, - "Sidebar": { - "link": { - "about": "Σχετικά με αυτό το pod", - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "browse": "Περιήγηση", - "channels": "Κανάλια", - "createAccount": "Δημιουργία λογαριασμού", - "favorites": "Αγαπημένα", - "home": "Αρχική" - }, - "label": { - "add": "Προσθήκη περιεχομένου", - "administration": "Διαχείριση", - "language": "Αλλαγή γλώσσας" - }, - "header": { - "administration": "Διαχείριση", - "explore": "Ανακάλυψε" - } - }, - "manage": { "library": { - "UploadsTable": { - "table": { - "upload": { - "header": { - "accessedDate": "Ημερομηνία πρόσβασης", - "account": "Λογαριασμός", - "creationDate": "Ημερομηνία δημιουργίας", - "domain": "Διεύθυνση" - } + "AlbumsTable": { + "action": { + "delete": { + "label": "Διαγραφή" } }, - "option": { - "all": "Όλα" - }, "ordering": { "direction": { "ascending": "Αύξουσα", "descending": "Φθίνουσα" } }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "LibrariesTable": { "table": { - "library": { + "album": { "header": { - "account": "Λογαριασμός", - "creationDate": "Ημερομηνία δημιουργίας", - "domain": "Διεύθυνση", - "followers": "Ακόλουθοι" - } - } - }, - "option": { - "all": "Όλα" - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Άλμπουμ", "artist": "Καλλιτέχνης", "creationDate": "Ημερομηνία δημιουργίας", "domain": "Διεύθυνση" } } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } + }, + "label": { + "category": "Κατηγορία" + }, + "option": { + "all": "Όλα" }, "ordering": { "direction": { @@ -1003,13 +1173,6 @@ "descending": "Φθίνουσα" } }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "ArtistsTable": { "table": { "artist": { "header": { @@ -1018,45 +1181,6 @@ "domain": "Διεύθυνση" } } - }, - "option": { - "all": "Όλα" - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "label": { - "category": "Κατηγορία" - }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "creationDate": "Ημερομηνία δημιουργίας" - } - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "action": { - "delete": { - "label": "Διαγραφή" - } } }, "EditsCardList": { @@ -1071,15 +1195,37 @@ } } }, - "AlbumsTable": { + "LibrariesTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } + }, + "option": { + "all": "Όλα" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, "table": { - "album": { + "library": { "header": { - "artist": "Καλλιτέχνης", + "account": "Λογαριασμός", "creationDate": "Ημερομηνία δημιουργίας", - "domain": "Διεύθυνση" + "domain": "Διεύθυνση", + "followers": "Ακόλουθοι" } } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } }, "ordering": { "direction": { @@ -1087,96 +1233,82 @@ "descending": "Φθίνουσα" } }, + "table": { + "tag": { + "header": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "creationDate": "Ημερομηνία δημιουργίας" + } + } + } + }, + "TracksTable": { "action": { "delete": { "label": "Διαγραφή" } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "table": { + "track": { + "header": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "creationDate": "Ημερομηνία δημιουργίας", + "domain": "Διεύθυνση" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } + }, + "option": { + "all": "Όλα" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "table": { + "upload": { + "header": { + "accessedDate": "Ημερομηνία πρόσβασης", + "account": "Λογαριασμός", + "creationDate": "Ημερομηνία δημιουργίας", + "domain": "Διεύθυνση" + } + } } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Λογαριασμός", - "domain": "Διεύθυνση" - }, - "status": { - "assignedTo": "Ανατεθεί σε" - }, - "report": { - "category": "Κατηγορία", - "creationDate": "Ημερομηνία δημιουργίας" + "AccountsTable": { + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" } }, - "header": { - "actions": "Ενέργειες" - }, - "button": { - "confirmDelete": "Διαγραφή", - "delete": "Διαγραφή στοιχείου αναφοράς" - }, - "modal": { - "delete": { - "header": "Διαγραφή στοιχείου αναφοράς;" - } - } - }, - "UserRequestCard": { - "header": { - "actions": "Ενέργειες" - }, - "button": { - "approve": "Αποδοχή" - }, "table": { - "status": { - "approved": "Eγκρίθηκε", - "assignedTo": "Ανατεθεί σε" - }, - "request": { - "creationDate": "Ημερομηνία δημιουργίας" + "account": { + "header": { + "domain": "Διεύθυνση" + } } } }, - "InstancePolicyForm": { - "header": { - "addRule": "Προσθήκη κανόνα συντονισμού", - "editRule": "Επεξεργασία κανόνα συντονισμού", - "failure": "Σφάλμα κατά τη δημιουργία κανόνα" - }, - "label": { - "blockAll": "Μπλοκάρισμα όλων", - "policyDisabled": "Απενεργοποιημένο", - "policyEnabled": "Ενεργό" - }, - "tooltip": { - "blockAll": "Μπλοκάρισμα όλων απ' τον συγκεκριμένο λογαριασμό ή διεύθυνση. Αυτό θα αποτρέψει οποιαδήποτε αλληλεπίδραση με την οντότητα, και θα καθαρίσει όλα τα σχετικό περιεχόμενο (Μεταφορτώσεις, βιβλιοθήκες, ακολούθους, κτλ.)", - "rejectMedia": "Αποτροπή κατεβάσματος αρχείων πολυμέσων (αρχεία ήχου, εξώφυλλο άλμπουμ, avatar λογαριασμού...) από αυτόν τον λογαριασμό ή διεύθυνση. Θα διαγραφεί και το ήδη υπάρχον περιεχόμενο." - }, - "button": { - "cancel": "Ακύρωση", - "create": "Δημιουργία", - "delete": "Διαγραφή", - "confirm": "Διαγραφή κανόνα συντονισμού" - }, - "modal": { - "delete": { - "header": "Διαγραφή του κανόνα συντονισμού;" - } - } - }, - "NoteForm": { - "button": { - "add": "Προσθήκη σημείωσης" - }, - "placeholder": { - "summary": "Περιγράψτε τις ενέργειες σας, ή άλλες σχετικές ενημερώσεις…" - }, - "header": { - "failure": "Σφάλμα κατά την υποβολή σημείωσης" - } - }, "DomainsTable": { "action": { "add": { @@ -1193,37 +1325,60 @@ } } }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "table": { - "account": { - "header": { - "domain": "Διεύθυνση" - } - } - } - }, "InstancePolicyCard": { - "label": { - "blockAll": "Μπλοκάρισμα όλων" - }, "button": { "edit": "Επεξεργασία" }, + "label": { + "blockAll": "Μπλοκάρισμα όλων" + }, "status": { "enabled": "Ενεργό" } }, + "InstancePolicyForm": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Διαγραφή κανόνα συντονισμού", + "create": "Δημιουργία", + "delete": "Διαγραφή" + }, + "header": { + "addRule": "Προσθήκη κανόνα συντονισμού", + "editRule": "Επεξεργασία κανόνα συντονισμού", + "failure": "Σφάλμα κατά τη δημιουργία κανόνα" + }, + "label": { + "blockAll": "Μπλοκάρισμα όλων", + "policyDisabled": "Απενεργοποιημένο", + "policyEnabled": "Ενεργό" + }, + "modal": { + "delete": { + "header": "Διαγραφή του κανόνα συντονισμού;" + } + }, + "tooltip": { + "blockAll": "Μπλοκάρισμα όλων απ' τον συγκεκριμένο λογαριασμό ή διεύθυνση. Αυτό θα αποτρέψει οποιαδήποτε αλληλεπίδραση με την οντότητα, και θα καθαρίσει όλα τα σχετικό περιεχόμενο (Μεταφορτώσεις, βιβλιοθήκες, ακολούθους, κτλ.)", + "rejectMedia": "Αποτροπή κατεβάσματος αρχείων πολυμέσων (αρχεία ήχου, εξώφυλλο άλμπουμ, avatar λογαριασμού...) από αυτόν τον λογαριασμό ή διεύθυνση. Θα διαγραφεί και το ήδη υπάρχον περιεχόμενο." + } + }, "InstancePolicyModal": { "button": { "close": "Κλείσιμο" } }, + "NoteForm": { + "button": { + "add": "Προσθήκη σημείωσης" + }, + "header": { + "failure": "Σφάλμα κατά την υποβολή σημείωσης" + }, + "placeholder": { + "summary": "Περιγράψτε τις ενέργειες σας, ή άλλες σχετικές ενημερώσεις…" + } + }, "NotesThread": { "button": { "delete": "Διαγραφή" @@ -1233,56 +1388,73 @@ "header": "Διαγραφή της σημείωσης;" } } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { + }, + "ReportCard": { + "button": { + "confirmDelete": "Διαγραφή", + "delete": "Διαγραφή στοιχείου αναφοράς" + }, + "header": { + "actions": "Ενέργειες" + }, + "modal": { + "delete": { + "header": "Διαγραφή στοιχείου αναφοράς;" + } + }, + "table": { + "object": { "account": "Λογαριασμός", - "albums": "Άλμπουμ", - "creationDate": "Ημερομηνία δημιουργίας", "domain": "Διεύθυνση" + }, + "report": { + "category": "Κατηγορία", + "creationDate": "Ημερομηνία δημιουργίας" + }, + "status": { + "assignedTo": "Ανατεθεί σε" } } }, - "option": { - "all": "Όλα" - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" + "UserRequestCard": { + "button": { + "approve": "Αποδοχή" + }, + "header": { + "actions": "Ενέργειες" + }, + "table": { + "request": { + "creationDate": "Ημερομηνία δημιουργίας" + }, + "status": { + "approved": "Eγκρίθηκε", + "assignedTo": "Ανατεθεί σε" + } } - }, - "label": { - "category": "Κατηγορία" } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Κατάσταση λογαριασμού", - "email": "Email" - }, - "accountStatus": { - "active": "Ενεργός" - }, - "status": { - "admin": "Διαχειριστής" - } - } + "InvitationForm": { + "button": { + "clear": "Καθάρισμα", + "new": "Αποκτήστε μια νέα πρόσκληση" }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" + "header": { + "failure": "Σφάλμα κατά τη δημιουργία πρόσκλησης" + }, + "table": { + "invitation": { + "header": { + "code": "Κώδικας" + } } } }, "InvitationsTable": { + "action": { + "delete": "Διαγραφή" + }, "option": { "all": "Όλα", "expired": "Ληγμένο/χρησιμοποιημένο" @@ -1295,163 +1467,156 @@ "expirationDate": "Ημερομηνία λήξης" } } - }, - "action": { - "delete": "Διαγραφή" } }, - "InvitationForm": { - "button": { - "clear": "Καθάρισμα", - "new": "Αποκτήστε μια νέα πρόσκληση" + "UsersTable": { + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } }, "table": { - "invitation": { + "user": { + "accountStatus": { + "active": "Ενεργός" + }, "header": { - "code": "Κώδικας" + "accountStatus": "Κατάσταση λογαριασμού", + "email": "Email" + }, + "status": { + "admin": "Διαχειριστής" } } - }, - "header": { - "failure": "Σφάλμα κατά τη δημιουργία πρόσκλησης" } } } }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Ενέργειες", - "type": "Τύπος πεδίου" - } - } - }, - "button": { - "add": "Προσθήκη πεδίου", - "edit": "Επεξεργασία φόρμας" - }, - "label": { - "additionalField": "Επιπλέον πεδίο", - "additionalFields": "Επιπλέον πεδία", - "delete": "Διαγραφή" - }, - "help": { - "additionalFields": "Επιπλέον πεδία που θα εμφανιστούν στην φόρμα. Εμφανίζονται μόνο αν είναι ενεργοποιημένη η χειροκίνητη αποδοχή εγγραφών.", - "helpText": "Προαιρετικό κείμενο που θα εμφανίζεται στην αρχή της φόρμας εγγραφής." - } - }, - "SettingsGroup": { - "header": { - "image": "Τρέχων εικόνα", - "error": "Σφάλμα κατά την αποθήκευση ρυθμίσεων" - } - } - }, "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Όλα" - }, - "label": { - "category": "Κατηγορία" - } - }, - "ReportModal": { - "header": { - "disabled": "Οι ανώνυμες αναφορές είναι απενεργοποιημένες, παρακαλώ συνδεθείτε για να υποβάλλεται αναφορά.", - "modal": "Θέλετε να αναφέρεται αυτό το στοιχείο;", - "submissionFailure": "Σφάλμα κατά την υποβολή αναφοράς" - }, - "button": { - "cancel": "Ακύρωση" - }, - "label": { - "email": "Email", - "forwardToDomain": "Προώθηση στο { domain}" - }, - "description": { - "forwardToDomain": "Προωθήστε ένα ανωνυμοποιημένο αντίγραφο της αναφοράς σας στον διακομιστή που φιλοξενεί αυτό το στοιχείο." - } - }, "FilterModal": { "button": { "cancel": "Ακύρωση", "hide": "Απόκρυψη περιεχομένου" }, + "header": { + "failure": "Σφάλμα κατά τη δημιουργία φίλτρου", + "modal": "Θέλετε να κρύψετε περιεχόμενο απ' τον καλλιτέχνη \"{ name }\";" + }, "message": { "success": "Προστέθηκε επιτυχώς το φίλτρο περιεχομένου" + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "Κατηγορία" + }, + "option": { + "all": "Όλα" + } + }, + "ReportModal": { + "button": { + "cancel": "Ακύρωση" + }, + "description": { + "forwardToDomain": "Προωθήστε ένα ανωνυμοποιημένο αντίγραφο της αναφοράς σας στον διακομιστή που φιλοξενεί αυτό το στοιχείο." }, "header": { - "modal": "Θέλετε να κρύψετε περιεχόμενο απ' τον καλλιτέχνη \"{ name }\";", - "failure": "Σφάλμα κατά τη δημιουργία φίλτρου" + "disabled": "Οι ανώνυμες αναφορές είναι απενεργοποιημένες, παρακαλώ συνδεθείτε για να υποβάλλεται αναφορά.", + "modal": "Θέλετε να αναφέρεται αυτό το στοιχείο;", + "submissionFailure": "Σφάλμα κατά την υποβολή αναφοράς" + }, + "label": { + "email": "Email", + "forwardToDomain": "Προώθηση στο { domain}" } } }, - "federation": { - "FetchButton": { - "description": { - "failure": "Σφάλμα κατά την ανανέωση των στοιχείων:", - "success": "Τα δεδομένα από τον απομακρυσμένο server ανανεώθηκαν επιτυχώς." + "notifications": { + "NotificationRow": { + "button": { + "approve": "Αποδοχή" + }, + "message": { + "libraryAcceptFollow": "{ username } αποδέχθηκε την ακολούθηση της βιβλιοθήκης \"{ library }\"", + "libraryFollow": "{ username } ακολούθησε την βιβλιοθήκη σας \"{ library }\"", + "libraryPendingFollow": "{ username } θέλει να ακολουθήσει την βιβλιοθήκη σας \"{ library }\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + }, + "Editor": { + "button": { + "addDuplicate": "Προσθήκη ούτως ή άλλως", + "clear": "Καθάρισμα λίστας αναπαραγωγής", + "copy": "Αντιγραφή της τρέχουσας ουράς σε αυτήν την λίστα αναπαραγωγής" + }, + "error": { + "sync": "Σφάλμα κατά την αποθήκευση των αλλαγών σας" + }, + "help": { + "reorder": "Κάντε drag and drop σειρές για να αναδιάταξη των κομματιών στην λίστα αναπαραγωγής" + }, + "message": { + "sync": "Οι αλλαγές συγχρονίστηκαν με τον διακομιστή" + }, + "modal": { + "clearPlaylist": { + "header": "Θέλετε να εκκαθαρίσετε την λίστα αναπαραγωγής \"{ playlist }\";" + } + } + }, + "Form": { + "button": { + "create": "Δημιουργία λίστας αναπαραγωγής" + }, + "header": { + "createPlaylist": "Δημιουργία νέας λίστας αναπαραγωγής" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Προσθήκη ούτως ή άλλως", + "addToPlaylist": "Προσθήκη σε αυτήν την λίστα αναπαραγωγής", + "addTrack": "Προσθήκη κομματιού", + "cancel": "Ακύρωση", + "edit": "Επεξεργασία" + }, + "header": { + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής", + "available": "Διαθέσιμες λίστες αναπαραγωγής" + }, + "label": { + "filter": "Φίλτρο" + }, + "placeholder": { + "filterPlaylist": "Εισάγετε όνομα λίστας αναπαραγωγής" }, "table": { - "error": { - "value": { - "httpError": "Ένα σφάλμα HTTP συνέβη κατά την επικοινωνία με τον απομακρυσμένο εξυπηρετητή", - "invalidAttributesError": "Τα δεδομένα που πάρθηκαν από τον απομακρυσμένο server είχαν μη έγκυρα ή ελλιπής χαρακτηριστικά" - }, - "label": { - "type": "Τύπος σφάλματος" + "edit": { + "header": { + "edit": "Επεξεργασία" } } }, - "button": { - "close": "Κλείσιμο", - "reload": "Κλείσιμο και ανανέωση σελίδας" - }, - "header": { - "saveFailure": "Σφάλμα κατά την αποθήκευση ρυθμίσεων" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Συντομεύσεις αναπαραγωγής", - "clearQueue": "Καθάρισμα ουράς", - "decreaseVolume": "Μείωση έντασης" - }, - "general": { - "label": "Γενικές συντομεύσεις" + "warning": { + "duplicate": "Το { 0 } είναι ήδη στην λίστα { 1 }." } }, - "button": { - "close": "Κλείσιμο" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Ακύρωση" - }, - "header": { - "chooseInstance": "Επιλέξτε το instance σας" - } - }, - "Queue": { - "button": { - "clear": "Καθάρισμα", - "close": "Κλείσιμο" - }, - "label": { - "duration": "Διάρκεια", - "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…" - } - }, - "forms": { - "PasswordInput": { + "TrackPlaylistIcon": { "button": { - "copy": "Αντιγραφή" + "add": "Προσθήκη στην λίστα αναπαραγωγής…" + } + }, + "Widget": { + "button": { + "create": "Δημιουργία Λίστας Αναπαραγωγής" } } }, @@ -1461,704 +1626,6 @@ "edit": "Επεξεργασία" } } - }, - "RemoteSearchForm": { - "button": { - "fediverse": "Fediverse" - }, - "label": { - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml" - } - } - }, - "PageNotFound": { - "link": { - "home": "Πηγαίνετε στην αρχική σελίδα" - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } επεισόδιο | { n } επεισόδια", - "listenings": "{ n } ακρόαση | { n } ακροάσεις", - "subscribers": "{ n } εγγεγραμμένος | { n } εγγεγραμμένοι", - "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "link": { - "channelEpisodes": "Όλα τα Επεισόδια" - }, - "header": { - "artistChannel": "Κανάλι καλλιτέχνη" - }, - "button": { - "cancel": "Ακύρωση", - "confirm": "Διαγραφή", - "delete": "Διαγραφή…", - "edit": "Επεξεργασία…", - "embed": "Ενσωμάτωση" - }, - "title": "Κανάλι", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Αντιγράψτε και επικολλήστε τον ακόλουθο σύνδεσμο στο αγαπημένο σας podcatcher:" - } - }, - "fediverse": { - "content": { - "help": "Εάν χρησιμοποιείτε το Mastodon ή άλλες εφαρμογές του fediverse, μπορείτε να γίνετε συνδρομητές σε αυτόν το λογαριασμό:" - } - } - }, - "delete": { - "header": "Διαγραφη του καναλιού;" - }, - "embed": { - "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Προσθήκη νέου" - }, - "header": { - "albums": "Άλμπουμ" - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Προσθήκη νέου" - }, - "button": { - "cancel": "Ακύρωση" - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } σε χρήση απο τα { max } διαθέσιμα" - }, - "header": { - "currentUsage": "Τρέχουσα χρήση" - } - }, - "FilesTable": { - "table": { - "file": { - "header": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης", - "duration": "Διάρκεια" - } - } - }, - "option": { - "status": { - "all": "Όλα", - "draft": "Προσχέδιο" - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "action": { - "delete": "Διαγραφή" - } - }, - "Home": { - "link": { - "createLibrary": "Δημιουργία νέας βιβλιοθήκης" - } - }, - "Form": { - "button": { - "create": "Δημιουργία βιβλιοθήκης", - "delete": "Διαγραφή", - "confirm": "Διαγραφή βιβλιοθήκης" - }, - "modal": { - "delete": { - "header": "Διαγραφή της βιβλιοθήκης;" - } - }, - "label": { - "description": "Περιγραφή" - }, - "header": { - "failure": "Σφάλμα" - } - } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια", - "failedTracks": "Αποτυχημένα κομμάτια:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Αν σταματήσετε να ακολουθείτε την βιβλιοθήκη, θα σταματήσετε να έχετε πρόσβαση στο περιεχόμενο της." - } - } - }, - "button": { - "cancel": "Ακύρωση αιτήματος ακόλουθου", - "follow": "Ακολούθησε" - }, - "link": { - "scanDetails": "Λεπτομέρειες" - } - }, - "ScanForm": { - "header": { - "failure": "Αποτυχία λήψης της απομακρυσμένης βιβλιοθήκης" - }, - "placeholder": { - "url": "Εισάγετε σύνδεσμο βιβλιοθήκης" - } - } - }, - "Home": { - "title": "Προσθήκη και διαχείριση περιεχομένου", - "description": { - "follow": "Ακολούθησε βιβλιοθήκες από άλλους χρήστες για να αποκτήσεις πρόσβαση σε νέα μουσική. Οι δημόσιες βιβλιοθήκες μπορούν να ακολουθηθούν άμεσα, ενώ σε ιδιωτικές βιβλιοθήκες απαιτείται έγκριση από τον ιδιοκτήτη της.", - "channel": { - "1": "Εάν είσαι μουσικός ή podcaster, τα κανάλια σχεδιάστηκαν για 'σένα!" - } - }, - "header": { - "follow": "Ακολούθησε απομακρυσμένες βιβλιοθήκες" - }, - "button": { - "start": "Ξεκινήστε" - } - }, - "Base": { - "title": "Προσθήκη περιεχομένου" - } - }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "button": { - "edit": "Επεξεργασία" - } - }, - "Edit": { - "button": { - "accept": "Αποδοχή" - }, - "table": { - "action": { - "status": { - "accepted": "Αποδεκτό" - }, - "header": { - "action": "ενέργεια", - "date": "Ημερομηνία" - } - } - }, - "header": { - "followers": "Ακόλουθοι" - } - } - }, - "auth": { - "ProfileBase": { - "title": "προφίλ του { username }", - "link": { - "activity": "Δραστηριότητα" - } - }, - "PasswordReset": { - "label": { - "email": "Διεύθυνση e-mail λογαριασμού" - }, - "button": { - "requestReset": "Επαναφορά κωδικού" - }, - "link": { - "back": "Πίσω στην σύνδεση" - } - }, - "ProfileOverview": { - "link": { - "addNew": "Προσθήκη νέου" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Κανάλι καλλιτέχνη" - }, - "header": "Δημιουργία καναλιού" - } - }, - "button": { - "cancel": "Ακύρωση", - "createChannel": "Δημιουργία καναλιού" - }, - "header": { - "channels": "Κανάλια" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Πίσω στην σύνδεση" - }, - "title": "Αλλαγή κωδικού", - "message": { - "requestSent": "Εάν η διεύθυνση e-mail που δόθηκε στο προηγούμενο βήμα είναι έγκυρη και συνδεδεμένη με ένα λογαριασμό χρήστη, θα πρέπει να παραλάβετε ένα e-mail με οδηγίες επαναφοράς στα επόμενα λεπτά." - } - }, - "EmailConfirm": { - "title": "Επιβεβαίωση της διεύθυνσης e-mail σας", - "label": { - "confirmationCode": "Κωδικός επιβεβαίωσης" - }, - "header": { - "failure": "Δεν μπορέσαμε να επιβεβαιώσουμε την διεύθυνση e-mail σας", - "success": "Η διεύθυνση e-mail επιβεβαιώθηκε" - } - }, - "Signup": { - "header": { - "createAccount": "Δημιουργία Funkwhale λογαριασμού" - } - } - }, - "Notifications": { - "option": { - "delay": { - "30": "30 ημέρες", - "60": "60 ημέρες", - "90": "90 ημέρες" - } - }, - "link": { - "help": "Ανακαλύψτε άλλους τρόπους να βοηθήσετε", - "donate": "Δωρεά" - }, - "header": { - "funkwhaleSupport": "Σας αρέσει το Funkwhale;" - } - }, - "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Πρόσβαση σε αγαπημένα", - "loginStatus": { - "disabled": "Απενεργοποιημένο", - "enabled": "Ενεργό" - }, - "displayName": "Εμφανιζόμενο όνομα", - "email": "Διεύθυνση Email" - }, - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - } - }, - "header": { - "accountData": "Στοιχεία λογαριασμού", - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "button": { - "addPolicy": "Προσθήκη πολιτικής συντονισμού" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια", - "domain": "Διεύθυνση" - }, - "tooltip": { - "uploadQuota": "Καθορίστε πόσο περιεχόμενο μπορεί να ανεβάσει ο χρήστης. Αφήστε το κενό για να χρησιμοποιηθεί η προκαθορισμένη τιμή." - } - }, - "Base": { - "link": { - "accounts": "Λογαριασμοί", - "domains": "Διευθύνσεις" - } - }, - "DomainsDetail": { - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "button": { - "addPolicy": "Προσθήκη πολιτικής συντονισμού", - "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - } - } - }, - "DomainsList": { - "button": { - "add": "Προσθήκη" - }, - "label": { - "addDomain": "Προσθήκη διεύθυνσης", - "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" - }, - "title": "Διευθύνσεις", - "header": { - "domains": "Διευθύνσεις", - "failure": "Σφάλμα κατά τη δημιουργία διεύθυνσης" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Όλα" - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Όλα", - "approved": "Eγκρίθηκε" - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Ημερομηνία πρόσβασης" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Μέγεθος στην προσωρινή μνήμη", - "duration": "Διάρκεια" - } - }, - "link": { - "account": "Λογαριασμός", - "domain": "Διεύθυνση" - }, - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "button": { - "delete": "Διαγραφή", - "download": "Λήψη" - }, - "modal": { - "delete": { - "header": "Διαγραφή της μεταφόρτωσης;" - } - } - }, - "LibraryDetail": { - "link": { - "account": "Λογαριασμός", - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "domain": "Διεύθυνση" - }, - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "library": { - "description": "Περιγραφή" - }, - "activity": { - "followers": "Ακόλουθοι" - } - }, - "button": { - "delete": "Διαγραφή" - }, - "modal": { - "delete": { - "header": "Διαγραφή της βιβλιοθήκης;" - } - } - }, - "AlbumDetail": { - "header": { - "activity": "Δραστηριότητα", - "albumData": "Στοιχεία άλμπουμ", - "audioContent": "Περιεχόμενο ήχου" - }, - "link": { - "artist": "Καλλιτέχνης", - "domain": "Διεύθυνση", - "edits": "Επεξεργασίες" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "album": { - "description": "Περιγραφή" - }, - "activity": { - "favorited": "Αγαπημένα κομμάτια" - } - }, - "button": { - "delete": "Διαγραφή", - "edit": "Επεξεργασία" - }, - "modal": { - "delete": { - "header": "Διαγραφή του άλμπουμ;" - } - } - }, - "ArtistDetail": { - "header": { - "activity": "Δραστηριότητα", - "artistData": "Δεδομένα καλλιτέχνη", - "audioContent": "Περιεχόμενο ήχου" - }, - "link": { - "albums": "Άλμπουμ", - "category": "Κατηγορία", - "domain": "Διεύθυνση", - "edits": "Επεξεργασίες" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "artist": { - "description": "Περιγραφή" - }, - "activity": { - "favorited": "Αγαπημένα κομμάτια" - } - }, - "button": { - "delete": "Διαγραφή", - "edit": "Επεξεργασία" - }, - "modal": { - "delete": { - "header": "Διαγραφή του καλλιτέχνη;" - } - } - }, - "TagDetail": { - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "button": { - "delete": "Διαγραφή" - }, - "modal": { - "delete": { - "header": "Διαγραφή της ετικέτας;" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Δραστηριότητα" - }, - "link": { - "album": "Άλμπουμ", - "albumArtist": "Καλλιτέχνης Άλμπουμ", - "artist": "Καλλιτέχνης", - "domain": "Διεύθυνση", - "edits": "Επεξεργασίες" - }, - "table": { - "trackData": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "track": { - "copyright": "Πνευματικά Δικαιώματα", - "description": "Περιγραφή", - "discNumber": "Αριθμός δίσκου" - }, - "activity": { - "favorited": "Αγαπημένα κομμάτια" - } - }, - "button": { - "delete": "Διαγραφή", - "edit": "Επεξεργασία" - }, - "modal": { - "delete": { - "header": "Διαγραφή του κομματιού;" - } - } - }, - "Base": { - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια", - "edits": "Επεξεργασίες" - } - }, - "EditsList": { - "title": "Επεξεργασίες" - } - }, - "ChannelDetail": { - "table": { - "channelData": { - "account": "Λογαριασμός", - "category": "Κατηγορία", - "description": "Περιγραφή", - "domain": "Διεύθυνση" - }, - "audioContent": { - "albums": "Άλμπουμ", - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "activity": { - "edits": "Επεξεργασίες", - "favorited": "Αγαπημένα κομμάτια" - } - }, - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου", - "channelData": "Στοιχεία καναλιού" - }, - "button": { - "delete": "Διαγραφή" - }, - "modal": { - "delete": { - "header": "Διαγραφή του καναλιού;" - } - } - }, - "CommonList": { - "title": { - "accounts": "Λογαριασμοί", - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια" - } - }, - "Settings": { - "header": { - "channels": "Κανάλια" - } - } - }, - "Search": { - "label": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - } - }, - "playlists": { - "List": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στις λίστες αναπαραγωγής" - }, - "button": { - "create": "Δημιουργία λίστας αναπαραγωγής" - }, - "placeholder": { - "search": "Εισάγετε όνομα λίστας αναπαραγωγής…" - } - }, - "Detail": { - "button": { - "cancel": "Ακύρωση", - "delete": "Διαγραφή", - "confirm": "Διαγραφή λίστας αναπαραγωγής", - "edit": "Επεξεργασία", - "embed": "Ενσωμάτωση" - }, - "modal": { - "delete": { - "header": "Θέλετε να διαγράψετε την λίστα αναπαραγωγής \"{ playlist }\";" - }, - "embed": { - "header": "Ενσωμάτωση της λίστας αναπαραγωγής στην ιστοσελίδα σας" - } - } - } - }, - "radios": { - "Detail": { - "button": { - "confirm": "Διαγραφή ράδιο", - "edit": "Επεξεργασία…" - }, - "modal": { - "delete": { - "header": "Θέλετε να διαγράψετε το ράδιο \"{ radio }\";" - } - } - } } }, "composables": { @@ -2169,45 +1636,37 @@ }, "locale": { "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Πρόσβαση σε αρχεία ήχου, βιβλιοθήκες, καλλιτέχνες, άλμπουμ και κομμάτια" + "fields": { + "contentCategory": { + "label": "Κατηγορία περιεχομένου" }, - "filters": { - "description": "Πρόσβαση σε φίλτρα περιεχομένου", - "label": "Φίλτρα περιεχομένου" + "importStatus": { + "choices": { + "draft": { + "label": "Προσχέδιο" + } + }, + "label": "Κάντε κλικ για εμφανιστούν περισσότερες πληροφορίες σχετικά με την διαδικασία εισαγωγής για αυτήν την μεταφόρτωση" }, - "profile": { - "description": "Πρόσβαση σε e-mail, όνομα χρήστη και πληροφορίες προφίλ" + "privacyLevel": { + "choices": { + "instance": "Όλοι σε αυτό το instance", + "public": "Όλοι, μεταξύ όλων των instances" + }, + "help": "Καθορίστε το επίπεδο ορατότητας της δραστηριότητας σας", + "label": "Ορατότητα δραστηριότητας", + "shortChoices": { + "public": "Όλοι" + } }, - "edits": { - "description": "Πρόσβαση σε επεξεργασίες", - "label": "Επεξεργασίες" + "reportType": { + "choices": { + "illegalContent": "Παράνομο περιεχόμενο" + }, + "label": "Κατηγορία" }, - "follows": { - "description": "Πρόσβαση σε ακολούθους", - "label": "Ακολουθούν" - }, - "listenings": { - "description": "Πρόσβαση στο ιστορικό ακρόασης" - }, - "reports": { - "description": "Πρόβαση στις αναφορές" - }, - "notifications": { - "description": "Πρόσβαση στις ειδοποιήσεις" - }, - "playlists": { - "description": "Πρόσβαση στις λίστες αναπαραγωγής" - }, - "radios": { - "description": "Πρόσβαση στα ράδιο" - }, - "security": { - "description": "Πρόσβαση σε ρυθμίσεις ασφαλείας όπως κωδικός και εξουσιοδότηση" - }, - "favorites": { - "label": "Αγαπημένα" + "summary": { + "label": "Βιογραφία" } }, "filters": { @@ -2221,42 +1680,58 @@ "expirationDate": "Ημερομηνία λήξης", "followers": "Ακόλουθοι" }, - "fields": { - "privacyLevel": { - "label": "Ορατότητα δραστηριότητας", - "help": "Καθορίστε το επίπεδο ορατότητας της δραστηριότητας σας", - "shortChoices": { - "public": "Όλοι" - }, - "choices": { - "instance": "Όλοι σε αυτό το instance", - "public": "Όλοι, μεταξύ όλων των instances" - } + "scopes": { + "edits": { + "description": "Πρόσβαση σε επεξεργασίες", + "label": "Επεξεργασίες" }, - "summary": { - "label": "Βιογραφία" + "favorites": { + "label": "Αγαπημένα" }, - "reportType": { - "label": "Κατηγορία", - "choices": { - "illegalContent": "Παράνομο περιεχόμενο" - } + "filters": { + "description": "Πρόσβαση σε φίλτρα περιεχομένου", + "label": "Φίλτρα περιεχομένου" }, - "importStatus": { - "label": "Κάντε κλικ για εμφανιστούν περισσότερες πληροφορίες σχετικά με την διαδικασία εισαγωγής για αυτήν την μεταφόρτωση", - "choices": { - "draft": { - "label": "Προσχέδιο" - } - } + "follows": { + "description": "Πρόσβαση σε ακολούθους", + "label": "Ακολουθούν" }, - "contentCategory": { - "label": "Κατηγορία περιεχομένου" + "libraries": { + "description": "Πρόσβαση σε αρχεία ήχου, βιβλιοθήκες, καλλιτέχνες, άλμπουμ και κομμάτια" + }, + "listenings": { + "description": "Πρόσβαση στο ιστορικό ακρόασης" + }, + "notifications": { + "description": "Πρόσβαση στις ειδοποιήσεις" + }, + "playlists": { + "description": "Πρόσβαση στις λίστες αναπαραγωγής" + }, + "profile": { + "description": "Πρόσβαση σε e-mail, όνομα χρήστη και πληροφορίες προφίλ" + }, + "radios": { + "description": "Πρόσβαση στα ράδιο" + }, + "reports": { + "description": "Πρόβαση στις αναφορές" + }, + "security": { + "description": "Πρόσβαση σε ρυθμίσεις ασφαλείας όπως κωδικός και εξουσιοδότηση" } } } }, "moderation": { + "useEditConfigs": { + "description": { + "label": "Περιγραφή" + }, + "track": { + "copyright": "Πνευματικά Δικαιώματα" + } + }, "useReport": { "account": { "typeLabel": "Λογαριασμός" @@ -2285,22 +1760,14 @@ "channel": { "label": "Κανάλι" }, - "track": { - "copyright": "Πνευματικά Δικαιώματα" - }, "creationDate": { "label": "Ημερομηνία δημιουργίας" }, "library": { "description": "Περιγραφή" - } - }, - "useEditConfigs": { + }, "track": { "copyright": "Πνευματικά Δικαιώματα" - }, - "description": { - "label": "Περιγραφή" } } }, @@ -2312,5 +1779,688 @@ "serviceWorker": { "newAppVersion": "Μια νέα έκδοση της εφαρμογής είναι διαθέσιμη." } + }, + "views": { + "Notifications": { + "header": { + "funkwhaleSupport": "Σας αρέσει το Funkwhale;" + }, + "link": { + "donate": "Δωρεά", + "help": "Ανακαλύψτε άλλους τρόπους να βοηθήσετε" + }, + "option": { + "delay": { + "30": "30 ημέρες", + "60": "60 ημέρες", + "90": "90 ημέρες" + } + } + }, + "Search": { + "label": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "Διαγραφή" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου", + "channelData": "Στοιχεία καναλιού" + }, + "modal": { + "delete": { + "header": "Διαγραφή του καναλιού;" + } + }, + "table": { + "activity": { + "edits": "Επεξεργασίες", + "favorited": "Αγαπημένα κομμάτια" + }, + "audioContent": { + "albums": "Άλμπουμ", + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + }, + "channelData": { + "account": "Λογαριασμός", + "category": "Κατηγορία", + "description": "Περιγραφή", + "domain": "Διεύθυνση" + } + } + }, + "CommonList": { + "title": { + "accounts": "Λογαριασμοί", + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια" + } + }, + "Settings": { + "header": { + "channels": "Κανάλια" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Διαγραφή", + "edit": "Επεξεργασία" + }, + "header": { + "activity": "Δραστηριότητα", + "albumData": "Στοιχεία άλμπουμ", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "artist": "Καλλιτέχνης", + "domain": "Διεύθυνση", + "edits": "Επεξεργασίες" + }, + "modal": { + "delete": { + "header": "Διαγραφή του άλμπουμ;" + } + }, + "table": { + "activity": { + "favorited": "Αγαπημένα κομμάτια" + }, + "album": { + "description": "Περιγραφή" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "ArtistDetail": { + "button": { + "delete": "Διαγραφή", + "edit": "Επεξεργασία" + }, + "header": { + "activity": "Δραστηριότητα", + "artistData": "Δεδομένα καλλιτέχνη", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "category": "Κατηγορία", + "domain": "Διεύθυνση", + "edits": "Επεξεργασίες" + }, + "modal": { + "delete": { + "header": "Διαγραφή του καλλιτέχνη;" + } + }, + "table": { + "activity": { + "favorited": "Αγαπημένα κομμάτια" + }, + "artist": { + "description": "Περιγραφή" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "Base": { + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια", + "edits": "Επεξεργασίες" + } + }, + "EditsList": { + "title": "Επεξεργασίες" + }, + "LibraryDetail": { + "button": { + "delete": "Διαγραφή" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "account": "Λογαριασμός", + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "domain": "Διεύθυνση" + }, + "modal": { + "delete": { + "header": "Διαγραφή της βιβλιοθήκης;" + } + }, + "table": { + "activity": { + "followers": "Ακόλουθοι" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + }, + "library": { + "description": "Περιγραφή" + } + } + }, + "TagDetail": { + "button": { + "delete": "Διαγραφή" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + }, + "modal": { + "delete": { + "header": "Διαγραφή της ετικέτας;" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Διαγραφή", + "edit": "Επεξεργασία" + }, + "header": { + "activity": "Δραστηριότητα" + }, + "link": { + "album": "Άλμπουμ", + "albumArtist": "Καλλιτέχνης Άλμπουμ", + "artist": "Καλλιτέχνης", + "domain": "Διεύθυνση", + "edits": "Επεξεργασίες" + }, + "modal": { + "delete": { + "header": "Διαγραφή του κομματιού;" + } + }, + "table": { + "activity": { + "favorited": "Αγαπημένα κομμάτια" + }, + "track": { + "copyright": "Πνευματικά Δικαιώματα", + "description": "Περιγραφή", + "discNumber": "Αριθμός δίσκου" + }, + "trackData": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "UploadDetail": { + "button": { + "delete": "Διαγραφή", + "download": "Λήψη" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "account": "Λογαριασμός", + "domain": "Διεύθυνση" + }, + "modal": { + "delete": { + "header": "Διαγραφή της μεταφόρτωσης;" + } + }, + "table": { + "activity": { + "accessedDate": "Ημερομηνία πρόσβασης" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate" + }, + "cachedSize": "Μέγεθος στην προσωρινή μνήμη", + "duration": "Διάρκεια" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Προσθήκη πολιτικής συντονισμού" + }, + "header": { + "accountData": "Στοιχεία λογαριασμού", + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια", + "domain": "Διεύθυνση" + }, + "table": { + "accountData": { + "displayName": "Εμφανιζόμενο όνομα", + "email": "Διεύθυνση Email", + "loginStatus": { + "disabled": "Απενεργοποιημένο", + "enabled": "Ενεργό" + }, + "username": "Πρόσβαση σε αγαπημένα" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + }, + "tooltip": { + "uploadQuota": "Καθορίστε πόσο περιεχόμενο μπορεί να ανεβάσει ο χρήστης. Αφήστε το κενό για να χρησιμοποιηθεί η προκαθορισμένη τιμή." + } + }, + "Base": { + "link": { + "accounts": "Λογαριασμοί", + "domains": "Διευθύνσεις" + } + }, + "DomainsDetail": { + "button": { + "addPolicy": "Προσθήκη πολιτικής συντονισμού", + "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια" + }, + "table": { + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "DomainsList": { + "button": { + "add": "Προσθήκη" + }, + "header": { + "domains": "Διευθύνσεις", + "failure": "Σφάλμα κατά τη δημιουργία διεύθυνσης" + }, + "label": { + "addDomain": "Προσθήκη διεύθυνσης", + "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" + }, + "title": "Διευθύνσεις" + }, + "ReportsList": { + "option": { + "status": { + "all": "Όλα" + } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + }, + "RequestsList": { + "option": { + "status": { + "all": "Όλα", + "approved": "Eγκρίθηκε" + } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + } + } + }, + "auth": { + "EmailConfirm": { + "header": { + "failure": "Δεν μπορέσαμε να επιβεβαιώσουμε την διεύθυνση e-mail σας", + "success": "Η διεύθυνση e-mail επιβεβαιώθηκε" + }, + "label": { + "confirmationCode": "Κωδικός επιβεβαίωσης" + }, + "title": "Επιβεβαίωση της διεύθυνσης e-mail σας" + }, + "PasswordReset": { + "button": { + "requestReset": "Επαναφορά κωδικού" + }, + "label": { + "email": "Διεύθυνση e-mail λογαριασμού" + }, + "link": { + "back": "Πίσω στην σύνδεση" + } + }, + "PasswordResetConfirm": { + "link": { + "back": "Πίσω στην σύνδεση" + }, + "message": { + "requestSent": "Εάν η διεύθυνση e-mail που δόθηκε στο προηγούμενο βήμα είναι έγκυρη και συνδεδεμένη με ένα λογαριασμό χρήστη, θα πρέπει να παραλάβετε ένα e-mail με οδηγίες επαναφοράς στα επόμενα λεπτά." + }, + "title": "Αλλαγή κωδικού" + }, + "ProfileBase": { + "link": { + "activity": "Δραστηριότητα" + }, + "title": "προφίλ του { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Ακύρωση", + "createChannel": "Δημιουργία καναλιού" + }, + "header": { + "channels": "Κανάλια" + }, + "link": { + "addNew": "Προσθήκη νέου" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Κανάλι καλλιτέχνη" + }, + "header": "Δημιουργία καναλιού" + } + } + }, + "Signup": { + "header": { + "createAccount": "Δημιουργία Funkwhale λογαριασμού" + } + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Διαγραφή", + "delete": "Διαγραφή…", + "edit": "Επεξεργασία…", + "embed": "Ενσωμάτωση" + }, + "header": { + "artistChannel": "Κανάλι καλλιτέχνη" + }, + "link": { + "channelEpisodes": "Όλα τα Επεισόδια" + }, + "meta": { + "episodes": "{ n } επεισόδιο | { n } επεισόδια", + "listenings": "{ n } ακρόαση | { n } ακροάσεις", + "subscribers": "{ n } εγγεγραμμένος | { n } εγγεγραμμένοι", + "tracks": "{ n } κομμάτι | { n } κομμάτια" + }, + "modal": { + "delete": { + "header": "Διαγραφη του καναλιού;" + }, + "embed": { + "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Εάν χρησιμοποιείτε το Mastodon ή άλλες εφαρμογές του fediverse, μπορείτε να γίνετε συνδρομητές σε αυτόν το λογαριασμό:" + } + }, + "rss": { + "content": { + "help": "Αντιγράψτε και επικολλήστε τον ακόλουθο σύνδεσμο στο αγαπημένο σας podcatcher:" + } + } + } + }, + "title": "Κανάλι" + }, + "DetailOverview": { + "header": { + "albums": "Άλμπουμ" + }, + "link": { + "addAlbum": "Προσθήκη νέου" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Ακύρωση" + }, + "link": { + "addNew": "Προσθήκη νέου" + } + } + }, + "content": { + "Base": { + "title": "Προσθήκη περιεχομένου" + }, + "Home": { + "button": { + "start": "Ξεκινήστε" + }, + "description": { + "channel": { + "1": "Εάν είσαι μουσικός ή podcaster, τα κανάλια σχεδιάστηκαν για 'σένα!" + }, + "follow": "Ακολούθησε βιβλιοθήκες από άλλους χρήστες για να αποκτήσεις πρόσβαση σε νέα μουσική. Οι δημόσιες βιβλιοθήκες μπορούν να ακολουθηθούν άμεσα, ενώ σε ιδιωτικές βιβλιοθήκες απαιτείται έγκριση από τον ιδιοκτήτη της." + }, + "header": { + "follow": "Ακολούθησε απομακρυσμένες βιβλιοθήκες" + }, + "title": "Προσθήκη και διαχείριση περιεχομένου" + }, + "libraries": { + "Card": { + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + }, + "FilesTable": { + "action": { + "delete": "Διαγραφή" + }, + "option": { + "status": { + "all": "Όλα", + "draft": "Προσχέδιο" + } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "table": { + "file": { + "header": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "duration": "Διάρκεια" + } + } + } + }, + "Form": { + "button": { + "confirm": "Διαγραφή βιβλιοθήκης", + "create": "Δημιουργία βιβλιοθήκης", + "delete": "Διαγραφή" + }, + "header": { + "failure": "Σφάλμα" + }, + "label": { + "description": "Περιγραφή" + }, + "modal": { + "delete": { + "header": "Διαγραφή της βιβλιοθήκης;" + } + } + }, + "Home": { + "link": { + "createLibrary": "Δημιουργία νέας βιβλιοθήκης" + } + }, + "Quota": { + "header": { + "currentUsage": "Τρέχουσα χρήση" + }, + "label": { + "currentUsage": "{ current } σε χρήση απο τα { max } διαθέσιμα" + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Ακύρωση αιτήματος ακόλουθου", + "follow": "Ακολούθησε" + }, + "link": { + "scanDetails": "Λεπτομέρειες" + }, + "meta": { + "failedTracks": "Αποτυχημένα κομμάτια:", + "tracks": "{ n } κομμάτι | { n } κομμάτια" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Αν σταματήσετε να ακολουθείτε την βιβλιοθήκη, θα σταματήσετε να έχετε πρόσβαση στο περιεχόμενο της." + } + } + } + }, + "ScanForm": { + "header": { + "failure": "Αποτυχία λήψης της απομακρυσμένης βιβλιοθήκης" + }, + "placeholder": { + "url": "Εισάγετε σύνδεσμο βιβλιοθήκης" + } + } + } + }, + "library": { + "Edit": { + "button": { + "accept": "Αποδοχή" + }, + "header": { + "followers": "Ακόλουθοι" + }, + "table": { + "action": { + "header": { + "action": "ενέργεια", + "date": "Ημερομηνία" + }, + "status": { + "accepted": "Αποδεκτό" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Επεξεργασία" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + }, + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Διαγραφή λίστας αναπαραγωγής", + "delete": "Διαγραφή", + "edit": "Επεξεργασία", + "embed": "Ενσωμάτωση" + }, + "modal": { + "delete": { + "header": "Θέλετε να διαγράψετε την λίστα αναπαραγωγής \"{ playlist }\";" + }, + "embed": { + "header": "Ενσωμάτωση της λίστας αναπαραγωγής στην ιστοσελίδα σας" + } + } + }, + "List": { + "button": { + "create": "Δημιουργία λίστας αναπαραγωγής" + }, + "header": { + "browse": "Περιήγηση στις λίστες αναπαραγωγής" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "placeholder": { + "search": "Εισάγετε όνομα λίστας αναπαραγωγής…" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "Διαγραφή ράδιο", + "edit": "Επεξεργασία…" + }, + "modal": { + "delete": { + "header": "Θέλετε να διαγράψετε το ράδιο \"{ radio }\";" + } + } + } + } } } diff --git a/front/src/locales/en_GB.json b/front/src/locales/en_GB.json index 813562fb0..7dfb9d60f 100644 --- a/front/src/locales/en_GB.json +++ b/front/src/locales/en_GB.json @@ -1,1459 +1,66 @@ { + "App": { + "loading": "Loading…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{app_name} wants to access your Funkwhale account", - "authorize": "Authorise third-party app", - "authorizeFailure": "Error while fetching application data", - "fetchFailure": "Error while fetching application data", - "allScopes": "Full access", - "readOnly": "Read-only", - "writeOnly": "Write-only" - }, - "title": "Allow application", - "button": { - "authorize": "Authorize {app}" - }, - "help": { - "pasteCode": "Copy-paste the following code in the application:", - "redirect": "You will be redirected to { 0 }", - "copyCode": "You will be shown a code to copy-paste in the application" - }, - "message": { - "unknownPermissions": "The application is also requesting the following unknown permissions:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Access disabled", - "passwordUpdated": "Password updated", - "unavailable": "The Subsonic API is not available on this Funkwhale instance." - }, - "button": { - "confirmDisable": "Disable access", - "disable": "Disable Subsonic access", - "newPassword": "Request a new password", - "confirmNewPassword": "Request a password" - }, - "modal": { - "disableSubsonic": { - "header": "Disable Subsonic API access?", - "content": { - "warning": "This will completely disable access to the Subsonic API using from account." - } - }, - "newPassword": { - "header": "Request a new Subsonic API password?", - "content": { - "warning": "This will log you out from existing devices that use the current password." - } - } - }, - "link": { - "apps": "Discover how to use Funkwhale from other apps" - }, - "header": { - "error": "Error", - "subsonic": "Subsonic API password" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale is compatible with other music players that support the Subsonic API.", - "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below.", - "paragraph2": "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." - } - }, - "label": { - "subsonicField": "Your subsonic API password" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Access token", - "appId": "Application ID", - "appSecret": "Application secret" - }, - "header": { - "appDetails": "Application Details", - "editApp": "Edit application", - "appSecretWarning": "Keep a copy of this token in a safe place." - }, - "help": { - "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." - }, - "link": { - "settings": "Back to settings" - }, - "title": "Edit application", - "button": { - "regenerateToken": "Regenerate token" - }, - "message": { - "appSecretWarning": "You won't be able to see it again once you leave this screen." - } - }, - "Settings": { - "title": "Account Settings", - "header": { - "accountSettings": "Account settings", - "authorizedApps": "Authorised apps", - "avatar": "Avatar", - "changeEmail": "Change my e-mail address", - "changePassword": "Change my password", - "contentFilters": "Content filters", - "deleteAccount": "Delete my account", - "hiddenArtists": "Hidden artists", - "plugins": "Plugins", - "settingsUpdated": "Settings updated", - "emailFailure": "We cannot change your e-mail address", - "accountFailure": "We cannot delete your account", - "noApps": "You don't have any application connected with your account.", - "noPersonalApps": "You don't have registered any application yet.", - "yourApps": "Your applications", - "avatarFailure": "Your avatar cannot be saved", - "passwordFailure": "Your password cannot be changed", - "updateFailure": "Your settings can't be updated" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Application", - "permissions": "Permissions" - } - }, - "yourApps": { - "header": { - "application": "Application", - "creationDate": "Creation date", - "scopes": "Scopes" - } - }, - "artists": { - "header": { - "creationDate": "Creation date", - "name": "Name" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Current password", - "newEmail": "New e-mail address", - "newPassword": "New password", - "password": "Password" - }, - "button": { - "password": "Change password", - "delete": "Delete", - "deleteAccountConfirm": "Delete my account", - "deleteAccount": "Delete my account…", - "disableSubsonic": "Disable access", - "edit": "Edit", - "refresh": "Refresh", - "remove": "Remove", - "removeApp": "Remove application", - "revoke": "Revoke", - "revokeAccess": "Revoke access", - "update": "Update", - "updateSettings": "Update settings" - }, - "description": { - "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", - "changePassword": { - "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", - "paragraph2": "You will have to update your password on your clients that use this password." - }, - "contentFilters": "Content filters help you hide content you don't want to see on the service.", - "authorizedApps": "This is the list of applications that have access to your account data.", - "yourApps": "This is the list of applications that you have registered.", - "plugins": "Use plugins to extend Funkwhale and get additional features.", - "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." - }, - "modal": { - "changePassword": { - "header": "Change your password?", - "content": { - "warning": "Changing your password will have the following consequences", - "logout": "You will be logged out from this session and have to log in with the new one", - "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" - } - }, - "deleteAccount": { - "header": "Do you want to delete your account?", - "content": { - "warning": "This is irreversible and will permanently remove your data from our servers. You will be immediately logged out." - } - }, - "deleteApp": { - "header": "Remove application {app}?", - "content": { - "warning": "This will permanently remove the application and all the associated tokens." - } - }, - "revokeApp": { - "header": "Revoke access for application {app}?", - "content": { - "warning": "This will prevent this application from accessing the service on your behalf." - } - } - }, - "help": { - "noApps": "If you authorise third-party applications to access your data, those applications will be listed here.", - "changePassword": "Please double-check your password is correct", - "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." - }, - "link": { - "managePlugins": "Manage plugins", - "newApp": "Register a new application" - }, - "warning": { - "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." - }, - "message": { - "currentEmail": "Your current e-mail address is {email}", - "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly" - } - }, - "Logout": { - "header": { - "confirm": "Are you sure you want to log out?", - "unauthenticated": "You aren't currently logged in" - }, - "link": { - "login": "Log in!" - }, - "title": "Log out", - "button": { - "logout": "Yes, log me out!" - }, - "message": { - "loggedIn": "You are currently logged in as {username}" - } - }, - "ApplicationNew": { - "link": { - "settings": "Back to settings" - }, - "title": "Create a new application" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", - "read": { - "label": "Read", - "description": "Read-only access to user data" - }, - "write": { - "label": "Write", - "description": "Write-only access to user data" - }, - "label": "Scopes" - }, - "name": "Name", - "redirectUri": "Redirect URI" - }, - "button": { - "create": "Create application", - "update": "Update application" - }, - "help": { - "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." - }, - "header": { - "failure": "We cannot save your changes" - } - }, - "LoginForm": { - "link": { - "createAccount": "Create an account", - "resetPassword": "Reset your password" - }, - "placeholder": { - "username": "Enter your username or e-mail address" - }, - "help": { - "approvalRequired": "If you signed-up recently, you may need to wait before our moderation team review your account, or verify your e-mail address.", - "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." - }, - "button": { - "login": "Login" - }, - "label": { - "password": "Password", - "username": "Username or e-mail address" - }, - "header": { - "loginFailure": "We cannot log you in" - }, - "message": { - "redirect": "You will be redirected to {domain} to authenticate" - } - }, - "SignupForm": { - "button": { - "create": "Create my account" - }, - "label": { - "email": "E-mail address", - "password": "Password", - "username": "Username", - "invitation": "Invitation code" - }, - "placeholder": { - "email": "Enter your e-mail address", - "invitation": "Enter your invitation code (case insensitive)", - "username": "Enter your username" - }, - "header": { - "login": "Log in to your Funkwhale account", - "signupFailure": "Your account cannot be created." - }, - "message": { - "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", - "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval.", - "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", - "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login." - } - }, - "Plugin": { - "link": { - "documentation": "Documentation" - }, - "label": { - "pluginEnabled": "Enabled", - "library": "Library" - }, - "header": { - "failure": "Error while saving plugin" - }, - "description": { - "library": "Library where files should be imported." - }, - "button": { - "save": "Save", - "scan": "Scan" - } - } - }, "About": { - "stat": { - "activeUsers": "No active users | {n} active user | {n} active users", - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" + "description": { + "findApp": "Use Funkwhale on other devices with our apps.", + "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralised, open network.", + "publicContent": "Listen to public albums and playlists shared on this pod.", + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favourites, create playlists, discover new content and much more!" }, "header": { - "funkwhale": "A social platform to enjoy and share music", "aboutPod": "About this pod", - "publicContent": "Browse public content", "findApp": "Find an app", + "funkwhale": "A social platform to enjoy and share music", + "publicContent": "Browse public content", "signup": "Sign up" }, - "title": "About", + "help": { + "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, "link": { "findOtherPod": "Find another pod", "learnMore": "Learn more" }, - "description": { - "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralised, open network.", - "publicContent": "Listen to public albums and playlists shared on this pod.", - "signup": "Sign up now to keep a track of your favourites, create playlists, discover new content and much more!", - "findApp": "Use Funkwhale on other devices with our apps.", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!" + "message": { + "greeting": "Hello {username}", + "loggedIn": "You're already signed in!" }, "placeholder": { "noDescription": "No description available" }, - "message": { - "loggedIn": "You're already signed in!", - "greeting": "Hello {username}" - }, - "help": { - "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." - } - }, - "Home": { "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "header": { - "aboutFunkwhale": "About Funkwhale", - "about": "About this Funkwhale pod", - "contact": "Contact", - "login": "Log in", - "newChannels": "New channels", - "newAlbums": "Recently added albums", - "signup": "Sign up", - "statistics": "Statistics", - "links": "Useful links", - "welcome": "Welcome to {podName}!" - }, - "link": { - "publicContent": { - "label": "Browse public content", - "description": "Listen to public albums and playlists shared on this pod." - }, - "userGuides": { - "description": "Discover everything you need to know about Funkwhale and its features", - "label": "User guides" - }, - "findOtherPod": "Find another pod", - "learnMore": "Learn more", - "mobileApps": { - "label": "Mobile apps", - "description": "Use Funkwhale on other devices with our apps" - }, - "rules": "Server rules", - "viewMore": "View more…", - "funkwhale": "Visit funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers.", - "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralised, open network." - }, - "signup": "Sign up now to keep track of your favourites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!" - }, - "title": "Home", - "placeholder": { - "noDescription": "No description available" - }, - "help": { - "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks" - } - }, - "Widget": { - "button": { - "more": "Show more" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks" - }, - "title": "Updated on {date}" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - } - }, - "Widget": { - "button": { - "more": "Show more" - } - } - }, - "Player": { - "meta": { - "position": "{index} of {length}" - }, - "header": { - "player": "Audio player and controls" - }, - "label": { - "clearQueue": "Clear your queue", - "expandQueue": "Expand queue", - "addArtistContentFilter": "Hide content from this artist…", - "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", - "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", - "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", - "audioPlayer": "Media player", - "mute": "Mute", - "nextTrack": "Next track", - "pause": "Pause", - "play": "Play", - "previousTrack": "Previous track", - "shuffleQueue": "Shuffle your queue", - "unmute": "Unmute" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Add to current queue", - "addToPlaylist": "Add to playlist", - "episodeDetails": "Episode details", - "hideArtist": "Hide content from this artist", - "discretePlay": "Play", - "playAlbum": "Play album", - "playArtist": "Play artist", - "playNext": "Play next", - "playNow": "Play now", - "playPlaylist": "Play playlist", - "startRadio": "Play similar songs", - "playTrack": "Play track", - "playTracks": "Play tracks", - "report": "Report…", - "trackDetails": "Track details" - }, - "title": { - "more": "More…", - "unavailable": "This track is not available in any library you have access to" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Add to favourites", - "addToPlaylist": "Add to playlist", - "addToQueue": "Add to queue", - "episodeDetails": "Episode details", - "playNext": "Play next", - "playNow": "Play now", - "startRadio": "Play radio", - "removeFromFavorites": "Remove from favourites", - "trackDetails": "Track details", - "albumDetails": "View album", - "artistDetails": "View artist", - "channelDetails": "View channel", - "seriesDetails": "View series" - } - }, - "MobileRow": { - "button": { - "actions": "Show track actions" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Add to favourites", - "addToPlaylist": "Add to playlist", - "addToQueue": "Add to queue", - "episodeDetails": "Episode details", - "playNext": "Play next", - "playNow": "Play now", - "startRadio": "Play radio", - "removeFromFavorites": "Remove from favourites", - "trackDetails": "Track details", - "albumDetails": "View album", - "artistDetails": "View artist", - "channelDetails": "View channel", - "seriesDetails": "View series" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artist", - "title": "Title" - } - } - }, - "Widget": { - "empty": { - "noResults": "Nothing found" - }, - "button": { - "more": "Show more" - } - }, - "MobileRow": { - "button": { - "actions": "Show track actions" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Adjust volume" - }, - "button": { - "mute": "Mute", - "unmute": "Unmute" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artist", - "category": { - "federation": "Federation", - "podcasts": "Podcasts" - }, - "search": "Search for content", - "tag": "Tag", - "track": "Track" - }, - "link": { - "more": "More results 🡒", - "fediverse": "Search on the fediverse", - "rss": "Subscribe to podcast via RSS" - }, - "header": { - "noResults": "No matches found" - }, - "placeholder": { - "search": "Search for artists, albums, tracks…" - }, - "empty": { - "noResults": "Sorry, there are no results for this search" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artists", - "search": "Search for some music" - }, - "placeholder": { - "search": "Artist, album, track…" - }, - "empty": { - "noAlbums": "No album matched your query", - "noArtists": "No artist matched your query" - } - }, - "ChannelForm": { - "label": { - "discography": "Artist Discography", - "category": "Category", - "image": "Channel Picture", - "description": "Description", - "username": "Fediverse handle", - "language": "Language", - "name": "Name", - "email": "Owner e-mail address", - "owner": "Owner name", - "podcast": "Podcasts", - "subcategory": "Subcategory", - "tags": "Tags" - }, - "placeholder": { - "name": "Awesome channel name", - "username": "awesomechannelname" - }, - "header": { - "error": "Error while saving channel." - }, - "help": { - "podcast": "Host your episodes and keep your community updated.", - "discography": "Publish music you make as a nice discography of albums and singles.", - "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", - "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." - }, - "loader": { - "loading": "Loading" - }, - "legend": { - "purpose": "What will this channel be used for?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Cancel follow request", - "follow": "Follow", - "unfollow": "Unfollow" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copy" - }, - "help": { - "embed": "Copy/paste this code in your website HTML", - "width": "Leave empty for a responsive widget", - "anonymous": "Please contact your admins and ask them to update the corresponding setting." - }, - "label": { - "embed": "Embed code", - "height": "Widget height", - "width": "Widget width" - }, - "header": { - "preview": "Preview" - }, - "warning": { - "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." - }, - "message": { - "copy": "Text copied to clipboard!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Show more" - }, - "help": { - "subscribe": "You may need to subscribe to this channel to see its contents." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Show more" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "You may need to subscribe to this channel to see its content." - } - }, - "PlayerControls": { - "labels": { - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play" - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episode | { n } episodes", - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "addDescription": "Add a description…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } track in | { n } tracks in", - "albums": "{ n } album | { n } albums" - }, - "title": "Artist", - "button": { - "cancel": "Cancel", - "edit": "Edit", - "embed": "Embed", - "more": "More…", - "play": "Play all albums" - }, - "modal": { - "embed": { - "header": "Embed this artist work on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "wikipedia": "Search on Wikipedia", - "django": "View in Django's admin", - "domain": "View on { domain }", - "musicbrainz": "View on MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } track matching combined filters | { n } tracks matching combined filters", - "builder": "Builder", - "created": "Radio created", - "updated": "Radio updated" - }, - "table": { - "filter": { - "header": { - "actions": "Actions", - "candidates": "Candidates", - "config": "Config", - "exclude": "Exclude", - "name": "Filter name" - } - } - }, - "button": { - "filter": "Add filter", - "save": "Save" - }, - "label": { - "filter": "Add filters to customise your radio", - "description": "Description", - "public": "Display publicly", - "name": "Radio name" - }, - "placeholder": { - "description": "My awesome description", - "name": "My awesome radio" - }, - "title": "Radio Builder", - "option": { - "filter": "Select a filter" - }, - "description": { - "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." - } - }, - "Filter": { - "cancelButton": "Cancel", - "excludeLabel": "Exclude", - "removeButton": "Remove", - "matchingTracksModalHeader": "Tracks matching filter" - } - }, - "FileUpload": { - "tooltip": { - "network": "A network error occurred while uploading this file", - "size": "Cannot upload this file, ensure it is not too big", - "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are { extensions }", - "retry": "Retry", - "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", - "timeout": "Upload timeout, please try again" - }, - "table": { - "upload": { - "header": { - "actions": "Actions", - "filename": "Filename", - "size": "Size", - "status": "Status" - }, - "status": { - "pending": "Pending", - "uploaded": "Uploaded", - "uploading": "Uploading…" - } - } - }, - "button": { - "cancel": "Cancel", - "retry": "Retry failed uploads" - }, - "label": { - "uploadWidget": "Click to select files to upload or drag and drop files or directories", - "remainingSpace": "Remaining storage space", - "extensions": "Supported extensions: { extensions }" - }, - "header": { - "failure": "Error while launching import", - "server": "Import status", - "status": "Import status", - "local": "Upload music from your local storage" - }, - "link": { - "processing": "Processing", - "uploading": "Uploading", - "picard": "We recommend using Picard for that purpose." - }, - "description": { - "import": "Results of your import:", - "previousImport": "Results of your previous import:" - }, - "message": { - "local": { - "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", - "tag": "The music files you are uploading are tagged properly.", - "message": "You are about to upload music to your library. Before proceeding, please ensure that:", - "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "A short summary describing your changes." - }, - "button": { - "cancel": "Cancel", - "clear": "Clear", - "reset": "Reset to initial value", - "showUnreviewed": "Restrict to unreviewed edits", - "showAll": "Show all edits", - "submit": "Submit and apply edit", - "new": "Submit another edit", - "suggest": "Submit suggestion" - }, - "header": { - "failure": "Error while submitting edit", - "recentEdits": "Recent edits", - "unreviewed": "Recent edits awaiting review", - "success": "Your edit was successfully submitted." - }, - "notApplicable": "N/A", - "empty": { - "suggestEdit": "Suggest a change using the form below." - }, - "label": { - "summary": "Summary (optional)" - }, - "message": { - "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." - } - }, - "Albums": { - "link": { - "addMusic": "Add some music" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing albums" - }, - "placeholder": { - "search": "Enter album title…" - }, - "empty": { - "noResults": "No results matching your query" - }, - "pagination": { - "results": "Results per page" - }, - "label": { - "search": "Search", - "tags": "Tags" - }, - "button": { - "search": "Search" - } - }, - "Artists": { - "button": { - "upload": "Add some music", - "search": "Search" - }, - "label": { - "search": "Artist name", - "excludeCompilation": "Exclude Compilation Artists", - "tags": "Tags" - }, - "title": "Artists", - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing artists" - }, - "empty": { - "noResults": "No results matching your query" - }, - "pagination": { - "results": "Results per page" - }, - "placeholder": { - "search": "Search…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artist", - "copyright": "Copyright", - "license": "License", - "series": "Series", - "url": "URL", - "year": "Year" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Downloads", - "duration": "Duration", - "size": "Size" - } - }, - "header": { - "episode": "Episode Details", - "library": "Related Libraries", - "playlists": "Related Playlists", - "release": "Release Details", - "track": "Track Details" - }, - "notApplicable": "N/A", - "description": { - "library": "This track is present in the following libraries:" - }, - "link": { - "musicbrainz": "View on MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artists", - "moderation": "Open in moderation interface" - }, - "header": { - "channels": "Channels", - "tracks": "Tracks" - } - }, - "ArtistDetail": { - "header": { - "album": "Albums by this artist", - "track": "New tracks by this artist", - "library": "User libraries" - }, - "button": { - "more": "Load more…", - "filter": "Remove filter" - }, - "link": { - "filter": "Review my filters" - }, - "description": { - "library": "This artist is present in the following libraries:" - }, - "message": { - "filter": "You are currently hiding content related to this artist." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "An error occurred during upload processing. You will find more information below.", - "unknownError": { - "message": "An unknown error occurred", - "label": "Unknown error" - }, - "invalidMetadata": { - "label": "Invalid metadata", - "message": "The metadata included in the file is invalid or some mandatory fields are missing." - } - }, - "button": { - "close": "Close" - }, - "table": { - "error": { - "debug": "Debug information", - "errorDetail": "Error detail", - "errorType": "Error type", - "help": "Getting help" - } - }, - "header": { - "importDetail": "Import detail" - }, - "link": { - "support": "Open a support thread (include the debug information below in your message)", - "documentation": "Read our documentation for this error" - }, - "message": { - "importDetail": "Upload is still pending and will soon be processed by the server.", - "importSuccess": "Upload was successfully processed by the server." - }, - "warning": { - "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." - } - }, - "EditCard": { - "button": { - "approve": "Approve", - "delete": "Delete", - "reject": "Reject" - }, - "status": { - "approved": "Approved", - "applied": "Approved and applied", - "pending": "Pending review", - "rejected": "Rejected" - }, - "modal": { - "delete": { - "header": "Delete this suggestion?" - }, - "content": { - "warning": "The suggestion will be completely removed, this action is irreversible." - } - }, - "table": { - "update": { - "header": { - "field": "Field", - "newValue": "New value", - "oldValue": "Old value" - }, - "notApplicable": "N/A" - } - }, - "header": { - "modification": "Modification { id }" - }, - "link": { - "track": "Track #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing podcasts" - }, - "button": { - "cancel": "Cancel", - "channel": "Create a Channel", - "search": "Search", - "subscribe": "Subscribe", - "feed": "Subscribe to feed" - }, - "empty": { - "noResults": "No results matching your query" - }, - "label": { - "search": "Podcast title", - "tags": "Tags" - }, - "title": "Podcasts", - "pagination": { - "results": "Results per page" - }, - "placeholder": { - "search": "Search…" - }, - "modal": { - "subscription": { - "header": "Subscription" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing radios", - "instance": "Instance radios", - "user": "User radios" - }, - "button": { - "add": "Create a radio", - "create": "Create your own radio" - }, - "placeholder": { - "search": "Enter a radio name…" - }, - "empty": { - "noResults": "No results matching your query" - }, - "title": "Radios", - "pagination": { - "results": "Results per page" - }, - "label": { - "search": "Search" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Cancel", - "delete": "Delete…", - "edit": "Edit", - "embed": "Embed", - "more": "More…" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this album on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "django": "View in Django's admin", - "domain": "View on { domain }", - "musicbrainz": "View on MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Cancel", - "delete": "Delete…", - "download": "Download", - "edit": "Edit", - "embed": "Embed", - "more": "More…", - "play": "Play" - }, - "modal": { - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this track on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "wikipedia": "Search on Wikipedia", - "django": "View in Django's admin", - "domain": "View on { domain }" - }, - "title": "Track" - }, - "AlbumEdit": { - "header": { - "edit": "Edit this album", - "suggest": "Suggest an edit on this album" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "ArtistEdit": { - "header": { - "edit": "Edit this artist", - "suggest": "Suggest an edit on this artist" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "TrackEdit": { - "header": { - "edit": "Edit this track", - "suggest": "Suggest an edit on this track" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodes", - "tracks": "Tracks", - "libraries": "User libraries" - }, - "description": { - "libraries": "This album is present in the following libraries:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Import" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Import hasn't started yet" - } - }, - "Home": { - "title": "Library", - "header": { - "newChannels": "New channels", - "playlists": "Playlists", - "recentlyAdded": "Recently added", - "recentlyFavorited": "Recently favourited", - "recentlyListened": "Recently listened" - } - }, - "TagSelector": { - "placeholder": { - "search": "Search…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favourite | { n } favourites" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "link": { - "library": "Browse the library" - }, - "loader": { - "loading": "Loading your favourites…" - }, - "empty": { - "noFavorites": "No tracks have been added to your favourites yet" - }, - "pagination": { - "results": "Results per page" - }, - "title": "Your Favourites" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Add to favourites", - "remove": "Remove from favourites" - }, - "label": { - "inFavorites": "In favourites" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "no files | {n} file | {n} files", - "quota": "Remaining storage space: {space}" - }, - "button": { - "cancel": "Cancel", - "close": "Close", - "finishLater": "Finish later", - "next": "Next step", - "previous": "Previous step", - "publish": "Publish", - "update": "Update" - }, - "header": { - "uploadFiles": "Files to upload", - "processing": "Processing uploads", - "publish": "Publish audio", - "uploadDetails": "Upload details" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - }, - "label": { - "album": "Album", - "series": "Series" - }, - "option": { - "none": "None" - } - }, - "LicenseSelect": { - "link": { - "license": "About this licence" - }, - "label": { - "license": "Licence" - }, - "option": { - "none": "None" - } - }, - "UploadForm": { - "help": { - "license": "Add a licence to your upload to ensure some freedoms to your public." - }, - "label": { - "openBrowser": "Browse…", - "channel": "Channel" - }, - "message": { - "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", - "pending": "You have some draft uploads pending publication." - }, - "button": { - "edit": "Edit", - "ignore": "Ignore", - "remove": "Remove", - "resume": "Resume", - "retry": "Retry" - }, - "header": { - "error": "Error while publishing" - }, - "status": { - "errored": "Errored", - "pending": "Pending", - "uploading": "Uploading" - }, - "description": { - "extensions": "Supported extensions {extensions}" - }, - "warning": { - "quota": "You don't have any space left to upload your files. Please contact the moderators." - } - }, - "AlbumModal": { - "button": { - "cancel": "Cancel", - "create": "Create" - }, - "header": { - "newAlbum": "New album", - "newSeries": "New series" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Description", - "position": "Position", - "tags": "Tags", - "title": "Title", - "image": "Track Picture" - } - }, - "AlbumForm": { - "header": { - "error": "Error while creating" - }, - "label": { - "albumTitle": "Title" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Subscribe", - "unsubscribe": "Unsubscribe" - }, - "help": { - "auth": "You need to be logged in to subscribe to this channel" - } - } + "title": "About" }, "AboutPod": { - "stat": { - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", - "activeUsers": "No active users | {n} active user | {n} active users", - "albumsCount": "0 albums | {n} album | {n} albums", - "artistsCount": "0 artists | {n} artist | {n} artists", - "listeningsCount": "0 listenings | {n} listening | {n} listenings", - "tracksCount": "0 tracks | {n} track | {n} tracks" + "feature": { + "allowList": "Allow-list", + "anonymousAccess": "Anonymous access", + "federation": "Federation", + "quota": "Upload quota", + "registrations": "Registrations", + "status": { + "closed": "Closed", + "disabled": "Disabled", + "enabled": "Enabled", + "open": "Open" + }, + "version": "Funkwhale version" + }, + "header": { + "about": "About this pod", + "contact": "Contact", + "features": "Features", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" }, - "title": "About", "link": { "about": "About this pod", "features": "Features", @@ -1462,27 +69,8 @@ "statistics": "Statistics", "terms": "Terms and privacy policy" }, - "header": { - "about": "About this pod", - "contact": "Contact", - "features": "Features", - "rules": "Rules", - "statistics": "Statistics", - "terms": "Terms and privacy policy" - }, - "feature": { - "allowList": "Allow-list", - "anonymousAccess": "Anonymous access", - "status": { - "closed": "Closed", - "disabled": "Disabled", - "enabled": "Enabled", - "open": "Open" - }, - "federation": "Federation", - "version": "Funkwhale version", - "registrations": "Registrations", - "quota": "Upload quota" + "message": { + "contact": "Send us an email: { contactEmail }" }, "notApplicable": "N/A", "placeholder": { @@ -1490,332 +78,233 @@ "noRules": "No rules available", "noTerms": "No terms available" }, + "stat": { + "activeUsers": "No active users | {n} active user | {n} active users", + "albumsCount": "0 albums | {n} album | {n} albums", + "artistsCount": "0 artists | {n} artist | {n} artists", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", + "listeningsCount": "0 listenings | {n} listening | {n} listenings", + "tracksCount": "0 tracks | {n} track | {n} tracks" + }, + "title": "About" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralised, open network.", + "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers." + }, + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep track of your favourites, create playlists, discover new content and much more!" + }, + "header": { + "about": "About this Funkwhale pod", + "aboutFunkwhale": "About Funkwhale", + "contact": "Contact", + "links": "Useful links", + "login": "Log in", + "newAlbums": "Recently added albums", + "newChannels": "New channels", + "signup": "Sign up", + "statistics": "Statistics", + "welcome": "Welcome to {podName}!" + }, + "help": { + "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "funkwhale": "Visit funkwhale.audio", + "learnMore": "Learn more", + "mobileApps": { + "description": "Use Funkwhale on other devices with our apps", + "label": "Mobile apps" + }, + "publicContent": { + "description": "Listen to public albums and playlists shared on this pod.", + "label": "Browse public content" + }, + "rules": "Server rules", + "userGuides": { + "description": "Discover everything you need to know about Funkwhale and its features", + "label": "User guides" + }, + "viewMore": "View more…" + }, + "placeholder": { + "noDescription": "No description available" + }, + "stat": { + "activeUsers": "No active users | {n} active user | {n} active users", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" + }, + "title": "Home" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Page not found!" + }, + "link": { + "home": "Go to home page" + }, "message": { - "contact": "Send us an email: { contactEmail }" + "pageNotFound": "Sorry, the page you asked for does not exist:" + }, + "title": "Page not found" + }, + "Queue": { + "button": { + "clear": "Clear", + "close": "Close", + "stopRadio": "Stop radio" + }, + "header": { + "failure": "The track cannot be loaded", + "noSources": "The track has no available sources.", + "radio": "You have a radio playing" + }, + "label": { + "addArtistContentFilter": "Hide content from this artist…", + "duration": "Duration", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "favorite": "Favourite track", + "next": "Next track", + "pause": "Pause", + "play": "Play", + "populatingRadio": "Fetching radio track…", + "previous": "Previous track", + "queue": "Queue", + "remove": "Remove", + "restart": "Restart track", + "selectTrack": "Select track", + "showCoverArt": "Show Cover Art", + "showVisualizer": "Show MoonDrop visualiser" + }, + "message": { + "automaticPlay": "The next track will play automatically in a few seconds…", + "radio": "New tracks will be appended here automatically.", + "webglUnsupported": "Your browser doesn't appear to support WebGL2." + }, + "meta": { + "end": "End", + "queuePosition": "Track {index} of {length}", + "startTime": "00:00", + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + }, + "warning": { + "connectivity": "You may have a connectivity issue." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } on {total} selected", - "allSelected": "No elements selected | {n} element selected | All {n} elements selected", - "go": "Go", - "launch": "Launch", - "refresh": "Refresh table content", - "select": "Select", - "selectAll": "Select all items", - "selectElement": "Select one element | Select all { n } elements", - "selectCurrentPage": "Select only current page" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Search" + }, + "description": { + "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", + "rss": "Use this form to subscribe to an RSS feed from its URL." + }, + "error": { + "fetchFailed": "This object cannot be retrieved" + }, + "header": { + "fetchFailed": "Error while fetching object" + }, + "label": { + "fediverse": { + "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}username{'@'}example.com", + "title": "Fediverse object" }, - "message": { - "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements", - "needsRefresh": "Content has been updated, click refresh to see up-to-date content" - }, - "label": { - "actions": "Actions", - "performAction": "Perform actions" - }, - "modal": { - "performAction": { - "header": "Do you want to launch { action } on { n } element? | Do you want to launch { action } on { n } elements?", - "content": { - "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." - } - } - }, - "header": { - "error": "Error while applying action" + "rss": { + "fieldLabel": "RSS feed location", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Subscribe to a podcast RSS feed" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "About", - "chat": "Chat room", - "docs": "Documentation", - "forum": "Forum", - "support": "Help", - "git": "Issue tracker", - "login": "Log in", - "logout": "Log out", - "notifications": "Notifications", - "profile": "Profile", - "settings": "Settings", - "signup": "Sign up" - }, - "label": { - "shortcuts": "Keyboard shortcuts", - "language": "Language", - "theme": "Theme" - } - }, - "UserModal": { - "link": { - "about": "About", - "chat": "Chat room", - "forum": "Forum", - "support": "Help", - "git": "Issue tracker", - "login": "Log in", - "logout": "Log out", - "notifications": "Notifications", - "profile": "Profile", - "settings": "Settings", - "signup": "Sign up" - }, - "label": { - "shortcuts": "Keyboard shortcuts", - "language": "Language", - "theme": "Theme" - }, - "header": { - "options": "Options" - }, - "button": { - "switchInstance": "Use another instance" - } - }, - "DangerousButton": { - "button": { - "cancel": "Cancel", - "confirm": "Confirm" - }, - "header": { - "confirm": "Do you want to confirm this action?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Cancel", - "edit": "Edit", - "less": "Show less", - "more": "Show more", - "update": "Update description" - }, - "header": { - "failure": "Error while updating description" - }, - "empty": { - "noDescription": "No description available" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Clear" - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Collapse", - "expand": "Expand" - } - }, - "CopyInput": { - "button": { - "copy": "Copy" - }, - "message": { - "success": "Text copied to clipboard!" - } - }, - "LoginModal": { - "link": { - "login": "Log in", - "signup": "Sign up" - }, - "header": { - "unauthenticated": "Unauthenticated" - }, - "description": { - "noAccess": "You don't have access!" - } - }, - "ContentForm": { - "help": { - "markdown": "Markdown syntax is supported." - }, - "empty": { - "noContent": "Nothing to preview." - }, - "button": { - "preview": "Preview", - "write": "Write" - }, - "placeholder": { - "input": "Write a few words here…" - } - }, - "EmptyState": { - "header": { - "noResults": "No results were found." - }, - "button": { - "refresh": "Refresh" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." - }, - "button": { - "remove": "Remove" - }, - "label": { - "upload": "Upload New Picture…" - }, - "loader": { - "uploading": "Uploading file…" - }, - "header": { - "failure": "Your attachment cannot be saved" - } - }, - "ExpandableDiv": { - "button": { - "less": "Show less", - "more": "Show more" - } + "warning": { + "unsupported": "This kind of object isn't supported yet" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks" - } + "SetInstanceModal": { + "button": { + "cancel": "Cancel", + "submit": "Submit" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } is already in { 1 }." - }, - "button": { - "addDuplicate": "Add anyway", - "addToPlaylist": "Add to this playlist", - "addTrack": "Add track", - "cancel": "Cancel", - "edit": "Edit" - }, - "header": { - "addToPlaylist": "Add to playlist", - "available": "Available playlists", - "manage": "Manage playlists", - "noResults": "No results matching your filter", - "addFailure": "The track can't be added to a playlist" - }, - "table": { - "edit": { - "header": { - "edit": "Edit", - "lastModification": "Last modification", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "placeholder": { - "filterPlaylist": "Enter playlist name" - }, - "label": { - "filter": "Filter" - }, - "empty": { - "noPlaylists": "No playlists have been created yet" - } + "header": { + "chooseInstance": "Choose your instance", + "failure": "It is not possible to connect to the given URL", + "suggestions": "Suggested choices" }, - "Editor": { - "button": { - "addDuplicate": "Add anyway", - "clear": "Clear playlist", - "copy": "Copy the current queue to this playlist", - "insertFromQueue": "Insert from queue ({ n } track) | Insert from queue ({ n } tracks)" - }, - "error": { - "sync": "An error occurred while saving your changes" - }, - "message": { - "sync": "Changes synced with server" - }, - "modal": { - "clearPlaylist": { - "header": "Do you want to clear the playlist \"{ playlist }\"?", - "content": { - "warning": "This will remove all tracks from this playlist and cannot be undone." - } - } - }, - "help": { - "reorder": "Drag and drop rows to reorder tracks in the playlist" - }, - "header": { - "editor": "Playlist editor" - }, - "warning": { - "duplicate": "Some tracks in your queue are already in this playlist:" - }, - "loading": { - "sync": "Syncing changes to server…" - } + "help": { + "notFunkwhaleServer": "The given address is not a Funkwhale server", + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" }, - "TrackPlaylistIcon": { - "button": { - "add": "Add to playlist…" - } + "label": { + "url": "Instance URL" }, - "Form": { - "header": { - "createPlaylist": "Create a new playlist", - "createSuccess": "Playlist created", - "updateSuccess": "Playlist updated", - "createFailure": "The playlist could not be created" - }, - "button": { - "create": "Create playlist", - "update": "Update playlist" - }, - "placeholder": { - "name": "My awesome playlist" - }, - "label": { - "name": "Playlist name", - "visibility": "Playlist visibility" - } - }, - "Widget": { - "button": { - "create": "Create Playlist", - "more": "Show more" - }, - "placeholder": { - "noPlaylists": "No playlists have been created yet" - } + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } accepted your follow on library \"{ library }\"", - "libraryFollow": "{ username } followed your library \"{ library }\"", - "libraryPendingFollow": "{ username } wants to follow your library \"{ library }\"" + "ShortcutsModal": { + "button": { + "close": "Close" + }, + "header": { + "modal": "Keyboard shortcuts" + }, + "shortcut": { + "audio": { + "clearQueue": "Clear queue", + "decreaseVolume": "Decrease volume", + "expandQueue": "Expand queue/player view", + "increaseVolume": "Increase volume", + "label": "Audio player shortcuts", + "playNext": "Play next track", + "playPause": "Pause/play the current track", + "playPrevious": "Play previous track", + "seekBack30": "Seek backwards 30s", + "seekBack5": "Seek backwards 5s", + "seekForward30": "Seek forwards 30s", + "seekForward5": "Seek forwards 5s", + "shuffleQueue": "Shuffle queue", + "toggleFavorite": "Toggle favourite", + "toggleLoop": "Toggle queue looping", + "toggleMute": "Toggle mute" }, - "button": { - "approve": "Approve", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "reject": "Reject" + "general": { + "focus": "Focus searchbar", + "label": "General shortcuts", + "show": "Show available keyboard shortcuts", + "unfocus": "Unfocus searchbar" } } }, "Sidebar": { + "header": { + "administration": "Administration", + "explore": "Explore", + "library": "My library", + "main": "Main navigation", + "more": "More" + }, + "label": { + "add": "Add content", + "administration": "Administration", + "edits": "Pending review edits", + "follows": "Pending follow requests", + "language": "Language", + "main": "Main menu", + "play": "Play this track", + "reports": "Pending review reports", + "theme": "Theme" + }, "link": { "about": "About this pod", "albums": "Albums", @@ -1833,46 +322,1985 @@ "radios": "Radios", "search": "Search", "settings": "Settings", - "users": "Users", - "switchInstance": "Switch instance" - }, - "label": { - "add": "Add content", - "administration": "Administration", - "language": "Language", - "main": "Main menu", - "follows": "Pending follow requests", - "edits": "Pending review edits", - "play": "Play this track", - "theme": "Theme", - "reports": "Pending review reports" - }, - "header": { - "administration": "Administration", - "explore": "Explore", - "main": "Main navigation", - "more": "More", - "library": "My library" + "switchInstance": "Switch instance", + "users": "Users" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Save" + }, + "header": { + "error": "Error while saving settings.", + "image": "Current image" + }, + "message": { + "success": "Settings updated successfully." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Add a new field", + "edit": "Edit form", + "preview": "Preview Form" + }, + "help": { + "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", + "helpText": "An optional text to be displayed at the start of the sign-up form." + }, + "label": { + "additionalField": "Additional field", + "additionalFields": "Additional fields", + "delete": "Delete", + "helpText": "Help text", + "moveDown": "Move down", + "moveUp": "Move up" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Actions", + "label": "Field label", + "required": "Required", + "type": "Field type" + }, + "required": { + "false": "False", + "true": "True" + }, + "type": { + "long": "Long text", + "short": "Short text" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Updated on {date}" + }, + "ChannelEntries": { + "help": { + "subscribe": "You may need to subscribe to this channel to see its content." + } + }, + "ChannelForm": { + "header": { + "error": "Error while saving channel." + }, + "help": { + "discography": "Publish music you make as a nice discography of albums and singles.", + "podcast": "Host your episodes and keep your community updated.", + "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", + "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." + }, + "label": { + "category": "Category", + "description": "Description", + "discography": "Artist Discography", + "email": "Owner e-mail address", + "image": "Channel Picture", + "language": "Language", + "name": "Name", + "owner": "Owner name", + "podcast": "Podcasts", + "subcategory": "Subcategory", + "tags": "Tags", + "username": "Fediverse handle" + }, + "legend": { + "purpose": "What will this channel be used for?" + }, + "loader": { + "loading": "Loading" + }, + "placeholder": { + "name": "Awesome channel name", + "username": "awesomechannelname" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Show more" + }, + "help": { + "subscribe": "You may need to subscribe to this channel to see its contents." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Show more" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copy" + }, + "header": { + "preview": "Preview" + }, + "help": { + "anonymous": "Please contact your admins and ask them to update the corresponding setting.", + "embed": "Copy/paste this code in your website HTML", + "width": "Leave empty for a responsive widget" + }, + "label": { + "embed": "Embed code", + "height": "Widget height", + "width": "Widget width" + }, + "message": { + "copy": "Text copied to clipboard!" + }, + "warning": { + "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "unfollow": "Unfollow" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to current queue", + "discretePlay": "Play", + "episodeDetails": "Episode details", + "hideArtist": "Hide content from this artist", + "playAlbum": "Play album", + "playArtist": "Play artist", + "playNext": "Play next", + "playNow": "Play now", + "playPlaylist": "Play playlist", + "playTrack": "Play track", + "playTracks": "Play tracks", + "report": "Report…", + "startRadio": "Play similar songs", + "trackDetails": "Track details" + }, + "title": { + "more": "More…", + "unavailable": "This track is not available in any library you have access to" + } + }, + "Player": { + "header": { + "player": "Audio player and controls" + }, + "label": { + "addArtistContentFilter": "Hide content from this artist…", + "audioPlayer": "Media player", + "clearQueue": "Clear your queue", + "expandQueue": "Expand queue", + "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", + "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", + "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", + "mute": "Mute", + "nextTrack": "Next track", + "pause": "Pause", + "play": "Play", + "previousTrack": "Previous track", + "shuffleQueue": "Shuffle your queue", + "unmute": "Unmute" + }, + "meta": { + "position": "{index} of {length}", + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + } + }, + "PlayerControls": { + "labels": { + "next": "Next track", + "pause": "Pause", + "play": "Play", + "previous": "Previous track" + } + }, + "Search": { + "empty": { + "noAlbums": "No album matched your query", + "noArtists": "No artist matched your query" + }, + "header": { + "albums": "Albums", + "artists": "Artists", + "search": "Search for some music" + }, + "placeholder": { + "search": "Artist, album, track…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Sorry, there are no results for this search" + }, + "header": { + "noResults": "No matches found" + }, + "label": { + "album": "Album", + "artist": "Artist", + "category": { + "federation": "Federation", + "podcasts": "Podcasts" + }, + "search": "Search for content", + "tag": "Tag", + "track": "Track" + }, + "link": { + "fediverse": "Search on the fediverse", + "more": "More results 🡒", + "rss": "Subscribe to podcast via RSS" + }, + "placeholder": { + "search": "Search for artists, albums, tracks…" + } + }, + "VolumeControl": { + "button": { + "mute": "Mute", + "unmute": "Unmute" + }, + "label": { + "slider": "Adjust volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Widget": { + "button": { + "more": "Show more" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Widget": { + "button": { + "more": "Show more" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Show track actions" + } + }, + "Modal": { + "button": { + "addToFavorites": "Add to favourites", + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", + "playNext": "Play next", + "playNow": "Play now", + "removeFromFavorites": "Remove from favourites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Show track actions" + } + }, + "Modal": { + "button": { + "addToFavorites": "Add to favourites", + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", + "playNext": "Play next", + "playNow": "Play now", + "removeFromFavorites": "Remove from favourites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artist", + "title": "Title" + } + } + }, + "Widget": { + "button": { + "more": "Show more" + }, + "empty": { + "noResults": "Nothing found" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Regenerate token" + }, + "header": { + "appDetails": "Application Details", + "appSecretWarning": "Keep a copy of this token in a safe place.", + "editApp": "Edit application" + }, + "help": { + "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." + }, + "label": { + "accessToken": "Access token", + "appId": "Application ID", + "appSecret": "Application secret" + }, + "link": { + "settings": "Back to settings" + }, + "message": { + "appSecretWarning": "You won't be able to see it again once you leave this screen." + }, + "title": "Edit application" + }, + "ApplicationForm": { + "button": { + "create": "Create application", + "update": "Update application" + }, + "header": { + "failure": "We cannot save your changes" + }, + "help": { + "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." + }, + "label": { + "name": "Name", + "redirectUri": "Redirect URI", + "scopes": { + "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", + "label": "Scopes", + "read": { + "description": "Read-only access to user data", + "label": "Read" + }, + "write": { + "description": "Write-only access to user data", + "label": "Write" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Back to settings" + }, + "title": "Create a new application" + }, + "Authorize": { + "button": { + "authorize": "Authorize {app}" + }, + "header": { + "access": "{app_name} wants to access your Funkwhale account", + "allScopes": "Full access", + "authorize": "Authorise third-party app", + "authorizeFailure": "Error while fetching application data", + "fetchFailure": "Error while fetching application data", + "readOnly": "Read-only", + "writeOnly": "Write-only" + }, + "help": { + "copyCode": "You will be shown a code to copy-paste in the application", + "pasteCode": "Copy-paste the following code in the application:", + "redirect": "You will be redirected to { 0 }" + }, + "message": { + "unknownPermissions": "The application is also requesting the following unknown permissions:" + }, + "title": "Allow application" + }, + "LoginForm": { + "button": { + "login": "Login" + }, + "header": { + "loginFailure": "We cannot log you in" + }, + "help": { + "approvalRequired": "If you signed-up recently, you may need to wait before our moderation team review your account, or verify your e-mail address.", + "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." + }, + "label": { + "password": "Password", + "username": "Username or e-mail address" + }, + "link": { + "createAccount": "Create an account", + "resetPassword": "Reset your password" + }, + "message": { + "redirect": "You will be redirected to {domain} to authenticate" + }, + "placeholder": { + "username": "Enter your username or e-mail address" + } + }, + "Logout": { + "button": { + "logout": "Yes, log me out!" + }, + "header": { + "confirm": "Are you sure you want to log out?", + "unauthenticated": "You aren't currently logged in" + }, + "link": { + "login": "Log in!" + }, + "message": { + "loggedIn": "You are currently logged in as {username}" + }, + "title": "Log out" + }, + "Plugin": { + "button": { + "save": "Save", + "scan": "Scan" + }, + "description": { + "library": "Library where files should be imported." + }, + "header": { + "failure": "Error while saving plugin" + }, + "label": { + "library": "Library", + "pluginEnabled": "Enabled" + }, + "link": { + "documentation": "Documentation" + } + }, + "Settings": { + "button": { + "delete": "Delete", + "deleteAccount": "Delete my account…", + "deleteAccountConfirm": "Delete my account", + "disableSubsonic": "Disable access", + "edit": "Edit", + "password": "Change password", + "refresh": "Refresh", + "remove": "Remove", + "removeApp": "Remove application", + "revoke": "Revoke", + "revokeAccess": "Revoke access", + "update": "Update", + "updateSettings": "Update settings" + }, + "description": { + "authorizedApps": "This is the list of applications that have access to your account data.", + "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", + "changePassword": { + "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", + "paragraph2": "You will have to update your password on your clients that use this password." + }, + "contentFilters": "Content filters help you hide content you don't want to see on the service.", + "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation.", + "plugins": "Use plugins to extend Funkwhale and get additional features.", + "yourApps": "This is the list of applications that you have registered." + }, + "header": { + "accountFailure": "We cannot delete your account", + "accountSettings": "Account settings", + "authorizedApps": "Authorised apps", + "avatar": "Avatar", + "avatarFailure": "Your avatar cannot be saved", + "changeEmail": "Change my e-mail address", + "changePassword": "Change my password", + "contentFilters": "Content filters", + "deleteAccount": "Delete my account", + "emailFailure": "We cannot change your e-mail address", + "hiddenArtists": "Hidden artists", + "noApps": "You don't have any application connected with your account.", + "noPersonalApps": "You don't have registered any application yet.", + "passwordFailure": "Your password cannot be changed", + "plugins": "Plugins", + "settingsUpdated": "Settings updated", + "updateFailure": "Your settings can't be updated", + "yourApps": "Your applications" + }, + "help": { + "changePassword": "Please double-check your password is correct", + "noApps": "If you authorise third-party applications to access your data, those applications will be listed here.", + "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Current password", + "newEmail": "New e-mail address", + "newPassword": "New password", + "password": "Password" + }, + "link": { + "managePlugins": "Manage plugins", + "newApp": "Register a new application" + }, + "message": { + "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", + "currentEmail": "Your current e-mail address is {email}" + }, + "modal": { + "changePassword": { + "content": { + "logout": "You will be logged out from this session and have to log in with the new one", + "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password", + "warning": "Changing your password will have the following consequences" + }, + "header": "Change your password?" + }, + "deleteAccount": { + "content": { + "warning": "This is irreversible and will permanently remove your data from our servers. You will be immediately logged out." + }, + "header": "Do you want to delete your account?" + }, + "deleteApp": { + "content": { + "warning": "This will permanently remove the application and all the associated tokens." + }, + "header": "Remove application {app}?" + }, + "revokeApp": { + "content": { + "warning": "This will prevent this application from accessing the service on your behalf." + }, + "header": "Revoke access for application {app}?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Creation date", + "name": "Name" + } + }, + "authorizedApps": { + "header": { + "application": "Application", + "permissions": "Permissions" + } + }, + "yourApps": { + "header": { + "application": "Application", + "creationDate": "Creation date", + "scopes": "Scopes" + } + } + }, + "title": "Account Settings", + "warning": { + "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." + } + }, + "SignupForm": { + "button": { + "create": "Create my account" + }, + "header": { + "login": "Log in to your Funkwhale account", + "signupFailure": "Your account cannot be created." + }, + "label": { + "email": "E-mail address", + "invitation": "Invitation code", + "password": "Password", + "username": "Username" + }, + "message": { + "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", + "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", + "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", + "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + }, + "placeholder": { + "email": "Enter your e-mail address", + "invitation": "Enter your invitation code (case insensitive)", + "username": "Enter your username" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Disable access", + "confirmNewPassword": "Request a password", + "disable": "Disable Subsonic access", + "newPassword": "Request a new password" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale is compatible with other music players that support the Subsonic API.", + "paragraph2": "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance.", + "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below." + } + }, + "header": { + "error": "Error", + "subsonic": "Subsonic API password" + }, + "label": { + "subsonicField": "Your subsonic API password" + }, + "link": { + "apps": "Discover how to use Funkwhale from other apps" + }, + "message": { + "accessDisabled": "Access disabled", + "passwordUpdated": "Password updated", + "unavailable": "The Subsonic API is not available on this Funkwhale instance." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "This will completely disable access to the Subsonic API using from account." + }, + "header": "Disable Subsonic API access?" + }, + "newPassword": { + "content": { + "warning": "This will log you out from existing devices that use the current password." + }, + "header": "Request a new Subsonic API password?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Error while creating" + }, + "label": { + "albumTitle": "Title" + } + }, + "AlbumModal": { + "button": { + "cancel": "Cancel", + "create": "Create" + }, + "header": { + "newAlbum": "New album", + "newSeries": "New series" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Series" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + }, + "option": { + "none": "None" + } + }, + "LicenseSelect": { + "label": { + "license": "Licence" + }, + "link": { + "license": "About this licence" + }, + "option": { + "none": "None" + } + }, + "SubscribeButton": { + "help": { + "auth": "You need to be logged in to subscribe to this channel" + }, + "title": { + "subscribe": "Subscribe", + "unsubscribe": "Unsubscribe" + } + }, + "UploadForm": { + "button": { + "edit": "Edit", + "ignore": "Ignore", + "remove": "Remove", + "resume": "Resume", + "retry": "Retry" + }, + "description": { + "extensions": "Supported extensions {extensions}" + }, + "header": { + "error": "Error while publishing" + }, + "help": { + "license": "Add a licence to your upload to ensure some freedoms to your public." + }, + "label": { + "channel": "Channel", + "openBrowser": "Browse…" + }, + "message": { + "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", + "pending": "You have some draft uploads pending publication." + }, + "status": { + "errored": "Errored", + "pending": "Pending", + "uploading": "Uploading" + }, + "warning": { + "quota": "You don't have any space left to upload your files. Please contact the moderators." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Description", + "image": "Track Picture", + "position": "Position", + "tags": "Tags", + "title": "Title" + } + }, + "UploadModal": { + "button": { + "cancel": "Cancel", + "close": "Close", + "finishLater": "Finish later", + "next": "Next step", + "previous": "Previous step", + "publish": "Publish", + "update": "Update" + }, + "header": { + "processing": "Processing uploads", + "publish": "Publish audio", + "uploadDetails": "Upload details", + "uploadFiles": "Files to upload" + }, + "meta": { + "files": "no files | {n} file | {n} files", + "quota": "Remaining storage space: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "No elements selected | {n} element selected | All {n} elements selected", + "go": "Go", + "launch": "Launch", + "refresh": "Refresh table content", + "select": "Select", + "selectAll": "Select all items", + "selectCurrentPage": "Select only current page", + "selectElement": "Select one element | Select all {n} elements", + "selected": "{ n } on {total} selected" + }, + "header": { + "error": "Error while applying action" + }, + "label": { + "actions": "Actions", + "performAction": "Perform actions" + }, + "message": { + "needsRefresh": "Content has been updated, click refresh to see up-to-date content", + "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" + }, + "modal": { + "performAction": { + "content": { + "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." + }, + "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Remove" + }, + "header": { + "failure": "Your attachment cannot be saved" + }, + "help": { + "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." + }, + "label": { + "upload": "Upload New Picture…" + }, + "loader": { + "uploading": "Uploading file…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Collapse", + "expand": "Expand" + } + }, + "ContentForm": { + "button": { + "preview": "Preview", + "write": "Write" + }, + "empty": { + "noContent": "Nothing to preview" + }, + "help": { + "markdown": "Markdown syntax is supported" + }, + "placeholder": { + "input": "Write a few words here…" + } + }, + "CopyInput": { + "button": { + "copy": "Copy" + }, + "message": { + "success": "Text copied to clipboard!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Cancel", + "confirm": "Confirm" + }, + "header": { + "confirm": "Do you want to confirm this action?" + } + }, + "Duration": { + "meta": { + "hours": "{hours} h {minutes} min", + "minutes": "{minutes} min" + } + }, + "EmptyState": { + "button": { + "refresh": "Refresh" + }, + "header": { + "noResults": "No results were found." + } + }, + "ExpandableDiv": { + "button": { + "less": "Show less", + "more": "Show more" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Clear" + }, + "label": { + "search": "Search" + }, + "placeholder": { + "search": "Search…" + } + }, + "LoginModal": { + "description": { + "noAccess": "You don't have access" + }, + "header": { + "unauthenticated": "Unauthenticated" + }, + "link": { + "login": "Log in", + "signup": "Sign up" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Cancel", + "edit": "Edit", + "less": "Show less", + "more": "Show more", + "update": "Update description" + }, + "empty": { + "noDescription": "No description available" + }, + "header": { + "failure": "Error while updating description" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Language", + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" + }, + "link": { + "about": "About", + "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", + "git": "Issue tracker", + "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", + "signup": "Sign up", + "support": "Help" + } + }, + "UserModal": { + "button": { + "switchInstance": "Use another instance" + }, + "header": { + "options": "Options" + }, + "label": { + "language": "Change language", + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" + }, + "link": { + "about": "About", + "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", + "git": "Issue tracker", + "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", + "signup": "Sign up", + "support": "Help" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "No tracks have been added to your favourites yet" + }, + "header": { + "favorites": "No favourites | {n} favourite | {n} favourites" + }, + "link": { + "library": "Browse the library" + }, + "loader": { + "loading": "Loading your favourites…" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "title": "Your favourites" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Add to favourites", + "remove": "Remove from favourites" + }, + "label": { + "inFavorites": "In favourites" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Close", + "reload": "Close and reload page" + }, + "description": { + "failure": "An error occurred while trying to refresh data:", + "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", + "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", + "success": "Data was refreshed successfully from remote server." + }, + "header": { + "failure": "Refresh error", + "pending": "Refresh pending", + "refresh": "Refreshing object from remote server…", + "saveFailure": "Error while saving settings", + "skipped": "Refresh was skipped", + "success": "Refresh successful" + }, + "loader": { + "awaitingResult": "Waiting for result…", + "fetchRequest": "Requesting a fetch…" + }, + "table": { + "error": { + "label": { + "detail": "Error detail", + "type": "Error type" + }, + "value": { + "connectionError": "Impossible to connect to the remote server", + "httpError": "An HTTP error occurred while contacting the remote server", + "httpStatus": "The remote server answered with HTTP {status}", + "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", + "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "timeoutError": "The remote server didn't respond quickly enough", + "unknownError": "Unknown error" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Show more" + }, + "empty": { + "noMatch": "No matching library." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copy" + }, + "message": { + "copy": "Text copied to clipboard!" + }, + "title": "Show/hide password" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Add a description…" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "This album is present in the following libraries:" + }, + "header": { + "episodes": "Episodes", + "libraries": "User libraries", + "tracks": "Tracks" + }, + "meta": { + "volume": "Volume {number}" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Cancel", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "more": "More…" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this album?" + }, + "embed": { + "header": "Embed this album on your website" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Edit this album", + "suggest": "Suggest an edit on this album" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "Albums": { + "button": { + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing albums" + }, + "label": { + "search": "Search", + "tags": "Tags" + }, + "link": { + "addMusic": "Add some music" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Enter album title…" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Cancel", + "edit": "Edit", + "embed": "Embed", + "more": "More…", + "play": "Play all albums" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz", + "wikipedia": "Search on Wikipedia" + }, + "meta": { + "albums": "0 albums | {n} album | {n} albums", + "tracks": "0 tracks in | {count} track in | {count} tracks in" + }, + "modal": { + "embed": { + "header": "Embed this artist work on your website" + } + }, + "title": "Artist" + }, + "ArtistDetail": { + "button": { + "filter": "Remove filter", + "more": "Load more…" + }, + "description": { + "library": "This artist is present in the following libraries:" + }, + "header": { + "album": "Albums by this artist", + "library": "User libraries", + "track": "New tracks by this artist" + }, + "link": { + "filter": "Review my filters" + }, + "message": { + "filter": "You are currently hiding content related to this artist." + } + }, + "ArtistEdit": { + "header": { + "edit": "Edit this artist", + "suggest": "Suggest an edit on this artist" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "Artists": { + "button": { + "search": "Search", + "upload": "Add some music" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing artists" + }, + "label": { + "excludeCompilation": "Exclude Compilation Artists", + "search": "Artist name", + "tags": "Tags" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Search…" + }, + "title": "Artists" + }, + "EditCard": { + "button": { + "approve": "Approve", + "delete": "Delete", + "reject": "Reject" + }, + "header": { + "modification": "Modification {id}" + }, + "link": { + "track": "Track #{id} - {name}" + }, + "modal": { + "content": { + "warning": "The suggestion will be completely removed, this action is irreversible." + }, + "delete": { + "header": "Delete this suggestion?" + } + }, + "status": { + "applied": "Approved and applied", + "approved": "Approved", + "pending": "Pending", + "rejected": "Rejected" + }, + "table": { + "update": { + "header": { + "field": "Field", + "newValue": "New value", + "oldValue": "Old value" + }, + "notApplicable": "N/A" + } + } + }, + "EditForm": { + "button": { + "cancel": "Cancel", + "clear": "Clear", + "new": "Submit another edit", + "reset": "Reset to initial value", + "showAll": "Show all edits", + "showUnreviewed": "Restrict to unreviewed edits", + "submit": "Submit and apply edit", + "suggest": "Submit suggestion" + }, + "empty": { + "suggestEdit": "Suggest a change using the form below" + }, + "header": { + "failure": "Error while submitting edit", + "recentEdits": "Recent edits", + "success": "Your edit was successfully submitted.", + "unreviewed": "Restrict to unreviewed edits" + }, + "label": { + "summary": "Summary (optional)" + }, + "message": { + "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "A short summary describing your changes." + } + }, + "FileUpload": { + "button": { + "cancel": "Cancel", + "retry": "Retry failed uploads" + }, + "description": { + "import": "Import status", + "previousImport": "Results of your previous import:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error while launching import", + "local": "Upload music from '~/your local storage", + "server": "Import music from your server", + "status": "Import status" + }, + "label": { + "extensions": "Supported extensions: {extensions}", + "remainingSpace": "Remaining storage space", + "uploadWidget": "Click to select files to upload or drag and drop files or directories" + }, + "link": { + "picard": "We recommend using Picard for that purpose.", + "processing": "Processing", + "uploading": "Uploading" + }, + "message": { + "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", + "local": { + "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", + "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", + "message": "You are about to upload music to your library. Before proceeding, please ensure that:", + "tag": "The music files you are uploading are tagged properly." + } + }, + "table": { + "upload": { + "header": { + "actions": "Actions", + "filename": "Filename", + "size": "Size", + "status": "Status" + }, + "progress": "{percent}%", + "status": { + "pending": "Pending", + "uploaded": "Uploaded", + "uploading": "Uploading…" + } + } + }, + "tooltip": { + "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", + "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}", + "network": "A network error occurred while uploading this file", + "retry": "Retry", + "size": "Cannot upload this file, ensure it is not too big", + "timeout": "Upload timeout, please try again" + } + }, + "FsBrowser": { + "button": { + "import": "Import" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Import hasn't started yet" + } + }, + "Home": { + "header": { + "newChannels": "New channels", + "playlists": "Playlists", + "recentlyAdded": "Recently added", + "recentlyFavorited": "Recently favourited", + "recentlyListened": "Recently listened" + }, + "title": "Library" + }, + "ImportStatusModal": { + "button": { + "close": "Close" + }, + "error": { + "importFailure": "An error occurred during upload processing. You will find more information below.", + "invalidMetadata": { + "label": "Invalid metadata", + "message": "The metadata included in the file is invalid or some mandatory fields are missing." + }, + "unknownError": { + "label": "Unknown error", + "message": "An unknown error occurred" + } + }, + "header": { + "importDetail": "Import detail" + }, + "link": { + "documentation": "Read our documentation for this error", + "support": "Open a support thread (include the debug information below in your message)" + }, + "message": { + "importDetail": "Upload is still pending and will soon be processed by the server.", + "importSuccess": "Upload was successfully processed by the server." + }, + "table": { + "error": { + "debug": "Debug information", + "errorDetail": "Error detail", + "errorType": "Error type", + "help": "Getting help" + } + }, + "warning": { + "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." + } + }, + "Podcasts": { + "button": { + "cancel": "Cancel", + "channel": "Create a Channel", + "feed": "Subscribe to feed", + "search": "Search", + "subscribe": "Subscribe" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing podcasts" + }, + "label": { + "search": "Podcast title", + "tags": "Tags" + }, + "modal": { + "subscription": { + "header": "Subscription" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Search…" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Create a radio", + "create": "Create your own radio", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing radios", + "instance": "Instance radios", + "user": "User radios" + }, + "label": { + "search": "Search" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Enter a radio name…" + }, + "title": "Radios" + }, + "TagDetail": { + "header": { + "channels": "Channels", + "tracks": "Tracks" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "moderation": "Open in moderation interface" + } + }, + "TagSelector": { + "placeholder": { + "search": "Search…" + } + }, + "TrackBase": { + "button": { + "cancel": "Cancel", + "delete": "Delete", + "download": "Download", + "edit": "Edit", + "embed": "Embed", + "more": "More…", + "play": "Play" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "wikipedia": "Search on Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this track?" + }, + "embed": { + "header": "Embed this track on your website" + } + }, + "subtitle": { + "with-uploader": "Uploaded by {0} on {1}", + "without-uploader": "Uploaded on {0}" + }, + "title": "Track" + }, + "TrackDetail": { + "description": { + "library": "This track is present in the following libraries:" + }, + "header": { + "episode": "Episode Details", + "library": "Related Libraries", + "playlists": "Related Playlists", + "release": "Release Details", + "track": "Track details" + }, + "link": { + "musicbrainz": "View on MusicBrainz" + }, + "notApplicable": "N/A", + "table": { + "release": { + "album": "Album", + "artist": "Artist", + "copyright": "Copyright", + "license": "License", + "series": "Series", + "url": "URL", + "year": "Year" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Downloads", + "duration": "Duration", + "size": "Size" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Edit this track", + "suggest": "Suggest an edit on this track" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Add filter", + "save": "Save" + }, + "description": { + "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." + }, + "header": { + "builder": "Builder", + "created": "Radio created", + "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters", + "updated": "Radio updated" + }, + "label": { + "description": "Description", + "filter": "Add filters to customise your radio", + "name": "Radio name", + "public": "Display publicly" + }, + "option": { + "filter": "Select a filter" + }, + "placeholder": { + "description": "My awesome description", + "name": "My awesome radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Accessed date", - "account": "Account", - "creationDate": "Creation date", - "domain": "Domain", - "importStatus": "Import status", - "library": "Library", - "name": "Name", - "size": "Size", - "visibility": "Visibility" + "actions": "Actions", + "candidates": "Candidates", + "config": "Config", + "exclude": "Exclude", + "name": "Filter name" } } }, + "title": "Radio Builder" + }, + "Filter": { + "cancelButton": "Cancel", + "excludeLabel": "Exclude", + "matchingTracks": "0 tracks matching filter | {n} track matching filter | {n} tracks matching filter", + "matchingTracksModalHeader": "Tracks matching filter", + "removeButton": "Remove" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, account…" + }, + "table": { + "channel": { + "header": { + "account": "Account", + "albums": "Albums", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected albums will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, MusicBrainz ID…" + }, + "table": { + "album": { + "header": { + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Title", + "releaseDate": "Release date", + "tracks": "Tracks" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected artist will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, MusicBrainz ID…" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "all": "All", + "approved": "Approved", + "pending": "Pending review", + "rejected": "Rejected" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by account, summary, domain…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." + } + }, + "label": { + "search": "Search", + "visibility": "Visibility" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, actor, name, description…" + }, + "table": { + "library": { + "header": { + "account": "Account", + "creationDate": "Creation date", + "domain": "Domain", + "followers": "Followers", + "name": "Name", + "uploads": "Uploads", + "visibility": "Visibility" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artists", + "creationDate": "Creation date", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected tracks will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, album, MusicBrainz ID…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "license": "License", + "title": "Title" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected upload will be removed. This action is irreversible." + } + }, + "label": { + "search": "Search", + "status": "Import status", + "visibility": "Visibility" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", "option": { "all": "All", "failed": "Failed", @@ -1888,396 +2316,68 @@ }, "label": "Ordering" }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected upload will be removed. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Search", - "status": "Status", - "visibility": "Visibility" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { "search": "Search by domain, actor, name, reference, source…" }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Accessed date", "account": "Account", "creationDate": "Creation date", "domain": "Domain", - "followers": "Followers", + "importStatus": "Import status", + "library": "Library", "name": "Name", - "uploads": "Uploads", + "size": "Size", "visibility": "Visibility" } } - }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Search", - "visibility": "Visibility" - }, - "placeholder": { - "search": "Search by domain, actor, name, description…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artist", - "creationDate": "Creation date", - "domain": "Domain", - "license": "License", - "title": "Title" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected tracks will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, title, artist, album, MusicBrainz ID…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "label": { - "category": "Category", - "search": "Search" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Search by domain, name, MusicBrainz ID…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artists", - "creationDate": "Creation date", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." - } - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by name" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "EditsCardList": { - "option": { - "all": "All", - "approved": "Approved", - "pending": "Pending review", - "rejected": "Rejected" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "placeholder": { - "search": "Search by account, summary, domain…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - }, - "label": { - "status": "Status" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artist", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Title", - "releaseDate": "Release date", - "tracks": "Tracks" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected albums will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local", - "moderation": "Open in moderation interface" - }, - "notApplicable": "N/A", - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, title, artist, MusicBrainz ID…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Account", - "domain": "Domain", - "local": "Local", - "owner": "Owner", - "type": "Type" - }, - "status": { - "assignedTo": "Assigned to", - "internalNotes": "Internal notes", - "resolutionDate": "Resolution date", - "resolved": "Resolved", - "status": "Status", - "unresolved": "Unresolved" - }, - "report": { - "category": "Category", - "creationDate": "Creation date", - "submittedBy": "Submitted by" + "AccountsTable": { + "action": { + "purge": { + "label": "Purge" } }, - "header": { - "actions": "Actions", - "notes": "Internal notes", - "message": "Message", - "reportedObject": "Reported object" - }, - "button": { - "confirmDelete": "Delete", - "delete": "Delete reported object", - "resolve": "Resolve", - "unresolve": "Unresolve" - }, - "modal": { - "delete": { - "header": "Delete reported object?", - "content": { - "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." - } - } - }, - "notApplicable": "N/A", - "link": { - "moderation": "Open in moderation interface", - "report": "Report { id }", - "publicPage": "View public page" - }, - "warning": { - "objectDeleted": "The object associated with this report was deleted." - } - }, - "UserRequestCard": { - "header": { - "actions": "Actions", - "notes": "Internal notes", - "signup": "Message" - }, - "button": { - "approve": "Approve", - "reject": "Refuse" - }, - "table": { - "status": { - "approved": "Approved", - "assignedTo": "Assigned to", - "internalNotes": "Internal notes", - "pending": "Pending", - "refused": "Refused", - "status": "Status" - }, - "request": { - "creationDate": "Creation date", - "submittedBy": "Submitted by" - } - }, - "notApplicable": "N/A", - "link": { - "request": "Request { id }" - }, - "message": { - "signup": "This user wants to sign-up on your pod." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Add a new moderation rule", - "editRule": "Edit moderation rule", - "failure": "Error while creating rule" - }, "label": { - "blockAll": "Block everything", - "policyDisabled": "Disabled", - "policyEnabled": "Enabled", - "silenceActivity": "Mute activity", - "silenceNotifications": "Mute notifications", - "customizeRule": "Or customise your rule", - "policyReason": "Reason", - "rejectMedia": "Reject media" + "search": "Search" }, - "tooltip": { - "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", - "rejectMedia": "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well.", - "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place.", - "silenceActivity": "Hide account or domain content, except from followers.", - "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", - "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it." + "link": { + "local": "Local account" }, - "button": { - "cancel": "Cancel", - "create": "Create", - "delete": "Delete", - "confirm": "Delete moderation rule", - "update": "Update" + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, - "modal": { - "delete": { - "header": "Delete this moderation rule?", - "content": { - "warning": "This action is irreversible." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Add note" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { - "summary": "Describe what actions have been taken, or any other related updates…" + "search": "Search by domain, username, bio…" }, - "header": { - "failure": "Error while submitting note" + "table": { + "account": { + "header": { + "domain": "Domain", + "firstSeen": "First seen", + "lastSeen": "Last seen", + "moderationRule": "Under moderation rule", + "name": "Name", + "uploads": "Uploads" + }, + "moderationRule": "Yes" + } } }, "DomainsTable": { @@ -2292,6 +2392,16 @@ "label": "Remove from allow-list" } }, + "empty": { + "noPods": "No other pods found" + }, + "label": { + "inList": "Is present on allow-list", + "search": "Search" + }, + "link": { + "list": "This domain is present in your allow-list" + }, "option": { "all": "All", "no": "No", @@ -2305,76 +2415,32 @@ }, "label": "Ordering" }, - "table": { - "domain": { - "header": { - "firstSeen": "First seen", - "name": "Name", - "receivedMessages": "Received messages", - "moderationRule": "Under moderation rule", - "users": "Users" - }, - "moderationRule": "Yes" - } - }, - "label": { - "inList": "Is present on allow-list", - "search": "Search" - }, - "empty": { - "noPods": "No other pods found" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { "search": "Search by name…" }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - }, - "link": { - "list": "This domain is present in your allow-list" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domain", "firstSeen": "First seen", - "lastSeen": "Last seen", - "name": "Name", "moderationRule": "Under moderation rule", - "uploads": "Uploads" + "name": "Name", + "receivedMessages": "Received messages", + "users": "Users" }, "moderationRule": "Yes" } - }, - "link": { - "local": "Local account" - }, - "action": { - "purge": { - "label": "Purge" - } - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, username, bio…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Edit" + }, + "header": { + "rule": "Rule" + }, "label": { "blockAll": "Block everything", "muteActivity": "Mute activity", @@ -2382,15 +2448,49 @@ "reason": "Reason", "rejectMedia": "Reject media" }, - "button": { - "edit": "Edit" - }, "status": { "enabled": "Enabled", "paused": "Paused" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Cancel", + "confirm": "Delete moderation rule", + "create": "Create", + "delete": "Delete", + "update": "Update" }, "header": { - "rule": "Rule" + "addRule": "Add a new moderation rule", + "editRule": "Edit moderation rule", + "failure": "Error while creating rule" + }, + "label": { + "blockAll": "Block everything", + "customizeRule": "Or customise your rule", + "policyDisabled": "Disabled", + "policyEnabled": "Enabled", + "policyReason": "Reason", + "rejectMedia": "Reject media", + "silenceActivity": "Mute activity", + "silenceNotifications": "Mute notifications" + }, + "modal": { + "delete": { + "content": { + "warning": "This action is irreversible" + }, + "header": "Delete this moderation rule?" + } + }, + "tooltip": { + "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", + "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", + "rejectMedia": "Hide account or domain content, except from followers.", + "silenceActivity": "Hide account or domain content, except from followers.", + "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", + "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place." } }, "InstancePolicyModal": { @@ -2400,161 +2500,130 @@ }, "modal": { "manage": { - "header": "Manage moderation rules for { obj }", "content": { "warning": "This entity is subject to specific moderation rules" - } + }, + "header": "Manage moderation rules for {obj}" } } }, + "NoteForm": { + "button": { + "add": "Add note" + }, + "header": { + "failure": "Error while submitting note" + }, + "placeholder": { + "summary": "Describe what actions have been taken, or any other related updates…" + } + }, "NotesThread": { "button": { "delete": "Delete" }, "modal": { "delete": { - "header": "Delete this note?", "content": { "warning": "The note will be removed. This action is irreversible." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Account", - "albums": "Albums", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Name", - "tracks": "Tracks" + }, + "header": "Delete this note?" } } }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" + "ReportCard": { + "button": { + "confirmDelete": "Delete", + "delete": "Delete reported object", + "resolve": "Resolve", + "unresolve": "Unresolve" }, - "label": "Ordering" + "header": { + "actions": "Actions", + "message": "Message", + "notes": "Internal notes", + "reportedObject": "Reported object" + }, + "link": { + "moderation": "Open in moderation interface", + "publicPage": "View public page", + "report": "Report {id}" + }, + "modal": { + "delete": { + "content": { + "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." + }, + "header": "Delete reported object?" + } + }, + "notApplicable": "N/A", + "table": { + "object": { + "account": "Account", + "domain": "Domain", + "local": "Local", + "owner": "Owner", + "type": "Type" + }, + "report": { + "category": "Category", + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "resolutionDate": "Resolution date", + "resolved": "Resolved", + "status": "Status", + "unresolved": "Unresolved" + } + }, + "warning": { + "objectDeleted": "The object associated with this report was deleted." + } }, - "label": { - "category": "Category", - "search": "Search" - }, - "link": { - "local": "Local", - "moderation": "Open in moderation interface" - }, - "placeholder": { - "search": "Search by domain, name, account…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" + "UserRequestCard": { + "button": { + "approve": "Approve", + "reject": "Refuse" + }, + "header": { + "actions": "Actions", + "notes": "Internal notes", + "signup": "Message" + }, + "link": { + "request": "Request {id}" + }, + "message": { + "signup": "This user wants to sign-up on your pod." + }, + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "approved": "Approved", + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "pending": "Pending", + "refused": "Refused", + "resolutionDate": "Resolution date", + "status": "Status" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Account status", - "email": "Email", - "lastActivity": "Last activity", - "permissions": "Permissions", - "signup": "Sign-up", - "status": "Status", - "username": "Username" - }, - "accountStatus": { - "active": "Active", - "inactive": "Inactive" - }, - "status": { - "admin": "Admin", - "regular": "Regular user", - "staff": "Staff member" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "permission": { - "library": "Library", - "moderation": "Moderation", - "settings": "Settings" - }, - "notApplicable": "N/A", - "placeholder": { - "search": "Search by username, e-mail address, name…" - }, - "pagination": { - "results": "Showing one result | Showing results { start } to { end } from { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "All", - "expired": "Expired/used", - "open": "Open" - }, - "table": { - "invitation": { - "header": { - "code": "Code", - "creationDate": "Creation date", - "expirationDate": "Expiry date", - "owner": "Owner", - "status": "Status" - } - } - }, - "action": { - "delete": "Delete" - }, - "label": { - "expired": "Expired", - "unused": "Not used", - "search": "Search", - "status": "Status", - "used": "Used" - }, - "ordering": { - "label": "Ordering" - }, - "placeholder": { - "search": "Search by username, e-mail address, code…" - }, - "pagination": { - "results": "Showing one result | Showing results { start } to { end } from { total }" - } - }, "InvitationForm": { "button": { "clear": "Clear", "new": "Get a new invitation" }, - "table": { - "invitation": { - "header": { - "code": "Code", - "link": "Share link" - } - } - }, "header": { "failure": "Error while creating invitation" }, @@ -2563,534 +2632,59 @@ }, "placeholder": { "invitation": "Leave empty for a random code" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Actions", - "label": "Field label", - "type": "Field type", - "required": "Required" - }, - "type": { - "long": "Long text", - "short": "Short text" - }, - "required": { - "false": "False", - "true": "True" - } - } - }, - "button": { - "add": "Add a new field", - "edit": "Edit form", - "preview": "Preview Form" - }, - "label": { - "additionalField": "Additional field", - "additionalFields": "Additional fields", - "delete": "Delete", - "helpText": "Help text", - "moveDown": "Move down", - "moveUp": "Move up" - }, - "help": { - "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", - "helpText": "An optional text to be displayed at the start of the sign-up form." - } - }, - "SettingsGroup": { - "header": { - "image": "Current image", - "error": "Error while saving settings." - }, - "button": { - "save": "Save" - }, - "message": { - "success": "Settings updated successfully." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "All" - }, - "label": { - "category": "Category" - } - }, - "ReportModal": { - "header": { - "disabled": "Anonymous reports are disabled, please sign in to submit a report.", - "modal": "Do you want to report this object?", - "submissionFailure": "Error while submitting report" - }, - "button": { - "cancel": "Cancel", - "submit": "Submit report" - }, - "label": { - "email": "Email", - "forwardToDomain": "Forward to { domain}", - "message": "Message" - }, - "description": { - "forwardToDomain": "Forward an anonymised copy of your report to the server hosting this element.", - "message": "Use this field to provide additional context to the moderator that will handle your report.", - "modal": "Use this form to submit a report to our moderation team.", - "email": "We'll use this e-mail address if we need to contact you regarding this report." - }, - "message": { - "submissionSuccess": "Report successfully submitted, thank you" - } - }, - "FilterModal": { - "button": { - "cancel": "Cancel", - "hide": "Hide content" - }, - "message": { - "success": "Content filter successfully added" - }, - "header": { - "modal": "Do you want to hide content from artist \"{ name }\"?", - "failure": "Error while creating filter" - }, - "warning": { - "createFilter": { - "listItem2": "In \"Recently added\" widget", - "listItem3": "In artists and album listings", - "listItem1": "In other users' favourites and listening history", - "listItem4": "In radio suggestions", - "listIntro": "You will not see tracks, albums and user activity linked to this artist any more:" - } - }, - "help": { - "createFilter": "You can manage and update your filters any time from your account settings." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "An error occurred while trying to refresh data:", - "success": "Data was refreshed successfully from remote server.", - "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", - "skipped": "The remote server answered, but returned data was unsupported by Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "An HTTP error occurred while contacting the remote server", - "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", - "connectionError": "Impossible to connect to the remote server", - "httpStatus": "The remote server answered with HTTP { status }", - "timeoutError": "The remote server didn't respond quickly enough", - "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", - "unknownError": "Unknown error" - }, - "label": { - "detail": "Error detail", - "type": "Error type" - } - } - }, - "button": { - "close": "Close", - "reload": "Close and reload page" - }, - "header": { - "saveFailure": "Error while saving settings", - "failure": "Refresh error", - "pending": "Refresh pending", - "success": "Refresh successful", - "skipped": "Refresh was skipped", - "refresh": "Refreshing object from remote server…" - }, - "loader": { - "fetchRequest": "Requesting a fetch…", - "awaitingResult": "Waiting for result…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "No matching library." - }, - "button": { - "showMore": "Show more" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Audio player shortcuts", - "clearQueue": "Clear queue", - "decreaseVolume": "Decrease volume", - "expandQueue": "Expand queue/player view", - "increaseVolume": "Increase volume", - "playPause": "Pause/play the current track", - "playNext": "Play next track", - "playPrevious": "Play previous track", - "seekBack30": "Seek backwards 30s", - "seekBack5": "Seek backwards 5s", - "seekForward30": "Seek forwards 30s", - "seekForward5": "Seek forwards 5s", - "shuffleQueue": "Shuffle queue", - "toggleFavorite": "Toggle favourite", - "toggleMute": "Toggle mute", - "toggleLoop": "Toggle queue looping" - }, - "general": { - "focus": "Focus searchbar", - "label": "General shortcuts", - "show": "Show available keyboard shortcuts", - "unfocus": "Unfocus searchbar" - } - }, - "button": { - "close": "Close" - }, - "header": { - "modal": "Keyboard shortcuts" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Cancel", - "submit": "Submit" - }, - "header": { - "chooseInstance": "Choose your instance", - "failure": "It is not possible to connect to the given URL", - "suggestions": "Suggested choices" - }, - "label": { - "url": "Instance URL" - }, - "help": { - "notFunkwhaleServer": "The given address is not a Funkwhale server", - "serverDown": "The server might be down", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." - }, - "message": { - "newUrl": "You are now using the Funkwhale instance at {url}", - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted." - } - }, - "Queue": { - "button": { - "clear": "Clear", - "close": "Close", - "stopRadio": "Stop radio" - }, - "label": { - "duration": "Duration", - "addArtistContentFilter": "Hide content from this artist…", - "next": "Next track", - "pause": "Pause", - "play": "Play", - "previous": "Previous track", - "queue": "Queue", - "remove": "Remove", - "restart": "Restart track", - "populatingRadio": "Fetching radio track...", - "selectTrack": "Select track", - "favorite": "Favourite track", - "enterFullscreen": "Enter fullscreen mode", - "exitFullscreen": "Exit fullscreen mode", - "showCoverArt": "Show Cover Art", - "showVisualizer": "Show MoonDrop visualiser" - }, - "message": { - "radio": "New tracks will be appended here automatically.", - "automaticPlay": "The next track will play automatically in a few seconds…" - }, - "header": { - "failure": "The track cannot be loaded", - "radio": "You have a radio playing", - "noSources": "The track has no available sources." - }, - "meta": { - "queuePosition": "Track {index} of {length}", - "startTime": "00:00" - }, - "warning": { - "connectivity": "You may have a connectivity issue." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copy" - }, - "title": "Show/hide password", - "message": { - "copy": "Text copied to clipboard!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Edit" - } - }, - "Button": { - "startRadio": "Play radio", - "stopRadio": "Stop radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Error while fetching object" - }, - "button": { - "fediverse": "Fediverse", - "rss": "RSS", - "search": "Search" - }, - "label": { - "fediverse": { - "fieldLabel": "Fediverse object", - "title": "Fediverse object", - "fieldPlaceholder": "{'@'}username{'@'}example.com" - }, - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml", - "fieldLabel": "RSS feed location", - "title": "Subscribe to a podcast RSS feed" - } - }, - "warning": { - "unsupported": "This kind of object isn't supported yet" - }, - "error": { - "fetchFailed": "This object cannot be retrieved" - }, - "description": { - "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", - "rss": "Use this form to subscribe to an RSS feed from its URL." - } - }, - "PageNotFound": { - "link": { - "home": "Go to home page" - }, - "title": "Page not found", - "header": { - "pageNotFound": "Page not found!" - }, - "message": { - "pageNotFound": "Sorry, the page you asked for does not exist:" - } - }, - "vui": { - "Pagination": { - "next": "Next Page", - "label": "Pagination", - "previous": "Previous Page" - } - }, - "tags": { - "List": { - "button": { - "more": "Show 1 more tag | Show { n } more tags" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episode | { n } episodes", - "listenings": "{ n } listening | { n } listenings", - "subscribers": "{ n } subscriber | { n } subscribers", - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "channelEpisodes": "All Episodes", - "mirrored": "Mirrored from { domain }", - "moderation": "Open in moderation interface", - "channelOverview": "Overview", - "channelTracks": "Tracks", - "domainView": "View on { domain }" - }, - "header": { - "artistChannel": "Artist channel", - "podcastChannel": "Podcast channel" - }, - "button": { - "cancel": "Cancel", - "confirm": "Delete", - "delete": "Delete…", - "edit": "Edit…", - "embed": "Embed", - "play": "Play", - "updateChannel": "Update channel", - "upload": "Upload" - }, - "title": "Channel", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copy-paste the following URL in your favourite podcatcher:" - }, - "header": "Subscribe via RSS" - }, - "fediverse": { - "content": { - "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" - }, - "header": "Subscribe on the Fediverse" - }, - "funkwhale": { - "header": "Subscribe on Funkwhale" - }, - "header": "Subscribe to this channel" }, - "delete": { - "header": "Delete this Channel?", - "content": { - "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this artist work on your website" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Add new", - "erroredUploads": "View errored uploads", - "skippedUploads": "View skipped uploads" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Latest episodes", - "latestTracks": "Latest tracks", - "series": "Series", - "uploadsFailure": "Some uploads couldn't be published", - "uploadsProcessing": "Uploads are being processed", - "uploadsSuccess": "Uploads published successfully" - }, - "meta": { - "progress": "Processed uploads:" - }, - "message": { - "processing": "Your uploads are being processed by Funkwhale and will be live very soon." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Add new" - }, - "button": { - "cancel": "Cancel", - "subscribe": "Subscribe" - }, - "placeholder": { - "search": "Filter by name…" - }, - "title": "Subscribed Channels", - "modal": { - "subscription": { - "header": "Subscription" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "details": "Library Details" - }, - "label": { - "size": "Total size of the files in this library" - }, - "button": { - "upload": "Upload" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } used of { max } allowed", - "errored": "Errored files", - "pending": "Pending files", - "skipped": "Skipped files" - }, - "header": { - "currentUsage": "Current usage" - }, - "loading": { - "currentUsage": "Loading usage data…" - }, - "button": { - "purge": "Purge" - }, - "modal": { - "purgeErrored": { - "header": "Purge errored files?", - "content": { - "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." - } - }, - "purgePending": { - "header": "Purge pending files?", - "content": { - "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." - } - }, - "purgeSkipped": { - "header": "Purge skipped files?", - "content": { - "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." - } - } - }, - "link": { - "viewFiles": "View files" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artist", - "duration": "Duration", - "importStatus": "Import status", - "size": "Size", - "title": "Title", - "uploadDate": "Upload date" + "code": "Code", + "link": "Share link" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Delete" + }, + "label": { + "expired": "Expired", + "search": "Search", + "status": "Status", + "unused": "Not used", + "used": "Used" }, "option": { - "status": { - "all": "All", - "draft": "Draft", - "failed": "Failed", - "finished": "Finished", - "pending": "Pending", - "skipped": "Skipped" - } + "all": "All", + "expired": "Expired/used", + "open": "Open" }, + "ordering": { + "label": "Ordering" + }, + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, + "placeholder": { + "search": "Search by username, e-mail address, code…" + }, + "table": { + "invitation": { + "header": { + "code": "Code", + "creationDate": "Creation date", + "expirationDate": "Expiry date", + "owner": "Owner", + "status": "Status", + "user": "User" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Search" + }, + "notApplicable": "N/A", "ordering": { "direction": { "ascending": "Ascending", @@ -3099,397 +2693,579 @@ }, "label": "Ordering" }, - "action": { - "delete": "Delete", - "restartImport": "Restart import" + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" }, - "label": { - "importStatus": "Import status", - "search": "Search" - }, - "notApplicable": "N/A", - "empty": { - "noTracks": "No tracks have been added to this library yet" + "permission": { + "library": "Library", + "moderation": "Moderation", + "settings": "Settings" }, "placeholder": { - "search": "Search by title, artist, album…" + "search": "Search by username, e-mail address, name…" }, - "button": { - "showStatus": "Show information about the upload status for this track" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Create a new library" - }, - "loading": { - "libraries": "Loading Libraries…" - }, - "empty": { - "noLibrary": "Looks like you don't have a library, it's time to create one." - }, - "header": { - "libraries": "My libraries" - } - }, - "Form": { - "button": { - "create": "Create library", - "delete": "Delete", - "confirm": "Delete library", - "update": "Update library" - }, - "modal": { - "delete": { - "header": "Delete this library?", - "content": { - "warning": "The library and all its tracks will be deleted. This can not be undone." + "table": { + "user": { + "accountStatus": { + "active": "Active", + "inactive": "Inactive" + }, + "header": { + "accountStatus": "Account status", + "email": "Email", + "lastActivity": "Last activity", + "permissions": "Permissions", + "signup": "Sign-up", + "status": "Status", + "username": "Username" + }, + "status": { + "admin": "Admin", + "regular": "Regular user", + "staff": "Staff member" } } - }, - "label": { - "description": "Description", - "name": "Name", - "visibility": "Visibility" - }, - "header": { - "failure": "Error" - }, - "description": { - "library": "Libraries help you organise and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", - "visibility": "You are able to share your library with other people, regardless of its visibility." - }, - "message": { - "libraryCreated": "Library created", - "libraryDeleted": "Library deleted", - "libraryUpdated": "Library updated" - }, - "placeholder": { - "name": "My awesome library", - "description": "This library contains my personal music, I hope you like it." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks", - "failedTracks": "Failed tracks:", - "lastUpdate": "Last update:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "By unfollowing this library, you lose access to its content." - }, - "header": "Unfollow this library?" - } - }, - "button": { - "cancel": "Cancel follow request", - "follow": "Follow", - "pending": "Follow request pending approval", - "unfollow": "Unfollow" - }, - "link": { - "scanDetails": "Details", - "scan": "Scan now" - }, - "label": { - "scanFailure": "Problem during scanning", - "scanPending": "Scan pending", - "scanSuccess": "Scanned", - "scanPartialSuccess": "Scanned with errors", - "scanProgress": "Scanning… ({ progress }%)", - "sharingLink": "Sharing link" - }, - "message": { - "scanLaunched": "Scan launched", - "scanSkipped": "Scan skipped (previous scan is too recent)" - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely" - } - }, - "ScanForm": { - "header": { - "failure": "Could not fetch remote library" - }, - "placeholder": { - "url": "Enter a library URL" - }, - "label": { - "search": "Search a remote library" - }, - "button": { - "submit": "Submit search" - } - }, - "Home": { - "header": { - "knownLibraries": "Known libraries", - "remoteLibraries": "Remote libraries" - }, - "loading": { - "remoteLibraries": "Loading remote libraries…" - }, - "button": { - "refresh": "Refresh" - }, - "description": { - "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." - } - } - }, - "Home": { - "title": "Add and manage content", - "description": { - "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", - "channel": { - "1": "If you are a musician or a podcaster, channels are designed for you!", - "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." - }, - "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." - }, - "header": { - "follow": "Follow remote libraries", - "channel": "Publish your work in a channel", - "upload": "Upload third-party content in a library" - }, - "button": { - "start": "Get started" - }, - "help": { - "uploadQuota": "This instance offers up to {quota} of storage space for every user." - } - }, - "Base": { - "title": "Add content", - "link": { - "libraries": "Libraries", - "tracks": "Tracks" - }, - "menu": { - "secondary": "Secondary menu" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "moderation": "Open in moderation interface", - "owner": "Owned by { username }", - "tracks": "Tracks", - "domain": "View on { domain }" - }, - "button": { - "edit": "Edit", - "upload": "Upload" - }, - "title": "Library", - "label": { - "private": "Private", - "public": "Public", - "instance": "Restricted", - "sharingLink": "Sharing link" - }, - "description": { - "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely", - "instance": "This library is restricted to users on this pod only" - } - }, - "Edit": { - "button": { - "accept": "Accept", - "reject": "Reject" - }, - "table": { - "action": { - "status": { - "accepted": "Accepted", - "pending": "Pending approval", - "rejected": "Rejected" - }, - "header": { - "action": "Action", - "date": "Date", - "status": "Status", - "user": "User" - } - } - }, - "header": { - "followers": "Followers", - "libraryContents": "Library contents" - }, - "loading": { - "followers": "Loading followers…" - }, - "empty": { - "noFollowers": "Nobody is following this library" - } - }, - "DetailAlbums": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - }, - "DetailOverview": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - }, - "DetailTracks": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - } - }, - "auth": { - "ProfileBase": { - "title": "{ username }'s profile", - "link": { - "activity": "Activity", - "moderation": "Open in moderation interface", - "overview": "Overview", - "domainView": "View on { domain }" - }, - "label": { - "self": "This is you!" - } - }, - "PasswordReset": { - "label": { - "email": "Account's e-mail address" - }, - "button": { - "requestReset": "Ask for a password reset" - }, - "link": { - "back": "Back to login" - }, - "placeholder": { - "email": "Enter the e-mail address linked to your account" - }, - "header": { - "failure": "Error while asking for a password reset", - "reset": "Reset your password" - }, - "title": "Reset your password", - "help": { - "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Add new" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Artist channel" - }, - "header": "Create channel", - "podcast": { - "header": "Podcast channel" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Cancel", - "createChannel": "Create channel", - "next": "Next step", - "previous": "Previous step" + "hide": "Hide content" }, "header": { - "channels": "Channels", - "sharedLibraries": "This user shared the following libraries", - "libraries": "User Libraries" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Back to login", - "login": "Proceed to login" + "failure": "Error while creating filter", + "modal": "Do you want to hide content from artist \"{name}\"?" }, - "title": "Change your password", - "header": { - "failure": "Error while changing your password", - "success": "Password updated successfully" + "help": { + "createFilter": "You can manage your filters any time from your account settings." }, "message": { - "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", - "success": "Your password has been updated successfully." + "success": "Content filter successfully added" }, + "warning": { + "createFilter": { + "listIntro": "You will not see tracks, albums and user activity linked to this artist any more:", + "listItem1": "In other users' favourites and listening history", + "listItem2": "In \"Recently added\" widget", + "listItem3": "In artists and album listings", + "listItem4": "In radio suggestions" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "New password" + "category": "Category" }, + "option": { + "all": "All" + } + }, + "ReportModal": { "button": { - "update": "Update your password" - } - }, - "EmailConfirm": { - "title": "Confirm your e-mail address", - "label": { - "confirmationCode": "Confirmation code" + "cancel": "Cancel", + "submit": "Submit report" + }, + "description": { + "email": "We'll use this e-mail address if we need to contact you regarding this report.", + "forwardToDomain": "Forward an anonymised copy of your report to the server hosting this element.", + "message": "Use this field to provide additional context to the moderator that will handle your report.", + "modal": "Use this form to submit a report to our moderation team" + }, + "error": { + "nodeinfoFetch": "Cannot fetch Node Info: {error}" }, "header": { - "failure": "Could not confirm your e-mail address", - "success": "E-mail address confirmed" + "disabled": "Anonymous reports are disabled, please sign in to submit a report.", + "modal": "Do you want to report this object?", + "submissionFailure": "Error while submitting report" }, - "link": { - "login": "Proceed to login", - "back": "Return to login" + "label": { + "email": "Email", + "forwardToDomain": "Forward to {domain}", + "message": "Message" }, "message": { - "success": "You can now use the service without limitations." - } - }, - "Signup": { - "header": { - "createAccount": "Create a Funkwhale account" - }, - "title": "Sign Up" - }, - "Login": { - "title": "Log In", - "header": { - "login": "Log in to your Funkwhale account" - } - }, - "Callback": { - "header": { - "loggingIn": "Logging in…" - } - }, - "Plugins": { - "title": "Manage plugins" - }, - "ProfileActivity": { - "header": { - "playlists": "Playlists", - "recentlyFavorited": "Recently favourited", - "recentlyListened": "Recently listened" + "submissionSuccess": "Report successfully submitted, thank you" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Approve", + "markRead": "Mark as read", + "markUnread": "Mark as unread", + "reject": "Reject" + }, + "message": { + "libraryAcceptFollow": "{username} accepted your follow on library \"{library}\"", + "libraryFollow": "{username} followed your library \"{library}\"", + "libraryPendingFollow": "{username} wants to follow your library \"{library}\"", + "libraryReject": "You rejected {username}'s request to follow \"{library}\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Editor": { + "button": { + "addDuplicate": "Add anyway", + "clear": "Clear playlist", + "copy": "Copy the current queue to this playlist", + "insertFromQueue": "Insert from queue ({n} track) | Insert from queue ({n} tracks" + }, + "error": { + "sync": "An error occurred while saving your changes" + }, + "header": { + "editor": "Playlist editor" + }, + "help": { + "reorder": "Drag and drop rows to reorder tracks in the playlist" + }, + "loading": { + "sync": "Syncing changes to server…" + }, + "message": { + "sync": "Changes synced with server" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "This will remove all tracks from this playlist and cannot be undone." + }, + "header": "Do you want to clear the playlist \"{playlist}\"?" + } + }, + "warning": { + "duplicate": "Some tracks in your queue are already in this playlist:" + } + }, + "Form": { + "button": { + "create": "Create playlist", + "update": "Update playlist" + }, + "header": { + "createFailure": "The playlist could not be created", + "createPlaylist": "Create a new playlist", + "createSuccess": "Playlist created", + "updateSuccess": "Playlist updated" + }, + "label": { + "name": "Playlist name", + "visibility": "Playlist visibility" + }, + "placeholder": { + "name": "My awesome playlist" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Add anyway", + "addToPlaylist": "Add to this playlist", + "addTrack": "Add track", + "cancel": "Cancel", + "edit": "Edit" + }, + "empty": { + "noPlaylists": "No playlists have been created yet" + }, + "header": { + "addFailure": "The track can't be added to a playlist", + "addToPlaylist": "Add to playlist", + "available": "Available playlists", + "manage": "Manage playlists", + "noResults": "No results matching your filter", + "track": "{title}, by {artist}" + }, + "label": { + "filter": "Filter" + }, + "placeholder": { + "filterPlaylist": "Enter playlist name" + }, + "table": { + "edit": { + "header": { + "edit": "Edit", + "lastModification": "Last modification", + "name": "Name", + "tracks": "Tracks" + } + } + }, + "warning": { + "duplicate": "{ 0 } is already in { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Add to playlist…" + } + }, + "Widget": { + "button": { + "create": "Create playlist", + "more": "Show more" + }, + "placeholder": { + "noPlaylists": "No playlists have been created yet" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Start artists radio", + "startPlaylistsRadio": "Start playlists radio", + "startRadio": "Play radio", + "startTagsRadio": "Start tags radio", + "stopArtistsRadio": "Stop artists radio", + "stopPlaylistsRadio": "Stop playlists radio", + "stopRadio": "Stop radio", + "stopTagsRadio": "Stop tags radio" + }, + "Card": { + "button": { + "edit": "Edit" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Show 1 more tag | Show {n} more tags" + } + } + }, + "vui": { + "Pagination": { + "label": "Pagination", + "next": "Next Page", + "previous": "Previous Page" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{n} tracks were added to your queue | {n} track was added to your queue | {n} tracks were added to your queue" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Music", + "other": "Other", + "podcast": "Podcast" + }, + "label": "Content category" + }, + "importStatus": { + "choices": { + "draft": { + "help": "This track has been uploaded, but hasn't been scheduled for processing yet", + "label": "Draft" + }, + "errored": { + "help": "This track could not be processed, please make sure it is tagged correctly", + "label": "Errored" + }, + "finished": { + "help": "Imported", + "label": "Finished" + }, + "pending": { + "help": "This track has been uploaded, but hasn't been processed by the server yet", + "label": "Pending" + }, + "skipped": { + "help": "This track is already present in one of your libraries", + "label": "Skipped" + } + }, + "label": "Click to display more information about the import process for this upload" + }, + "privacyLevel": { + "choices": { + "instance": "Everyone on this instance", + "private": "Nobody except me", + "public": "Everyone, across all instances" + }, + "help": "Determine the visibility level of your activity", + "label": "Activity visibility", + "shortChoices": { + "instance": "Instance", + "private": "Private", + "public": "Everyone" + } + }, + "reportType": { + "choices": { + "illegalContent": "Illegal content", + "invalidMetadata": "Invalid metadata", + "offensiveContent": "Offensive content", + "other": "Other", + "takedownRequest": "Takedown request" + }, + "label": "Category" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Accessed date", + "albumTitle": "Album name", + "appliedDate": "Applied date", + "artistName": "Artist name", + "bitrate": "Bitrate", + "creationDate": "Creation date", + "dateJoined": "Sign-up date", + "domain": "Domain", + "duration": "Duration", + "expirationDate": "Expiry date", + "firstSeen": "First seen date", + "followers": "Followers", + "handledDate": "Handled date", + "itemsCount": "Items", + "lastActivity": "Last activity", + "lastSeen": "Last seen date", + "modificationDate": "Modification date", + "name": "Name", + "receivedMessages": "Received messages", + "releaseDate": "Release date", + "size": "Size", + "trackTitle": "Track name", + "uploads": "Uploads", + "username": "Username", + "users": "Users" + }, + "scopes": { + "edits": { + "description": "Access to edits", + "label": "Edits" + }, + "favorites": { + "description": "Access to favourites", + "label": "Favourites" + }, + "filters": { + "description": "Access to content filters", + "label": "Content filters" + }, + "follows": { + "description": "Access to follows", + "label": "Follows" + }, + "libraries": { + "description": "Access to audio files, libraries, artists, albums and tracks", + "label": "Libraries and uploads" + }, + "listenings": { + "description": "Access to listening history", + "label": "Listenings" + }, + "notifications": { + "description": "Access to notifications", + "label": "Notifications" + }, + "playlists": { + "description": "Access to playlists", + "label": "Playlists" + }, + "profile": { + "description": "Access to e-mail, username, and profile information", + "label": "Profile" + }, + "radios": { + "description": "Access to radios", + "label": "Radios" + }, + "reports": { + "description": "Access to moderation reports", + "label": "Reports" + }, + "security": { + "description": "Access to security settings such as password and authorisation", + "label": "Security" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "name": "Name" + }, + "cover": { + "label": "Cover" + }, + "description": { + "label": "Description" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "license": "License", + "position": "Position", + "title": "Title" + } + }, + "useReport": { + "account": { + "label": "Report {'@'}{username}", + "typeLabel": "Account" + }, + "album": { + "label": "Report this album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Report this artist…", + "typeLabel": "Artist", + "unknownLabel": "Unknown artist" + }, + "channel": { + "label": "Report this channel…", + "typeLabel": "Channel" + }, + "library": { + "label": "Report this library…", + "typeLabel": "Library" + }, + "playlist": { + "label": "Report this playlist…", + "typeLabel": "Playlist" + }, + "track": { + "label": "Report this track…", + "typeLabel": "Track" + } + }, + "useReportConfigs": { + "account": { + "label": "Account", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "label": "Artist" + }, + "channel": { + "label": "Channel" + }, + "creationDate": { + "label": "Creation date" + }, + "library": { + "description": "Description", + "label": "Library" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Name" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "label": "Track", + "license": "License", + "position": "Position", + "title": "Title" + }, + "visibility": { + "label": "Visibility" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", + "errorReportTitle": "An unexpected error occurred.", + "leaveFeedback": "Leave feedback", + "unexpectedError": "An unexpected error occurred." + }, + "useThemeList": { + "browserDefault": "Browser default", + "darkTheme": "Dark", + "lightTheme": "Light" + } + }, + "init": { + "axios": { + "rateLimitDelay": "You sent too many requests and have been rate limited, please try again in {delay}", + "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" + }, + "sentry": { + "allow": "Allow", + "deny": "Deny", + "funkwhaleInstance": "Funkwhale's official Glitchtip instance", + "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", + "title": "To enhance the quality of our services, we would like to collect information about crashes during your session." + }, + "serviceWorker": { + "actions": { + "later": "Later", + "update": "Update" + }, + "newAppVersion": "A new version of the app is available." + } + }, + "views": { "Notifications": { + "button": { + "read": "Mark all as read", + "submit": "Got it!" + }, + "empty": { + "notifications": "No notification to show" + }, + "header": { + "funkwhaleSupport": "Do you like Funkwhale?", + "instanceSupport": "Support this Funkwhale pod", + "messages": "Your messages", + "notifications": "Your notifications" + }, + "label": { + "reminder": "Remind me in:", + "showRead": "Show read notifications" + }, + "link": { + "donate": "Donate", + "help": "Discover other ways to help" + }, + "loading": { + "notifications": "Loading notifications…" + }, + "message": { + "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" + }, "option": { "delay": { "30": "30 days", @@ -3498,584 +3274,63 @@ "never": "Never" } }, - "link": { - "help": "Discover other ways to help", - "donate": "Donate" + "title": "Notifications" + }, + "Search": { + "button": { + "submit": "Submit Search Query" }, "header": { - "funkwhaleSupport": "Do you like Funkwhale?", - "instanceSupport": "Support this Funkwhale pod", - "messages": "Your messages", - "notifications": "Your notifications" + "remote": "Search a remote object", + "rss": "Subscribe to a podcast RSS feed", + "search": "Search" }, - "button": { - "submit": "Got it!", - "read": "Mark all as read" - }, - "loading": { - "notifications": "Loading notifications…" - }, - "empty": { - "notifications": "No notification to show." - }, - "title": "Notifications", "label": { - "reminder": "Remind me in:", - "showRead": "Show read notifications" - }, - "message": { - "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" + "albums": "Albums", + "artists": "Artists", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Tags", + "tracks": "Tracks" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Username", - "loginStatus": { - "disabled": "Disabled", - "enabled": "Enabled", - "label": "Login status" - }, - "displayName": "Display name", - "email": "Email address", - "lastActivity": "Last activity", - "lastChecked": "Last checked", - "permissions": "Permissions", - "signupDate": "Sign-up date", - "userType": "Type" - }, - "audioContent": { - "cachedSize": "Cached size", - "megabyte": "MB", - "totalSize": "Total size", - "uploadQuota": "Upload quota" - }, - "activity": { - "emittedFollows": "Emitted library follows", - "emittedMessages": "Emitted messages", - "firstSeen": "First seen", - "receivedFollows": "Received library follows" - } - }, - "header": { - "accountData": "Account data", - "activity": "Activity", - "audioContent": "Audio content", - "localAccount": "Local account", - "activePolicy": "This domain is subject to specific moderation rules", - "noPolicy": "You don't have any rule in place for this account." - }, - "button": { - "addPolicy": "Add a moderation policy" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "domain": "Domain", - "libraries": "Libraries", - "linkedReports": "Linked reports", - "openProfile": "Open profile", - "remoteProfile": "Open remote profile", - "requests": "Requests", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "tooltip": { - "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." - }, - "option": { - "permission": { - "library": "Library", - "moderation": "Moderation", - "settings": "Settings" - } - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account." - }, - "notApplicable": "N/A", - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "Base": { - "link": { - "accounts": "Accounts", - "domains": "Domains", - "reports": "Reports", - "userRequests": "User Requests" - }, - "title": "Moderation", - "menu": { - "secondary": "Secondary menu" - } - }, - "DomainsDetail": { - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "instanceData": "Instance data", - "activePolicy": "This domain is subject to specific moderation rules", - "noPolicy": "You don't have any rule in place for this domain." - }, - "button": { - "addPolicy": "Add a moderation policy", - "addToAllowList": "Add to allow-list", - "refreshNodeInfo": "Refresh node info", - "removeFromAllowList": "Remove from allow-list" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "knownAccounts": "Known accounts", - "libraries": "Libraries", - "website": "Open website", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "activity": { - "emittedFollows": "Emitted library follows", - "emittedMessages": "Emitted messages", - "firstSeen": "First seen", - "receivedFollows": "Received library follows" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Error while fetching node info", - "label": "Status" - }, - "inAllowList": { - "label": "Is present on allow-list", - "false": "No", - "true": "Yes" - }, - "lastChecked": "Last checked", - "domainName": "Name", - "software": { - "label": "Software" - }, - "totalUsers": "Total users" - } - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account." - }, - "notApplicable": "N/A", - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "DomainsList": { - "button": { - "add": "Add" - }, - "label": { - "addDomain": "Add a domain", - "addToAllowList": "Add to allow-list" - }, - "title": "Domains", - "header": { - "domains": "Domains", - "failure": "Error while creating domain" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "All", - "resolved": "Resolved", - "unresolved": "Unresolved" - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "title": "Reports", - "header": { - "reports": "Reports" - }, - "label": { - "search": "Search", - "status": "Status" - }, - "placeholder": { - "search": "Search by account, summary, domain…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "All", - "approved": "Approved", - "pending": "Pending", - "refused": "Refused" - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "label": { - "search": "Search", - "status": "Status" - }, - "placeholder": { - "search": "Search by username…" - }, - "title": "User Requests", - "header": { - "userRequests": "User Requests" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Accessed date", - "firstSeen": "First seen" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Cached size", - "duration": "Duration", - "size": "Size", - "track": "Track" - }, - "upload": { - "name": "Name" - } - }, - "link": { - "account": "Account", - "domain": "Domain", - "importStatus": "Import status", - "library": "Library", - "remoteProfile": "Open remote profile", - "type": "Type", - "django": "View in Django's admin", - "visibility": "Visibility" - }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "local": "Local", - "uploadData": "Upload date" - }, - "button": { - "delete": "Delete", - "download": "Download" - }, - "modal": { - "delete": { - "header": "Delete this upload?", - "content": { - "warning": "The upload will be removed. This action is irreversible." - } - } - }, - "notApplicable": "N/A" - }, - "LibraryDetail": { - "link": { - "account": "Account", - "albums": "Albums", - "artists": "Artists", - "domain": "Domain", - "reports": "Linked reports", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin", - "visibility": "Visibility" - }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "libraryData": "Library data", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "library": { - "description": "Description", - "name": "Name" - }, - "activity": { - "firstSeen": "First seen", - "followers": "Followers" - } - }, - "button": { - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this library?", - "content": { - "warning": "The library will be removed, as well as associated uploads, and follows. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "AlbumDetail": { - "header": { - "activity": "Activity", - "albumData": "Album data", - "audioContent": "Audio content", - "local": "Local" - }, - "link": { - "artist": "Artist", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "album": { - "description": "Description", - "title": "Title" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be removed, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "ArtistDetail": { - "header": { - "activity": "Activity", - "artistData": "Artist data", - "audioContent": "Audio content", - "local": "Local" - }, - "link": { - "albums": "Albums", - "category": "Category", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "artist": { - "description": "Description", - "name": "Name" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this artist?", - "content": { - "warning": "The artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "TagDetail": { - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "tagData": "Tag data" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "localProfile": "Open local profile", - "tracks": "Tracks", - "django": "View in Django's admin" - }, - "button": { - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this tag?", - "content": { - "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." - } - } - }, - "table": { - "activity": { - "firstSeen": "First seen" - }, - "tag": { - "name": "Name" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Activity", - "local": "Local", - "trackData": "Track data" - }, - "link": { - "album": "Album", - "albumArtist": "Album artist", - "artist": "Artist", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "trackData": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "track": { - "copyright": "Copyright", - "description": "Description", - "discNumber": "Disc number", - "license": "License", - "position": "Position", - "title": "Title" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "edits": "Edits", - "libraries": "Libraries", - "tags": "Tags", - "tracks": "Tracks", - "uploads": "Uploads" - }, - "title": "Manage library", - "menu": { - "secondary": "Secondary menu" - } - }, - "EditsList": { - "title": "Edits", - "header": { - "edits": "Library edits" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Delete", + "openRemote": "Open remote profile", + "refresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "channelData": "Channel data" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "View in Django's admin", + "localProfile": "Open local profile" + }, + "modal": { + "delete": { + "content": { + "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." + }, + "header": "Delete this channel?" + } + }, "table": { - "channelData": { - "account": "Account", - "category": "Category", - "description": "Description", - "domain": "Domain", - "name": "Name", - "rss": "RSS Feed", - "url": "URL" + "activity": { + "edits": "Edits", + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "linkedReports": "Linked reports", + "listenings": "Listenings", + "playlists": "Playlists" }, "audioContent": { "albums": "Albums", @@ -4084,40 +3339,16 @@ "tracks": "Tracks", "uploads": "Uploads" }, - "activity": { - "edits": "Edits", - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "linkedReports": "Linked reports", - "listenings": "Listenings", - "playlists": "Playlists" + "channelData": { + "account": "Account", + "category": "Category", + "description": "Description", + "domain": "Domain", + "name": "Name", + "rss": "RSS Feed", + "url": "URL" } }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "channelData": "Channel data" - }, - "button": { - "delete": "Delete", - "openRemote": "Open remote profile", - "refresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this channel?", - "content": { - "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin" - }, "warning": { "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } @@ -4141,53 +3372,1205 @@ "channels": "Channels", "federation": "Federation", "instanceInfo": "Instance information", - "settings": "Instance settings", "moderation": "Moderation", "music": "Music", "playlists": "Playlists", "sections": "Sections", "security": "Security", + "settings": "Instance Settings", "signups": "Sign-ups", "stats": "Statistics", "subsonic": "Subsonic", "ui": "User Interface" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "albumData": "Album data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "artist": "Artist", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be removed, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this album?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "album": { + "description": "Description", + "title": "Title" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "ArtistDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "artistData": "Artist data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Category", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The artist will be deleted, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this artist?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "artist": { + "description": "Description", + "name": "Name" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "edits": "Edits", + "libraries": "Libraries", + "tags": "Tags", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Manage library" + }, + "EditsList": { + "header": { + "edits": "Library edits" + }, + "title": "Edits" + }, + "LibraryDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "libraryData": "Library data", + "local": "Local" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "domain": "Domain", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The library will be deleted, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this library?" + } + }, + "table": { + "activity": { + "firstSeen": "First seen", + "followers": "Followers" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, + "library": { + "description": "Description", + "name": "Name" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "TagDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "tagData": "Tag data" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "localProfile": "Open local profile", + "tracks": "Tracks" + }, + "modal": { + "delete": { + "content": { + "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." + }, + "header": "Delete this tag?" + } + }, + "table": { + "activity": { + "firstSeen": "First seen" + }, + "tag": { + "name": "Name" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "local": "Local", + "trackData": "Track data" + }, + "link": { + "album": "Album", + "albumArtist": "Album artist", + "artist": "Artist", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + }, + "header": "Delete this track?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "track": { + "copyright": "Copyright", + "description": "Description", + "discNumber": "Disc number", + "license": "License", + "position": "Position", + "title": "Title" + }, + "trackData": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "UploadDetail": { + "button": { + "delete": "Delete", + "download": "Download" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "local": "Local", + "uploadData": "Upload date" + }, + "link": { + "account": "Account", + "django": "View in Django's admin", + "domain": "Domain", + "importStatus": "Import status", + "library": "Library", + "remoteProfile": "Open remote profile", + "type": "Type", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The upload will be removed. This action is irreversible." + }, + "header": "Delete this upload?" + } + }, + "notApplicable": "N/A", + "table": { + "activity": { + "accessedDate": "Accessed date", + "firstSeen": "First seen" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "cachedSize": "Cached size", + "duration": "Duration", + "size": "Size", + "track": "Track" + }, + "upload": { + "name": "Name" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Add a moderation policy" + }, + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" + }, + "header": { + "accountData": "Account data", + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activity", + "audioContent": "Audio content", + "localAccount": "Local account", + "noPolicy": "You don't have any rule in place for this account." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "domain": "Domain", + "libraries": "Libraries", + "linkedReports": "Linked reports", + "openProfile": "Open profile", + "remoteProfile": "Open remote profile", + "requests": "Requests", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "notApplicable": "N/A", + "option": { + "permission": { + "library": "Library", + "moderation": "Moderation", + "settings": "Settings" + } + }, + "table": { + "accountData": { + "displayName": "Display name", + "email": "Email address", + "lastActivity": "Last activity", + "lastChecked": "Last checked", + "loginStatus": { + "disabled": "Disabled", + "enabled": "Enabled", + "label": "Login status" + }, + "permissions": "Permissions", + "signupDate": "Sign-up date", + "userType": "Type", + "username": "Username" + }, + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "megabyte": "MB", + "totalSize": "Total size", + "uploadQuota": "Upload quota" + } + }, + "tooltip": { + "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "accounts": "Accounts", + "domains": "Domains", + "reports": "Reports", + "userRequests": "User Requests" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Moderation" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Add a moderation policy", + "addToAllowList": "Add to allow-list", + "refreshNodeInfo": "Refresh node info", + "removeFromAllowList": "Remove from allow-list" + }, + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" + }, + "header": { + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activity", + "audioContent": "Audio content", + "instanceData": "Instance data", + "noPolicy": "You don't have any rule in place for this domain." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "knownAccounts": "Known accounts", + "libraries": "Libraries", + "tracks": "Tracks", + "uploads": "Uploads", + "website": "Open website" + }, + "notApplicable": "N/A", + "table": { + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, + "instanceData": { + "domainName": "Name", + "inAllowList": { + "false": "No", + "label": "Is present on allow-list", + "true": "Yes" + }, + "lastChecked": "Last checked", + "nodeInfoStatus": { + "label": "Status", + "value": "Error while fetching node info" + }, + "software": { + "label": "Software", + "value": "{name} ({version})" + }, + "totalUsers": "Total users" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "DomainsList": { + "button": { + "add": "Add" + }, + "header": { + "domains": "Domains", + "failure": "Error while creating domain" + }, + "label": { + "addDomain": "Add a domain", + "addToAllowList": "Add to allow-list" + }, + "title": "Domains" + }, + "ReportsList": { + "header": { + "reports": "Reports" + }, + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "status": { + "all": "All", + "resolved": "Resolved", + "unresolved": "Unresolved" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by account, summary, domain…" + }, + "title": "Reports" + }, + "RequestsList": { + "header": { + "userRequests": "User Requests" + }, + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "status": { + "all": "All", + "approved": "Approved", + "pending": "Pending", + "refused": "Refused" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by username" + }, + "title": "User Requests" + } + }, "users": { "Base": { "link": { "invitations": "Invitations", "users": "Users" }, - "title": "Manage users", "menu": { "secondary": "Secondary menu" + }, + "title": "Manage users" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Logging in…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Could not confirm your e-mail address", + "success": "E-mail address confirmed" + }, + "label": { + "confirmationCode": "Confirmation code" + }, + "link": { + "back": "Return to login", + "login": "Proceed to login" + }, + "message": { + "success": "You can now use the service without limitations" + }, + "title": "Confirm your e-mail address" + }, + "Login": { + "header": { + "login": "Log in to your Funkwhale account" + }, + "title": "Log In" + }, + "PasswordReset": { + "button": { + "requestReset": "Ask for a password reset" + }, + "header": { + "failure": "Error while asking for a password reset", + "reset": "Reset your password" + }, + "help": { + "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." + }, + "label": { + "email": "Account's e-mail address" + }, + "link": { + "back": "Back to login" + }, + "placeholder": { + "email": "Enter the e-mail address linked to your account" + }, + "title": "Reset your password" + }, + "PasswordResetConfirm": { + "button": { + "update": "Update your password" + }, + "header": { + "failure": "Error while changing your password", + "success": "Password updated successfully" + }, + "label": { + "newPassword": "New password" + }, + "link": { + "back": "Back to login", + "login": "Proceed to login" + }, + "message": { + "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", + "success": "Your password has been updated successfully." + }, + "title": "Change your password" + }, + "Plugins": { + "title": "Manage plugins" + }, + "ProfileActivity": { + "header": { + "playlists": "Playlists", + "recentlyFavorited": "Recently favourited", + "recentlyListened": "Recently listened" + } + }, + "ProfileBase": { + "label": { + "self": "This is you!" + }, + "link": { + "activity": "Activity", + "domainView": "View on {domain}", + "moderation": "Open in moderation interface", + "overview": "Overview" + }, + "title": "{username}'s profile" + }, + "ProfileOverview": { + "button": { + "cancel": "Cancel", + "createChannel": "Create channel", + "next": "Next step", + "previous": "Previous step" + }, + "header": { + "channels": "Channels", + "libraries": "User Libraries", + "sharedLibraries": "This user shared the following libraries" + }, + "link": { + "addNew": "Add New" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Artist channel" + }, + "header": "Create channel", + "podcast": { + "header": "Podcast channel" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Create a Funkwhale account" + }, + "title": "Sign up" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Cancel", + "confirm": "Delete", + "delete": "Delete…", + "edit": "Edit…", + "embed": "Embed", + "play": "Play", + "updateChannel": "Update channel", + "upload": "Upload" + }, + "header": { + "artistChannel": "Artist channel", + "podcastChannel": "Podcast channel" + }, + "link": { + "channelEpisodes": "All episodes", + "channelOverview": "Overview", + "channelTracks": "Tracks", + "domainView": "View on {domain}", + "mirrored": "Mirrored from {domain}", + "moderation": "Open in moderation interface" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "listenings": "No listenings | {n} listening | {n} listenings", + "subscribers": "No subscribers | {n} subscriber | {n} subscribers", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "modal": { + "delete": { + "content": { + "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this Channel?" + }, + "embed": { + "header": "Embed this artist work on your website" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" + }, + "header": "Subscribe on the Fediverse" + }, + "funkwhale": { + "header": "Subscribe on Funkwhale" + }, + "header": "Subscribe to this channel", + "rss": { + "content": { + "help": "Copy-paste the following URL in your favourite podcatcher:" + }, + "header": "Subscribe via RSS" + } + } + }, + "title": "Channel" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Latest episodes", + "latestTracks": "Latest tracks", + "series": "Series", + "uploadsFailure": "Some uploads couldn't be published", + "uploadsProcessing": "Uploads are being processed", + "uploadsSuccess": "Uploads published successfully" + }, + "link": { + "addAlbum": "Add new", + "erroredUploads": "View errored uploads", + "skippedUploads": "View skipped uploads" + }, + "message": { + "processing": "Your uploads are being processed by Funkwhale and will be live very soon." + }, + "meta": { + "progress": "Processed uploads: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Cancel", + "subscribe": "Subscribe" + }, + "link": { + "addNew": "Add new" + }, + "modal": { + "subscription": { + "header": "Subscription" + } + }, + "placeholder": { + "search": "Filter by name…" + }, + "title": "Subscribed Channels" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Libraries", + "tracks": "Tracks" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Add content" + }, + "Home": { + "button": { + "start": "Get started" + }, + "description": { + "channel": { + "1": "If you are a musician or a podcaster, channels are designed for you!", + "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." + }, + "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", + "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." + }, + "header": { + "channel": "Publish your work in a channel", + "follow": "Follow remote libraries", + "upload": "Upload third-party content in a library" + }, + "help": { + "uploadQuota": "This instance offers up to {quota} of storage space for every user." + }, + "title": "Add and manage content" + }, + "libraries": { + "Card": { + "button": { + "upload": "Upload" + }, + "label": { + "size": "Total size of the files in this library" + }, + "link": { + "details": "Library Details" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "FilesTable": { + "action": { + "delete": "Delete", + "restartImport": "Restart import" + }, + "button": { + "showStatus": "Show information about the upload status for this track" + }, + "empty": { + "noTracks": "No tracks have been added to this library yet" + }, + "label": { + "importStatus": "Import status", + "search": "Search" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "All", + "draft": "Draft", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artist", + "duration": "Duration", + "importStatus": "Import status", + "size": "Size", + "title": "Title", + "uploadDate": "Upload date" + } + } + } + }, + "Form": { + "button": { + "confirm": "Delete library", + "create": "Create library", + "delete": "Delete", + "update": "Update library" + }, + "description": { + "library": "Libraries help you organise and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", + "visibility": "You are able to share your library with other people, regardless of its visibility." + }, + "header": { + "failure": "Error" + }, + "label": { + "description": "Description", + "name": "Name", + "visibility": "Visibility" + }, + "message": { + "libraryCreated": "Library created", + "libraryDeleted": "Library deleted", + "libraryUpdated": "Library updated" + }, + "modal": { + "delete": { + "content": { + "warning": "The library and all its tracks will be deleted. This can not be undone." + }, + "header": "Delete this library?" + } + }, + "placeholder": { + "description": "This library contains my personal music, I hope you like it.", + "name": "My awesome library" + } + }, + "Home": { + "empty": { + "noLibrary": "Looks like you don't have a library, it's time to create one." + }, + "header": { + "libraries": "My libraries" + }, + "link": { + "createLibrary": "Create a new library" + }, + "loading": { + "libraries": "Loading libraries…" + } + }, + "Quota": { + "button": { + "purge": "Purge" + }, + "header": { + "currentUsage": "Current usage" + }, + "label": { + "currentUsage": "{amount} used on {max} allowed", + "errored": "Errored files", + "pending": "Pending files", + "percentUsed": "{progress}%", + "skipped": "Skipped files" + }, + "link": { + "viewFiles": "View files" + }, + "loading": { + "currentUsage": "Loading usage data…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." + }, + "header": "Purge errored files?" + }, + "purgePending": { + "content": { + "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." + }, + "header": "Purge pending files?" + }, + "purgeSkipped": { + "content": { + "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." + }, + "header": "Purge skipped files?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "pending": "Follow request pending approval", + "unfollow": "Unfollow" + }, + "error": { + "follow": "Cannot follow remote library: {error}", + "unfollow": "Cannot unfollow remote library: {error}" + }, + "label": { + "scanFailure": "Problem during scanning", + "scanPartialSuccess": "Scanned with errors", + "scanPending": "Scan pending", + "scanProgress": "Scanning ({progress})", + "scanSuccess": "Scanned", + "sharingLink": "Sharing link" + }, + "link": { + "scan": "Scan now ", + "scanDetails": "Details" + }, + "message": { + "scanLaunched": "Scan launched", + "scanSkipped": "Scan skipped (previous scan is too recent)" + }, + "meta": { + "failedTracks": "Failed tracks: {tracks}", + "lastUpdate": "Last update: ", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "modal": { + "unfollow": { + "content": { + "warning": "By unfollowing this library, you lose access to its content." + }, + "header": "Unfollow this library?" + } + }, + "tooltip": { + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" + } + }, + "Home": { + "button": { + "refresh": "Refresh" + }, + "description": { + "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." + }, + "header": { + "knownLibraries": "Known libraries", + "remoteLibraries": "Remote libraries" + }, + "loading": { + "remoteLibraries": "Loading remote libraries…" + } + }, + "ScanForm": { + "button": { + "submit": "Submit search" + }, + "header": { + "failure": "Could not fetch remote library" + }, + "label": { + "search": "Search a remote library" + }, + "placeholder": { + "url": "Enter a library URL" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artists", - "playlists": "Playlists", - "podcasts": "Podcasts", - "radios": "Radios", - "series": "Series", - "tags": "Tags", - "tracks": "Tracks" + "library": { + "DetailAlbums": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } }, - "header": { - "search": "Search", - "remote": "Search a remote object", - "rss": "Subscribe to a podcast RSS feed" + "DetailOverview": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } }, - "button": { - "submit": "Submit Search Query" + "DetailTracks": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } + }, + "Edit": { + "button": { + "accept": "Accept", + "reject": "Reject" + }, + "empty": { + "noFollowers": "Nobody is following this library" + }, + "header": { + "followers": "Followers", + "libraryContents": "Library contents" + }, + "loading": { + "followers": "Loading followers…" + }, + "table": { + "action": { + "header": { + "action": "Action", + "date": "Date", + "status": "Status", + "user": "User" + }, + "status": { + "accepted": "Accepted", + "pending": "Pending approval", + "rejected": "Rejected" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Edit", + "upload": "Upload" + }, + "description": { + "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." + }, + "label": { + "instance": "Restricted", + "private": "Private", + "public": "Public", + "sharingLink": "Sharing link" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "owner": "Owned by {username}", + "tracks": "Tracks" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Library", + "tooltip": { + "instance": "This library is restricted to users on this pod only", + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Cancel", + "confirm": "Delete playlist", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "playAll": "Play all", + "stopEdit": "Stop Editing" + }, + "empty": { + "noTracks": "There are no tracks in this playlist yet" + }, + "header": { + "tracks": "Tracks" + }, + "meta": { + "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" + }, + "modal": { + "delete": { + "content": { + "warning": "This will completely delete this playlist and cannot be undone." + }, + "header": "Do you want to delete the playlist {playlist}?" + }, + "embed": { + "header": "Embed this playlist on your website" + } + }, + "title": "Playlist" + }, "List": { + "button": { + "create": "Create a playlist", + "manage": "Manage your playlists", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing playlists", + "playlists": "Playlists" + }, + "label": { + "search": "Search" + }, "ordering": { "direction": { "ascending": "Ascending", @@ -4196,58 +4579,11 @@ }, "label": "Ordering" }, - "header": { - "browse": "Browsing playlists", - "playlists": "Playlists" - }, - "button": { - "create": "Create a playlist", - "manage": "Manage your playlists", - "search": "Search" - }, - "placeholder": { - "search": "Enter playlist name…" - }, - "empty": { - "noResults": "No results matching your query" - }, "pagination": { "results": "Results per page" }, - "label": { - "search": "Search" - } - }, - "Detail": { - "button": { - "cancel": "Cancel", - "delete": "Delete", - "confirm": "Delete playlist", - "edit": "Edit", - "embed": "Embed", - "playAll": "Play all", - "stopEdit": "Stop Editing" - }, - "modal": { - "delete": { - "header": "Do you want to delete the playlist \"{ playlist }\"?", - "content": { - "warning": "This will completely delete this playlist and cannot be undone." - } - }, - "embed": { - "header": "Embed this playlist on your website" - } - }, - "title": "Playlist", - "meta": { - "tracks": "Playlist containing { n } track, by { username } | Playlist containing { n } tracks, by { username }" - }, - "empty": { - "noTracks": "There are no tracks in this playlist yet" - }, - "header": { - "tracks": "Tracks" + "placeholder": { + "search": "Enter playlist name…" } } }, @@ -4255,292 +4591,26 @@ "Detail": { "button": { "confirm": "Delete radio", + "delete": "Delete", "edit": "Edit…" }, - "modal": { - "delete": { - "header": "Do you want to delete the radio \"{ radio }\"?", - "content": { - "warning": "This will completely delete this radio and cannot be undone." - } - } - }, "empty": { "noTracks": "No tracks have been added to this radio yet" }, - "title": "Radio", "header": { + "radio": "Radio containing {tracks} tracks, by ", "tracks": "Tracks" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } track was added to your queue | { n } tracks were added to your queue" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Access to audio files, libraries, artists, albums and tracks", - "label": "Libraries and uploads" - }, - "filters": { - "description": "Access to content filters", - "label": "Content filters" - }, - "profile": { - "description": "Access to e-mail, username, and profile information", - "label": "Profile" - }, - "edits": { - "description": "Access to edits", - "label": "Edits" - }, - "follows": { - "description": "Access to follows", - "label": "Follows" - }, - "listenings": { - "description": "Access to listening history", - "label": "Listenings" - }, - "reports": { - "description": "Access to moderation reports", - "label": "Reports" - }, - "notifications": { - "description": "Access to notifications", - "label": "Notifications" - }, - "playlists": { - "description": "Access to playlists", - "label": "Playlists" - }, - "radios": { - "description": "Access to radios", - "label": "Radios" - }, - "security": { - "description": "Access to security settings such as password and authorisation", - "label": "Security" - }, - "favorites": { - "label": "Favourites" - } }, - "filters": { - "accessedDate": "Accessed date", - "albumTitle": "Album name", - "artistName": "Artist name", - "bitrate": "Bitrate", - "creationDate": "Creation date", - "domain": "Domain", - "duration": "Duration", - "expirationDate": "Expiry date", - "firstSeen": "First seen date", - "followers": "Followers", - "itemsCount": "Items", - "lastActivity": "Last activity", - "lastSeen": "Last seen date", - "modificationDate": "Modification date", - "name": "Name", - "receivedMessages": "Received messages", - "releaseDate": "Release date", - "dateJoined": "Sign-up date", - "size": "Size", - "trackTitle": "Track name", - "uploads": "Uploads", - "username": "Username", - "users": "Users" - }, - "fields": { - "privacyLevel": { - "label": "Activity visibility", - "help": "Determine the visibility level of your activity", - "shortChoices": { - "public": "Everyone", - "instance": "Instance", - "private": "Private" + "modal": { + "delete": { + "content": { + "warning": "This will completely delete this radio and cannot be undone." }, - "choices": { - "instance": "Everyone on this instance", - "public": "Everyone, across all instances", - "private": "Nobody except me" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Category", - "choices": { - "illegalContent": "Illegal content", - "invalidMetadata": "Invalid metadata", - "offensiveContent": "Offensive content", - "other": "Other", - "takedownRequest": "Takedown request" - } - }, - "importStatus": { - "label": "Click to display more information about the import process for this upload", - "choices": { - "draft": { - "label": "Draft", - "help": "This track has been uploaded, but hasn't been scheduled for processing yet" - }, - "errored": { - "label": "Errored", - "help": "This track could not be processed, please make sure it is tagged correctly" - }, - "finished": { - "label": "Finished", - "help": "Imported" - }, - "pending": { - "label": "Pending", - "help": "This track has been uploaded, but hasn't been processed by the server yet" - }, - "skipped": { - "label": "Skipped", - "help": "This track is already present in one of your libraries" - } - } - }, - "contentCategory": { - "label": "Content category", - "choices": { - "music": "Music", - "other": "Other", - "podcast": "Podcast" - } + "header": "Do you want to delete the radio {radio}?" } - } + }, + "title": "Radio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Account" - }, - "album": { - "typeLabel": "Album", - "label": "Report this album…" - }, - "artist": { - "typeLabel": "Artist", - "label": "Report this artist…" - }, - "channel": { - "typeLabel": "Channel", - "label": "Report this channel…" - }, - "library": { - "typeLabel": "Library", - "label": "Report this library…" - }, - "playlist": { - "typeLabel": "Playlist", - "label": "Report this playlist…" - }, - "track": { - "label": "Report this track…", - "typeLabel": "Track" - } - }, - "useReportConfigs": { - "account": { - "label": "Account", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Release date", - "title": "Title" - }, - "artist": { - "label": "Artist" - }, - "channel": { - "label": "Channel" - }, - "track": { - "copyright": "Copyright", - "license": "License", - "position": "Position", - "title": "Title", - "label": "Track" - }, - "creationDate": { - "label": "Creation date" - }, - "library": { - "description": "Description", - "label": "Library" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Name" - }, - "playlist": { - "label": "Playlist" - }, - "tags": { - "label": "Tags" - }, - "visibility": { - "label": "Visibility" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "License", - "position": "Position", - "title": "Title" - }, - "cover": { - "label": "Cover" - }, - "description": { - "label": "Description" - }, - "artist": { - "name": "Name" - }, - "album": { - "releaseDate": "Release date", - "title": "Title" - }, - "tags": { - "label": "Tags" - } - } - }, - "useThemeList": { - "darkTheme": "Dark", - "lightTheme": "Light" } - }, - "init": { - "serviceWorker": { - "newAppVersion": "A new version of the app is available.", - "actions": { - "later": "Later", - "update": "Update" - } - }, - "axios": { - "rateLimitDelay": "You sent too many requests and have been rate limited, please try again in { delay }", - "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" - } - }, - "App": { - "loading": "Loading..." } } diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index 4165c63e3..fdfa2e6a0 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -1,377 +1,377 @@ { "App": { - "loading": "Loading..." + "loading": "Loading…" }, "components": { "About": { - "title": "About", - "header": { - "funkwhale": "A social platform to enjoy and share music", - "signup": "Sign up", - "publicContent": "Browse public content", - "findApp": "Find an app", - "aboutPod": "About this pod" - }, "description": { + "findApp": "Use Funkwhale on other devices with our apps.", "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralized, open network.", - "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!", "publicContent": "Listen to public albums and playlists shared on this pod.", - "findApp": "Use Funkwhale on other devices with our apps." + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" }, - "placeholder": { - "noDescription": "No description available" + "header": { + "aboutPod": "About this pod", + "findApp": "Find an app", + "funkwhale": "A social platform to enjoy and share music", + "publicContent": "Browse public content", + "signup": "Sign up" + }, + "help": { + "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "learnMore": "Learn more" }, "message": { "greeting": "Hello {username}", "loggedIn": "You're already signed in!" }, - "link": { - "learnMore": "Learn more", - "findOtherPod": "Find another pod" + "placeholder": { + "noDescription": "No description available" }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "help": { - "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." - } + "title": "About" }, "AboutPod": { - "title": "About", - "notApplicable": "N/A", + "feature": { + "allowList": "Allow-list", + "anonymousAccess": "Anonymous access", + "federation": "Federation", + "quota": "Upload quota", + "registrations": "Registrations", + "status": { + "closed": "Closed", + "disabled": "Disabled", + "enabled": "Enabled", + "open": "Open" + }, + "version": "Funkwhale version" + }, "header": { "about": "About this pod", - "rules": "Rules", - "terms": "Terms and privacy policy", - "features": "Features", "contact": "Contact", - "statistics": "Statistics" + "features": "Features", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" }, + "link": { + "about": "About this pod", + "features": "Features", + "introduction": "Introduction", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" + }, + "message": { + "contact": "Send us an email: { contactEmail }" + }, + "notApplicable": "N/A", "placeholder": { "noDescription": "No description available", "noRules": "No rules available", "noTerms": "No terms available" }, - "message": { - "contact": "Send us an email: { contactEmail }" - }, - "link": { - "about": "About this pod", - "rules": "Rules", - "terms": "Terms and privacy policy", - "features": "Features", - "statistics": "Statistics", - "introduction": "Introduction" - }, - "feature": { - "version": "Funkwhale version", - "federation": "Federation", - "allowList": "Allow-list", - "anonymousAccess": "Anonymous access", - "registrations": "Registrations", - "quota": "Upload quota", - "status": { - "enabled": "Enabled", - "disabled": "Disabled", - "open": "Open", - "closed": "Closed" - } - }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", - "artistsCount": "0 artists | {n} artist | {n} artists", "albumsCount": "0 albums | {n} album | {n} albums", - "tracksCount": "0 tracks | {n} track | {n} tracks", - "listeningsCount": "0 listenings | {n} listening | {n} listenings" - } + "artistsCount": "0 artists | {n} artist | {n} artists", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", + "listeningsCount": "0 listenings | {n} listening | {n} listenings", + "tracksCount": "0 tracks | {n} track | {n} tracks" + }, + "title": "About" }, "Home": { - "title": "Home", - "header": { - "welcome": "Welcome to {podName}!", - "about": "About this Funkwhale pod", - "statistics": "Statistics", - "contact": "Contact", - "aboutFunkwhale": "About Funkwhale", - "login": "Log in", - "signup": "Sign up", - "links": "Useful links", - "newAlbums": "Recently added albums", - "newChannels": "New channels" - }, "description": { - "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!", "funkwhale": { "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network.", "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers." - } + }, + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" + }, + "header": { + "about": "About this Funkwhale pod", + "aboutFunkwhale": "About Funkwhale", + "contact": "Contact", + "links": "Useful links", + "login": "Log in", + "newAlbums": "Recently added albums", + "newChannels": "New channels", + "signup": "Sign up", + "statistics": "Statistics", + "welcome": "Welcome to {podName}!" + }, + "help": { + "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "funkwhale": "Visit funkwhale.audio", + "learnMore": "Learn more", + "mobileApps": { + "description": "Use Funkwhale on other devices with our apps", + "label": "Mobile apps" + }, + "publicContent": { + "description": "Listen to public albums and playlists shared on this pod.", + "label": "Browse public content" + }, + "rules": "Server rules", + "userGuides": { + "description": "Discover everything you need to know about Funkwhale and its features", + "label": "User guides" + }, + "viewMore": "View more…" }, "placeholder": { "noDescription": "No description available" }, - "link": { - "learnMore": "Learn more", - "rules": "Server rules", - "funkwhale": "Visit funkwhale.audio", - "findOtherPod": "Find another pod", - "viewMore": "View more…", - "publicContent": { - "label": "Browse public content", - "description": "Listen to public albums and playlists shared on this pod." - }, - "mobileApps": { - "label": "Mobile apps", - "description": "Use Funkwhale on other devices with our apps" - }, - "userGuides": { - "label": "User guides", - "description": "Discover everything you need to know about Funkwhale and its features" - } - }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "help": { - "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." - } + "title": "Home" }, "PageNotFound": { - "title": "Page not found", "header": { "pageNotFound": "Page not found!" }, + "link": { + "home": "Go to home page" + }, "message": { "pageNotFound": "Sorry, the page you asked for does not exist:" }, - "link": { - "home": "Go to home page" - } + "title": "Page not found" }, "Queue": { - "label": { - "queue": "Queue", - "populatingRadio": "Fetching radio track...", - "duration": "Duration", - "addArtistContentFilter": "Hide content from this artist…", - "restart": "Restart track", - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play", - "remove": "Remove", - "selectTrack": "Select track", - "favorite": "Favorite track", - "enterFullscreen": "Enter fullscreen mode", - "exitFullscreen": "Exit fullscreen mode", - "showCoverArt": "Show Cover Art", - "showVisualizer": "Show MoonDrop visualizer" + "button": { + "clear": "Clear", + "close": "Close", + "stopRadio": "Stop radio" }, "header": { "failure": "The track cannot be loaded", - "radio": "You have a radio playing", - "noSources": "The track has no available sources." + "noSources": "The track has no available sources.", + "radio": "You have a radio playing" + }, + "label": { + "addArtistContentFilter": "Hide content from this artist…", + "duration": "Duration", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "favorite": "Favorite track", + "next": "Next track", + "pause": "Pause", + "play": "Play", + "populatingRadio": "Fetching radio track…", + "previous": "Previous track", + "queue": "Queue", + "remove": "Remove", + "restart": "Restart track", + "selectTrack": "Select track", + "showCoverArt": "Show Cover Art", + "showVisualizer": "Show MoonDrop visualizer" }, "message": { "automaticPlay": "The next track will play automatically in a few seconds…", "radio": "New tracks will be appended here automatically.", "webglUnsupported": "Your browser doesn't appear to support WebGL2." }, - "warning": { - "connectivity": "You may have a connectivity issue." - }, - "button": { - "close": "Close", - "clear": "Clear", - "stopRadio": "Stop radio" - }, "meta": { + "end": "End", "queuePosition": "Track {index} of {length}", "startTime": "00:00", - "unknownArtist": "Unknown Artist", "unknownAlbum": "Unknown Album", - "end": "End" + "unknownArtist": "Unknown Artist" + }, + "warning": { + "connectivity": "You may have a connectivity issue." } }, "RemoteSearchForm": { - "label": { - "rss": { - "title": "Subscribe to a podcast RSS feed", - "fieldLabel": "RSS feed location", - "fieldPlaceholder": "https://website.example.com/rss.xml" - }, - "fediverse": { - "title": "Fediverse object", - "fieldLabel": "Fediverse object", - "fieldPlaceholder": "{'@'}username{'@'}example.com" - } + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Search" + }, + "description": { + "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", + "rss": "Use this form to subscribe to an RSS feed from its URL." + }, + "error": { + "fetchFailed": "This object cannot be retrieved" }, "header": { "fetchFailed": "Error while fetching object" }, - "description": { - "rss": "Use this form to subscribe to an RSS feed from its URL.", - "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse." - }, - "button": { - "search": "Search", - "rss": "RSS", - "fediverse": "Fediverse" - }, - "error": { - "fetchFailed": "This object cannot be retrieved" + "label": { + "fediverse": { + "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}username{'@'}example.com", + "title": "Fediverse object" + }, + "rss": { + "fieldLabel": "RSS feed location", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Subscribe to a podcast RSS feed" + } }, "warning": { "unsupported": "This kind of object isn't supported yet" } }, "SetInstanceModal": { + "button": { + "cancel": "Cancel", + "submit": "Submit" + }, "header": { "chooseInstance": "Choose your instance", "failure": "It is not possible to connect to the given URL", "suggestions": "Suggested choices" }, - "message": { - "newUrl": "You are now using the Funkwhale instance at {url}", - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted." - }, "help": { - "serverDown": "The server might be down", "notFunkwhaleServer": "The given address is not a Funkwhale server", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." - }, - "button": { - "submit": "Submit", - "cancel": "Cancel" + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" }, "label": { "url": "Instance URL" + }, + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" } }, "ShortcutsModal": { - "header": { - "modal": "Keyboard shortcuts" - }, "button": { "close": "Close" }, + "header": { + "modal": "Keyboard shortcuts" + }, "shortcut": { + "audio": { + "clearQueue": "Clear queue", + "decreaseVolume": "Decrease volume", + "expandQueue": "Expand queue/player view", + "increaseVolume": "Increase volume", + "label": "Audio player shortcuts", + "playNext": "Play next track", + "playPause": "Pause/play the current track", + "playPrevious": "Play previous track", + "seekBack30": "Seek backwards 30s", + "seekBack5": "Seek backwards 5s", + "seekForward30": "Seek forwards 30s", + "seekForward5": "Seek forwards 5s", + "shuffleQueue": "Shuffle queue", + "toggleFavorite": "Toggle favorite", + "toggleLoop": "Toggle queue looping", + "toggleMute": "Toggle mute" + }, "general": { + "focus": "Focus searchbar", "label": "General shortcuts", "show": "Show available keyboard shortcuts", - "focus": "Focus searchbar", "unfocus": "Unfocus searchbar" - }, - "audio": { - "label": "Audio player shortcuts", - "playPause": "Pause/play the current track", - "seekBack5": "Seek backwards 5s", - "seekForward5": "Seek forwards 5s", - "seekBack30": "Seek backwards 30s", - "seekForward30": "Seek forwards 30s", - "playPrevious": "Play previous track", - "playNext": "Play next track", - "increaseVolume": "Increase volume", - "decreaseVolume": "Decrease volume", - "toggleMute": "Toggle mute", - "expandQueue": "Expand queue/player view", - "toggleLoop": "Toggle queue looping", - "shuffleQueue": "Shuffle queue", - "clearQueue": "Clear queue", - "toggleFavorite": "Toggle favorite" } } }, "Sidebar": { + "header": { + "administration": "Administration", + "explore": "Explore", + "library": "My library", + "main": "Main navigation", + "more": "More" + }, "label": { + "add": "Add content", + "administration": "Administration", + "edits": "Pending review edits", + "follows": "Pending follow requests", + "language": "Language", "main": "Main menu", "play": "Play this track", - "follows": "Pending follow requests", - "edits": "Pending review edits", "reports": "Pending review reports", - "language": "Language", - "theme": "Theme", - "add": "Add content", - "administration": "Administration" - }, - "header": { - "main": "Main navigation", - "explore": "Explore", - "more": "More", - "library": "My library", - "administration": "Administration" + "theme": "Theme" }, "link": { - "home": "Home", - "search": "Search", - "browse": "Browse", - "podcasts": "Podcasts", + "about": "About this pod", "albums": "Albums", "artists": "Artists", - "playlists": "Playlists", - "radios": "Radios", - "favorites": "Favorites", + "browse": "Browse", "channels": "Channels", - "about": "About this pod", - "switchInstance": "Switch instance", - "moderation": "Moderation", - "users": "Users", + "createAccount": "Create account", + "favorites": "Favorites", + "home": "Home", "library": "Library", - "settings": "Settings", "login": "Login", - "createAccount": "Create account" + "moderation": "Moderation", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "search": "Search", + "settings": "Settings", + "switchInstance": "Switch instance", + "users": "Users" } }, "admin": { "SettingsGroup": { + "button": { + "save": "Save" + }, "header": { "error": "Error while saving settings.", "image": "Current image" }, "message": { "success": "Settings updated successfully." - }, - "button": { - "save": "Save" } }, "SignupFormBuilder": { - "label": { - "delete": "Delete", - "moveUp": "Move up", - "moveDown": "Move down", - "additionalField": "Additional field", - "helpText": "Help text", - "additionalFields": "Additional fields" - }, "button": { + "add": "Add a new field", "edit": "Edit form", - "preview": "Preview Form", - "add": "Add a new field" + "preview": "Preview Form" }, "help": { - "helpText": "An optional text to be displayed at the start of the sign-up form.", - "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled." + "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", + "helpText": "An optional text to be displayed at the start of the sign-up form." + }, + "label": { + "additionalField": "Additional field", + "additionalFields": "Additional fields", + "delete": "Delete", + "helpText": "Help text", + "moveDown": "Move down", + "moveUp": "Move up" }, "table": { "additionalFields": { "header": { + "actions": "Actions", "label": "Field label", - "type": "Field type", "required": "Required", - "actions": "Actions" - }, - "type": { - "short": "Short text", - "long": "Long text" + "type": "Field type" }, "required": { - "true": "True", - "false": "False" + "false": "False", + "true": "True" + }, + "type": { + "long": "Long text", + "short": "Short text" } } } @@ -379,11 +379,11 @@ }, "audio": { "ChannelCard": { - "title": "Updated on {date}", "meta": { "episodes": "No episodes | {n} episode | {n} episodes", "tracks": "No tracks | {n} track | {n} tracks" - } + }, + "title": "Updated on {date}" }, "ChannelEntries": { "help": { @@ -391,38 +391,38 @@ } }, "ChannelForm": { - "label": { - "podcast": "Podcasts", - "discography": "Artist Discography", - "name": "Name", - "username": "Fediverse handle", - "image": "Channel Picture", - "tags": "Tags", - "language": "Language", - "description": "Description", - "category": "Category", - "subcategory": "Subcategory", - "email": "Owner e-mail address", - "owner": "Owner name" - }, - "help": { - "podcast": "Host your episodes and keep your community updated.", - "discography": "Publish music you make as a nice discography of albums and singles.", - "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later.", - "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes." - }, - "placeholder": { - "name": "Awesome channel name", - "username": "awesomechannelname" - }, "header": { "error": "Error while saving channel." }, + "help": { + "discography": "Publish music you make as a nice discography of albums and singles.", + "podcast": "Host your episodes and keep your community updated.", + "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", + "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." + }, + "label": { + "category": "Category", + "description": "Description", + "discography": "Artist Discography", + "email": "Owner e-mail address", + "image": "Channel Picture", + "language": "Language", + "name": "Name", + "owner": "Owner name", + "podcast": "Podcasts", + "subcategory": "Subcategory", + "tags": "Tags", + "username": "Fediverse handle" + }, "legend": { "purpose": "What will this channel be used for?" }, "loader": { "loading": "Loading" + }, + "placeholder": { + "name": "Awesome channel name", + "username": "awesomechannelname" } }, "ChannelSerieCard": { @@ -444,8 +444,11 @@ } }, "EmbedWizard": { - "warning": { - "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." + "button": { + "copy": "Copy" + }, + "header": { + "preview": "Preview" }, "help": { "anonymous": "Please contact your admins and ask them to update the corresponding setting.", @@ -453,44 +456,41 @@ "width": "Leave empty for a responsive widget" }, "label": { - "width": "Widget width", + "embed": "Embed code", "height": "Widget height", - "embed": "Embed code" - }, - "button": { - "copy": "Copy" - }, - "header": { - "preview": "Preview" + "width": "Widget width" }, "message": { "copy": "Text copied to clipboard!" + }, + "warning": { + "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." } }, "LibraryFollowButton": { "button": { - "unfollow": "Unfollow", "cancel": "Cancel follow request", - "follow": "Follow" + "follow": "Follow", + "unfollow": "Unfollow" } }, "PlayButton": { "button": { - "playNow": "Play now", - "addToQueue": "Add to current queue", - "playNext": "Play next", - "startRadio": "Play similar songs", - "report": "Report…", "addToPlaylist": "Add to playlist", + "addToQueue": "Add to current queue", + "discretePlay": "Play", + "episodeDetails": "Episode details", "hideArtist": "Hide content from this artist", - "playTrack": "Play track", "playAlbum": "Play album", "playArtist": "Play artist", + "playNext": "Play next", + "playNow": "Play now", "playPlaylist": "Play playlist", + "playTrack": "Play track", "playTracks": "Play tracks", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "discretePlay": "Play" + "report": "Report…", + "startRadio": "Play similar songs", + "trackDetails": "Track details" }, "title": { "more": "More…", @@ -498,70 +498,78 @@ } }, "Player": { + "header": { + "player": "Audio player and controls" + }, "label": { + "addArtistContentFilter": "Hide content from this artist…", "audioPlayer": "Media player", - "previousTrack": "Previous track", - "play": "Play", - "pause": "Pause", - "nextTrack": "Next track", - "unmute": "Unmute", - "mute": "Mute", + "clearQueue": "Clear your queue", "expandQueue": "Expand queue", "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", + "mute": "Mute", + "nextTrack": "Next track", + "pause": "Pause", + "play": "Play", + "previousTrack": "Previous track", "shuffleQueue": "Shuffle your queue", - "clearQueue": "Clear your queue", - "addArtistContentFilter": "Hide content from this artist…" - }, - "header": { - "player": "Audio player and controls" + "unmute": "Unmute" }, "meta": { "position": "{index} of {length}", - "unknownArtist": "Unknown Artist", - "unknownAlbum": "Unknown Album" + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + } + }, + "PlayerControls": { + "labels": { + "next": "Next track", + "pause": "Pause", + "play": "Play", + "previous": "Previous track" } }, "Search": { - "header": { - "search": "Search for some music", - "artists": "Artists", - "albums": "Albums" - }, "empty": { - "noArtists": "No artist matched your query", - "noAlbums": "No album matched your query" + "noAlbums": "No album matched your query", + "noArtists": "No artist matched your query" + }, + "header": { + "albums": "Albums", + "artists": "Artists", + "search": "Search for some music" }, "placeholder": { "search": "Artist, album, track…" } }, "SearchBar": { - "placeholder": { - "search": "Search for artists, albums, tracks…" - }, - "label": { - "search": "Search for content", - "artist": "Artist", - "album": "Album", - "track": "Track", - "tag": "Tag", - "category": { - "federation": "Federation", - "podcasts": "Podcasts" - } - }, - "link": { - "rss": "Subscribe to podcast via RSS", - "fediverse": "Search on the fediverse", - "more": "More results 🡒" + "empty": { + "noResults": "Sorry, there are no results for this search" }, "header": { "noResults": "No matches found" }, - "empty": { - "noResults": "Sorry, there are no results for this search" + "label": { + "album": "Album", + "artist": "Artist", + "category": { + "federation": "Federation", + "podcasts": "Podcasts" + }, + "search": "Search for content", + "tag": "Tag", + "track": "Track" + }, + "link": { + "fediverse": "Search on the fediverse", + "more": "More results 🡒", + "rss": "Subscribe to podcast via RSS" + }, + "placeholder": { + "search": "Search for artists, albums, tracks…" } }, "VolumeControl": { @@ -588,8 +596,8 @@ "artist": { "Card": { "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "episodes": "No episodes | {n} episode | {n} episodes" + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" } }, "Widget": { @@ -607,18 +615,18 @@ "Modal": { "button": { "addToFavorites": "Add to favorites", - "removeFromFavorites": "Remove from favorites", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "seriesDetails": "View series", - "albumDetails": "View album", - "channelDetails": "View channel", - "artistDetails": "View artist", - "startRadio": "Play radio", - "playNow": "Play now", + "addToPlaylist": "Add to playlist", "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", "playNext": "Play next", - "addToPlaylist": "Add to playlist" + "playNow": "Play now", + "removeFromFavorites": "Remove from favorites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" } } }, @@ -631,26 +639,26 @@ "Modal": { "button": { "addToFavorites": "Add to favorites", - "removeFromFavorites": "Remove from favorites", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "seriesDetails": "View series", - "albumDetails": "View album", - "channelDetails": "View channel", - "artistDetails": "View artist", - "startRadio": "Play radio", - "playNow": "Play now", + "addToPlaylist": "Add to playlist", "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", "playNext": "Play next", - "addToPlaylist": "Add to playlist" + "playNow": "Play now", + "removeFromFavorites": "Remove from favorites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" } }, "Table": { "table": { "header": { - "title": "Title", "album": "Album", - "artist": "Artist" + "artist": "Artist", + "title": "Title" } } }, @@ -662,102 +670,94 @@ "noResults": "Nothing found" } } - }, - "PlayerControls": { - "labels": { - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play" - } } }, "auth": { "ApplicationEdit": { - "title": "Edit application", - "link": { - "settings": "Back to settings" + "button": { + "regenerateToken": "Regenerate token" }, "header": { "appDetails": "Application Details", - "editApp": "Edit application", - "appSecretWarning": "Keep a copy of this token in a safe place." - }, - "message": { - "appSecretWarning": "You won't be able to see it again once you leave this screen." + "appSecretWarning": "Keep a copy of this token in a safe place.", + "editApp": "Edit application" }, "help": { "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." }, "label": { + "accessToken": "Access token", "appId": "Application ID", - "appSecret": "Application secret", - "accessToken": "Access token" + "appSecret": "Application secret" }, - "button": { - "regenerateToken": "Regenerate token" - } + "link": { + "settings": "Back to settings" + }, + "message": { + "appSecretWarning": "You won't be able to see it again once you leave this screen." + }, + "title": "Edit application" }, "ApplicationForm": { + "button": { + "create": "Create application", + "update": "Update application" + }, "header": { "failure": "We cannot save your changes" }, + "help": { + "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." + }, "label": { "name": "Name", "redirectUri": "Redirect URI", "scopes": { - "label": "Scopes", "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", + "label": "Scopes", "read": { - "label": "Read", - "description": "Read-only access to user data" + "description": "Read-only access to user data", + "label": "Read" }, "write": { - "label": "Write", - "description": "Write-only access to user data" + "description": "Write-only access to user data", + "label": "Write" } } - }, - "button": { - "update": "Update application", - "create": "Create application" - }, - "help": { - "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." } }, "ApplicationNew": { - "title": "Create a new application", "link": { "settings": "Back to settings" - } + }, + "title": "Create a new application" }, "Authorize": { - "title": "Allow application", + "button": { + "authorize": "Authorize {app}" + }, "header": { + "access": "{app_name} wants to access your Funkwhale account", + "allScopes": "Full access", "authorize": "Authorize third-party app", "authorizeFailure": "Error while fetching application data", "fetchFailure": "Error while fetching application data", - "access": "{app_name} wants to access your Funkwhale account", - "writeOnly": "Write-only", "readOnly": "Read-only", - "allScopes": "Full access" + "writeOnly": "Write-only" + }, + "help": { + "copyCode": "You will be shown a code to copy-past in the application", + "pasteCode": "Copy-paste the following code in the application:", + "redirect": "You will be redirected to { 0 }" }, "message": { "unknownPermissions": "The application is also requesting the following unknown permissions:" }, - "button": { - "authorize": "Authorize {app}" - }, - "help": { - "copyCode": "You will be shown a code to copy-past in the application", - "redirect": "You will be redirected to { 0 }", - "pasteCode": "Copy-paste the following code in the application:" - } + "title": "Allow application" }, "LoginForm": { - "placeholder": { - "username": "Enter your username or e-mail address" + "button": { + "login": "Login" }, "header": { "loginFailure": "We cannot log you in" @@ -767,160 +767,156 @@ "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." }, "label": { - "username": "Username or e-mail address", - "password": "Password" - }, - "button": { - "login": "Login" + "password": "Password", + "username": "Username or e-mail address" }, "link": { - "resetPassword": "Reset your password", - "createAccount": "Create an account" + "createAccount": "Create an account", + "resetPassword": "Reset your password" }, "message": { "redirect": "You will be redirected to {domain} to authenticate" + }, + "placeholder": { + "username": "Enter your username or e-mail address" } }, "Logout": { - "title": "Log out", + "button": { + "logout": "Yes, log me out!" + }, "header": { "confirm": "Are you sure you want to log out?", "unauthenticated": "You aren't currently logged in" }, - "button": { - "logout": "Yes, log me out!" - }, "link": { "login": "Log in!" }, "message": { "loggedIn": "You are currently logged in as {username}" - } + }, + "title": "Log out" }, "Plugin": { - "header": { - "failure": "Error while saving plugin" - }, - "link": { - "documentation": "Documentation" - }, "button": { "save": "Save", "scan": "Scan" }, + "description": { + "library": "Library where files should be imported." + }, + "header": { + "failure": "Error while saving plugin" + }, "label": { "library": "Library", "pluginEnabled": "Enabled" }, - "description": { - "library": "Library where files should be imported." + "link": { + "documentation": "Documentation" } }, "Settings": { - "title": "Account Settings", - "message": { - "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", - "currentEmail": "Your current e-mail address is {email}" - }, - "header": { - "accountSettings": "Account settings", - "settingsUpdated": "Settings updated", - "updateFailure": "Your settings can't be updated", - "avatar": "Avatar", - "avatarFailure": "Your avatar cannot be saved", - "changePassword": "Change my password", - "passwordFailure": "Your password cannot be changed", - "contentFilters": "Content filters", - "hiddenArtists": "Hidden artists", - "authorizedApps": "Authorized apps", - "noApps": "You don't have any application connected with your account.", - "yourApps": "Your applications", - "noPersonalApps": "You don't have registered any application yet.", - "plugins": "Plugins", - "changeEmail": "Change my e-mail address", - "emailFailure": "We cannot change your e-mail address", - "deleteAccount": "Delete my account", - "accountFailure": "We cannot delete your account" + "button": { + "delete": "Delete", + "deleteAccount": "Delete my account…", + "deleteAccountConfirm": "Delete my account", + "disableSubsonic": "Disable access", + "edit": "Edit", + "password": "Change password", + "refresh": "Refresh", + "remove": "Remove", + "removeApp": "Remove application", + "revoke": "Revoke", + "revokeAccess": "Revoke access", + "update": "Update", + "updateSettings": "Update settings" }, "description": { + "authorizedApps": "This is the list of applications that have access to your account data.", + "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", "changePassword": { "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", "paragraph2": "You will have to update your password on your clients that use this password." }, "contentFilters": "Content filters help you hide content you don't want to see on the service.", - "authorizedApps": "This is the list of applications that have access to your account data.", - "yourApps": "This is the list of applications that you have registered.", + "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation.", "plugins": "Use plugins to extend Funkwhale and get additional features.", - "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", - "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." + "yourApps": "This is the list of applications that you have registered." }, - "button": { - "update": "Update", - "updateSettings": "Update settings", - "password": "Change password", - "disableSubsonic": "Disable access", - "refresh": "Refresh", - "delete": "Delete", - "revoke": "Revoke", - "revokeAccess": "Revoke access", - "edit": "Edit", - "remove": "Remove", - "removeApp": "Remove application", - "deleteAccount": "Delete my account…", - "deleteAccountConfirm": "Delete my account" + "header": { + "accountFailure": "We cannot delete your account", + "accountSettings": "Account settings", + "authorizedApps": "Authorized apps", + "avatar": "Avatar", + "avatarFailure": "Your avatar cannot be saved", + "changeEmail": "Change my e-mail address", + "changePassword": "Change my password", + "contentFilters": "Content filters", + "deleteAccount": "Delete my account", + "emailFailure": "We cannot change your e-mail address", + "hiddenArtists": "Hidden artists", + "noApps": "You don't have any application connected with your account.", + "noPersonalApps": "You don't have registered any application yet.", + "passwordFailure": "Your password cannot be changed", + "plugins": "Plugins", + "settingsUpdated": "Settings updated", + "updateFailure": "Your settings can't be updated", + "yourApps": "Your applications" }, "help": { "changePassword": "Please double-check your password is correct", "noApps": "If you authorize third-party applications to access your data, those applications will be listed here.", "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." }, - "warning": { - "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." - }, - "link": { - "newApp": "Register a new application", - "managePlugins": "Manage plugins" - }, "label": { "avatar": "Avatar", - "password": "Password", "currentPassword": "Current password", + "newEmail": "New e-mail address", "newPassword": "New password", - "newEmail": "New e-mail address" + "password": "Password" + }, + "link": { + "managePlugins": "Manage plugins", + "newApp": "Register a new application" + }, + "message": { + "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", + "currentEmail": "Your current e-mail address is {email}" }, "modal": { "changePassword": { - "header": "Change your password?", "content": { - "warning": "Changing your password will have the following consequences", "logout": "You will be logged out from this session and have to log in with the new one", - "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" - } - }, - "revokeApp": { - "header": "Revoke access for application {app}?", - "content": { - "warning": "This will prevent this application from accessing the service on your behalf." - } - }, - "deleteApp": { - "header": "Remove application {app}?", - "content": { - "warning": "This will permanently remove the application and all the associated tokens." - } + "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password", + "warning": "Changing your password will have the following consequences" + }, + "header": "Change your password?" }, "deleteAccount": { - "header": "Do you want to delete your account?", "content": { "warning": "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." - } + }, + "header": "Do you want to delete your account?" + }, + "deleteApp": { + "content": { + "warning": "This will permanently remove the application and all the associated tokens." + }, + "header": "Remove application {app}?" + }, + "revokeApp": { + "content": { + "warning": "This will prevent this application from accessing the service on your behalf." + }, + "header": "Revoke access for application {app}?" } }, "table": { "artists": { "header": { - "name": "Name", - "creationDate": "Creation date" + "creationDate": "Creation date", + "name": "Name" } }, "authorizedApps": { @@ -932,50 +928,48 @@ "yourApps": { "header": { "application": "Application", - "scopes": "Scopes", - "creationDate": "Creation date" + "creationDate": "Creation date", + "scopes": "Scopes" } } + }, + "title": "Account Settings", + "warning": { + "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." } }, "SignupForm": { - "placeholder": { - "invitation": "Enter your invitation code (case insensitive)", - "username": "Enter your username", - "email": "Enter your e-mail address" - }, - "message": { - "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", - "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", - "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", - "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + "button": { + "create": "Create my account" }, "header": { "login": "Log in to your Funkwhale account", "signupFailure": "Your account cannot be created." }, "label": { - "username": "Username", "email": "E-mail address", + "invitation": "Invitation code", "password": "Password", - "invitation": "Invitation code" + "username": "Username" }, - "button": { - "create": "Create my account" + "message": { + "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", + "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", + "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", + "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + }, + "placeholder": { + "email": "Enter your e-mail address", + "invitation": "Enter your invitation code (case insensitive)", + "username": "Enter your username" } }, "SubsonicTokenForm": { - "label": { - "subsonicField": "Your subsonic API password" - }, - "message": { - "passwordUpdated": "Password updated", - "accessDisabled": "Access disabled", - "unavailable": "The Subsonic API is not available on this Funkwhale instance." - }, - "header": { - "subsonic": "Subsonic API password", - "error": "Error" + "button": { + "confirmDisable": "Disable access", + "confirmNewPassword": "Request a password", + "disable": "Disable Subsonic access", + "newPassword": "Request a new password" }, "description": { "subsonic": { @@ -984,27 +978,33 @@ "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below." } }, + "header": { + "error": "Error", + "subsonic": "Subsonic API password" + }, + "label": { + "subsonicField": "Your subsonic API password" + }, "link": { "apps": "Discover how to use Funkwhale from other apps" }, - "button": { - "newPassword": "Request a new password", - "confirmNewPassword": "Request a password", - "disable": "Disable Subsonic access", - "confirmDisable": "Disable access" + "message": { + "accessDisabled": "Access disabled", + "passwordUpdated": "Password updated", + "unavailable": "The Subsonic API is not available on this Funkwhale instance." }, "modal": { - "newPassword": { - "header": "Request a new Subsonic API password?", - "content": { - "warning": "This will log you out from existing devices that use the current password." - } - }, "disableSubsonic": { - "header": "Disable Subsonic API access?", "content": { "warning": "This will completely disable access to the Subsonic API using from account." - } + }, + "header": "Disable Subsonic API access?" + }, + "newPassword": { + "content": { + "warning": "This will log you out from existing devices that use the current password." + }, + "header": "Request a new Subsonic API password?" } } } @@ -1019,157 +1019,157 @@ } }, "AlbumModal": { - "header": { - "newSeries": "New series", - "newAlbum": "New album" - }, "button": { "cancel": "Cancel", "create": "Create" + }, + "header": { + "newAlbum": "New album", + "newSeries": "New series" } }, "AlbumSelect": { "label": { - "series": "Series", - "album": "Album" - }, - "option": { - "none": "None" + "album": "Album", + "series": "Series" }, "meta": { "tracks": "No tracks | {n} track | {n} tracks" + }, + "option": { + "none": "None" } }, "LicenseSelect": { "label": { "license": "Licence" }, - "option": { - "none": "None" - }, "link": { "license": "About this license" + }, + "option": { + "none": "None" } }, "SubscribeButton": { - "title": { - "unsubscribe": "Unsubscribe", - "subscribe": "Subscribe" - }, "help": { "auth": "You need to be logged in to subscribe to this channel" + }, + "title": { + "subscribe": "Subscribe", + "unsubscribe": "Unsubscribe" } }, "UploadForm": { + "button": { + "edit": "Edit", + "ignore": "Ignore", + "remove": "Remove", + "resume": "Resume", + "retry": "Retry" + }, + "description": { + "extensions": "Supported extensions {extensions}" + }, "header": { "error": "Error while publishing" }, + "help": { + "license": "Add a license to your upload to ensure some freedoms to your public." + }, "label": { "channel": "Channel", "openBrowser": "Browse…" }, "message": { - "pending": "You have some draft uploads pending publication.", - "dragAndDrop": "Drag and drop your files here or open the browser to upload your files" + "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", + "pending": "You have some draft uploads pending publication." }, - "button": { - "edit": "Edit", - "ignore": "Ignore", - "resume": "Resume", - "remove": "Remove", - "retry": "Retry" - }, - "help": { - "license": "Add a license to your upload to ensure some freedoms to your public." + "status": { + "errored": "Errored", + "pending": "Pending", + "uploading": "Uploading" }, "warning": { "quota": "You don't have any space left to upload your files. Please contact the moderators." - }, - "status": { - "uploading": "Uploading", - "errored": "Errored", - "pending": "Pending" - }, - "description": { - "extensions": "Supported extensions {extensions}" } }, "UploadMetadataForm": { "label": { - "title": "Title", - "tags": "Tags", - "image": "Track Picture", "description": "Description", - "position": "Position" + "image": "Track Picture", + "position": "Position", + "tags": "Tags", + "title": "Title" } }, "UploadModal": { + "button": { + "cancel": "Cancel", + "close": "Close", + "finishLater": "Finish later", + "next": "Next", + "previous": "Previous step", + "publish": "Publish", + "update": "Update" + }, + "header": { + "processing": "Processing uploads", + "publish": "Publish audio", + "uploadDetails": "Upload details", + "uploadFiles": "Files to upload" + }, "meta": { "files": "no files | {n} file | {n} files", "quota": "Remaining storage space: {space}" - }, - "header": { - "publish": "Publish audio", - "uploadFiles": "Files to upload", - "uploadDetails": "Upload details", - "processing": "Processing uploads" - }, - "button": { - "cancel": "Cancel", - "previous": "Previous step", - "update": "Update", - "next": "Next", - "publish": "Publish", - "finishLater": "Finish later", - "close": "Close" } } }, "common": { "ActionTable": { - "header": { - "error": "Error while applying action" - }, - "message": { - "needsRefresh": "Content has been updated, click refresh to see up-to-date content", - "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" - }, "button": { - "refresh": "Refresh table content", + "allSelected": "No elements selected | {n} element selected | All {n} elements selected", "go": "Go", "launch": "Launch", + "refresh": "Refresh table content", "select": "Select", - "selected": "{ n } on {total} selected", "selectAll": "Select all items", - "allSelected": "No elements selected | {n} element selected | All {n} elements selected", + "selectCurrentPage": "Select only current page", "selectElement": "Select one element | Select all {n} elements", - "selectCurrentPage": "Select only current page" + "selected": "{ n } on {total} selected" + }, + "header": { + "error": "Error while applying action" }, "label": { "actions": "Actions", "performAction": "Perform actions" }, + "message": { + "needsRefresh": "Content has been updated, click refresh to see up-to-date content", + "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" + }, "modal": { "performAction": { - "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?", "content": { "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." - } + }, + "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?" } } }, "AttachmentInput": { + "button": { + "remove": "Remove" + }, "header": { "failure": "Your attachment cannot be saved" }, - "label": { - "upload": "Upload New Picture…" - }, "help": { "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." }, - "button": { - "remove": "Remove" + "label": { + "upload": "Upload New Picture…" }, "loader": { "uploading": "Uploading file…" @@ -1177,23 +1177,23 @@ }, "CollapseLink": { "button": { - "expand": "Expand", - "collapse": "Collapse" + "collapse": "Collapse", + "expand": "Expand" } }, "ContentForm": { - "placeholder": { - "input": "Write a few words here…" - }, "button": { - "write": "Write", - "preview": "Preview" + "preview": "Preview", + "write": "Write" }, "empty": { "noContent": "Nothing to preview" }, "help": { "markdown": "Markdown syntax is supported" + }, + "placeholder": { + "input": "Write a few words here…" } }, "CopyInput": { @@ -1205,12 +1205,12 @@ } }, "DangerousButton": { - "header": { - "confirm": "Do you want to confirm this action?" - }, "button": { "cancel": "Cancel", "confirm": "Confirm" + }, + "header": { + "confirm": "Do you want to confirm this action?" } }, "Duration": { @@ -1234,41 +1234,41 @@ } }, "InlineSearchBar": { - "placeholder": { - "search": "Search…" + "button": { + "clear": "Clear" }, "label": { "search": "Search" }, - "button": { - "clear": "Clear" + "placeholder": { + "search": "Search…" } }, "LoginModal": { + "description": { + "noAccess": "You don't have access" + }, "header": { "unauthenticated": "Unauthenticated" }, "link": { "login": "Log in", "signup": "Sign up" - }, - "description": { - "noAccess": "You don't have access" } }, "RenderedDescription": { "button": { - "more": "Show more", - "less": "Show less", - "edit": "Edit", "cancel": "Cancel", + "edit": "Edit", + "less": "Show less", + "more": "Show more", "update": "Update description" }, - "header": { - "failure": "Error while updating description" - }, "empty": { "noDescription": "No description available" + }, + "header": { + "failure": "Error while updating description" } }, "UserLink": { @@ -1279,83 +1279,83 @@ "UserMenu": { "label": { "language": "Change language", - "theme": "Change theme", - "shortcuts": "Keyboard shortcuts" + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" }, "link": { - "profile": "Profile", - "settings": "Settings", - "logout": "Log out", "about": "About", - "support": "Help", - "forum": "Forum", - "docs": "Documentation", "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", "git": "Issue tracker", "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", "signup": "Sign up", - "notifications": "Notifications" + "support": "Help" } }, "UserModal": { - "header": { - "options": "Options" - }, "button": { "switchInstance": "Use another instance" }, + "header": { + "options": "Options" + }, "label": { "language": "Change language", - "theme": "Change theme", - "shortcuts": "Keyboard shortcuts" + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" }, "link": { - "profile": "Profile", - "settings": "Settings", - "logout": "Log out", "about": "About", - "support": "Help", - "forum": "Forum", - "docs": "Documentation", "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", "git": "Issue tracker", "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", "signup": "Sign up", - "notifications": "Notifications" + "support": "Help" } } }, "favorites": { "List": { - "title": "Your favorites", - "header": { - "favorites": "No favorites | {n} favorite | {n} favorites" - }, "empty": { "noFavorites": "No tracks have been added to your favorites yet" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Order", - "ascending": "Ascending", - "descending": "Descending" - } - }, - "pagination": { - "results": "Results per page" + "header": { + "favorites": "No favorites | {n} favorite | {n} favorites" }, "link": { "library": "Browse the library" }, "loader": { "loading": "Loading your favorites…" - } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "title": "Your favorites" }, "TrackFavoriteIcon": { "button": { - "remove": "Remove from favorites", - "add": "Add to favorites" + "add": "Add to favorites", + "remove": "Remove from favorites" }, "label": { "inFavorites": "In favorites" @@ -1364,41 +1364,41 @@ }, "federation": { "FetchButton": { - "header": { - "refresh": "Refreshing object from remote server…", - "skipped": "Refresh was skipped", - "success": "Refresh successful", - "failure": "Refresh error", - "pending": "Refresh pending", - "saveFailure": "Error while saving settings" - }, - "description": { - "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", - "success": "Data was refreshed successfully from remote server.", - "failure": "An error occurred while trying to refresh data:", - "pending": "The refresh request hasn't been processed in time by our server. It will be processed later." - }, "button": { "close": "Close", "reload": "Close and reload page" }, + "description": { + "failure": "An error occurred while trying to refresh data:", + "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", + "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", + "success": "Data was refreshed successfully from remote server." + }, + "header": { + "failure": "Refresh error", + "pending": "Refresh pending", + "refresh": "Refreshing object from remote server…", + "saveFailure": "Error while saving settings", + "skipped": "Refresh was skipped", + "success": "Refresh successful" + }, "loader": { - "fetchRequest": "Requesting a fetch…", - "awaitingResult": "Waiting for result…" + "awaitingResult": "Waiting for result…", + "fetchRequest": "Requesting a fetch…" }, "table": { "error": { "label": { - "type": "Error type", - "detail": "Error detail" + "detail": "Error detail", + "type": "Error type" }, "value": { - "httpStatus": "The remote server answered with HTTP {status}", - "httpError": "An HTTP error occurred while contacting the remote server", - "timeoutError": "The remote server didn't respond quickly enough", "connectionError": "Impossible to connect to the remote server", - "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "httpError": "An HTTP error occurred while contacting the remote server", + "httpStatus": "The remote server answered with HTTP {status}", "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", + "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "timeoutError": "The remote server didn't respond quickly enough", "unknownError": "Unknown error" } } @@ -1415,64 +1415,64 @@ }, "forms": { "PasswordInput": { - "title": "Show/hide password", "button": { "copy": "Copy" }, "message": { "copy": "Text copied to clipboard!" - } + }, + "title": "Show/hide password" } }, "library": { "AlbumBase": { - "title": "Album", - "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "episodes": "No episodes | {n} episode | {n} episodes" - }, "link": { "addDescription": "Add a description…" - } + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Album" }, "AlbumDetail": { - "header": { - "episodes": "Episodes", - "tracks": "Tracks", - "libraries": "User libraries" - }, "description": { "libraries": "This album is present in the following libraries:" }, + "header": { + "episodes": "Episodes", + "libraries": "User libraries", + "tracks": "Tracks" + }, "meta": { "volume": "Volume {number}" } }, "AlbumDropdown": { "button": { - "more": "More…", "cancel": "Cancel", - "embed": "Embed", + "delete": "Delete", "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "embed": { - "header": "Embed this album on your website" - }, - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." - } - } + "embed": "Embed", + "more": "More…" }, "link": { - "domain": "View on {domain}", - "musicbrainz": "View on MusicBrainz", "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", "moderation": "Open in moderation interface", - "django": "View in Django's admin" + "musicbrainz": "View on MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this album?" + }, + "embed": { + "header": "Embed this album on your website" + } } }, "AlbumEdit": { @@ -1485,83 +1485,83 @@ } }, "Albums": { - "title": "Albums", - "placeholder": { - "search": "Enter album title…" + "button": { + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing albums" }, - "button": { - "search": "Search" - }, "label": { "search": "Search", "tags": "Tags" }, + "link": { + "addMusic": "Add some music" + }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" + "placeholder": { + "search": "Enter album title…" }, - "link": { - "addMusic": "Add some music" - } + "title": "Albums" }, "ArtistBase": { - "title": "Artist", - "meta": { - "tracks": "0 tracks in | {count} track in | {count} tracks in", - "albums": "0 albums | {n} album | {n} albums" - }, "button": { - "play": "Play all albums", - "edit": "Edit", "cancel": "Cancel", + "edit": "Edit", "embed": "Embed", - "more": "More…" + "more": "More…", + "play": "Play all albums" }, "link": { - "django": "View in Django's admin", - "musicbrainz": "View on MusicBrainz", - "wikipedia": "Search on Wikipedia", - "domain": "View on {domain}", "discogs": "Search on Discogs", - "moderation": "Open in moderation interface" + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz", + "wikipedia": "Search on Wikipedia" + }, + "meta": { + "albums": "0 albums | {n} album | {n} albums", + "tracks": "0 tracks in | {count} track in | {count} tracks in" }, "modal": { "embed": { "header": "Embed this artist work on your website" } - } + }, + "title": "Artist" }, "ArtistDetail": { - "header": { - "album": "Albums by this artist", - "track": "New tracks by this artist", - "library": "User libraries" + "button": { + "filter": "Remove filter", + "more": "Load more…" }, "description": { "library": "This artist is present in the following libraries:" }, - "button": { - "more": "Load more…", - "filter": "Remove filter" - }, - "message": { - "filter": "You are currently hiding content related to this artist." + "header": { + "album": "Albums by this artist", + "library": "User libraries", + "track": "New tracks by this artist" }, "link": { "filter": "Review my filters" + }, + "message": { + "filter": "You are currently hiding content related to this artist." } }, "ArtistEdit": { @@ -1574,44 +1574,57 @@ } }, "Artists": { - "title": "Artists", - "placeholder": { - "search": "Search…" + "button": { + "search": "Search", + "upload": "Add some music" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing artists" }, "label": { + "excludeCompilation": "Exclude Compilation Artists", "search": "Artist name", - "tags": "Tags", - "excludeCompilation": "Exclude Compilation Artists" - }, - "button": { - "search": "Search", - "upload": "Add some music" + "tags": "Tags" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" - } + "placeholder": { + "search": "Search…" + }, + "title": "Artists" }, "EditCard": { + "button": { + "approve": "Approve", + "delete": "Delete", + "reject": "Reject" + }, "header": { "modification": "Modification {id}" }, "link": { "track": "Track #{id} - {name}" }, + "modal": { + "content": { + "warning": "The suggestion will be completely removed, this action is irreversible." + }, + "delete": { + "header": "Delete this suggestion?" + } + }, "status": { "applied": "Approved and applied", "approved": "Approved", @@ -1622,117 +1635,104 @@ "update": { "header": { "field": "Field", - "oldValue": "Old value", - "newValue": "New value" + "newValue": "New value", + "oldValue": "Old value" }, "notApplicable": "N/A" } - }, - "button": { - "approve": "Approve", - "reject": "Reject", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this suggestion?" - }, - "content": { - "warning": "The suggestion will be completely removed, this action is irreversible." - } } }, "EditForm": { - "notApplicable": "N/A", - "placeholder": { - "summary": "A short summary describing your changes." - }, - "header": { - "success": "Your edit was successfully submitted.", - "failure": "Error while submitting edit", - "recentEdits": "Recent edits", - "unreviewed": "Restrict to unreviewed edits" - }, "button": { + "cancel": "Cancel", + "clear": "Clear", + "new": "Submit another edit", + "reset": "Reset to initial value", "showAll": "Show all edits", "showUnreviewed": "Restrict to unreviewed edits", - "new": "Submit another edit", - "clear": "Clear", - "reset": "Reset to initial value", "submit": "Submit and apply edit", - "cancel": "Cancel", "suggest": "Submit suggestion" }, "empty": { "suggestEdit": "Suggest a change using the form below" }, + "header": { + "failure": "Error while submitting edit", + "recentEdits": "Recent edits", + "success": "Your edit was successfully submitted.", + "unreviewed": "Restrict to unreviewed edits" + }, "label": { "summary": "Summary (optional)" }, "message": { "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "A short summary describing your changes." } }, "FileUpload": { - "tooltip": { - "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", - "size": "Cannot upload this file, ensure it is not too big", - "network": "A network error occurred while uploading this file", - "timeout": "Upload timeout, please try again", - "retry": "Retry", - "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}" - }, - "message": { - "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", - "local": { - "message": "You are about to upload music to your library. Before proceeding, please ensure that:", - "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", - "tag": "The music files you are uploading are tagged properly.", - "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format" - } - }, - "link": { - "uploading": "Uploading", - "processing": "Processing", - "picard": "We recommend using Picard for that purpose." - }, - "empty": { - "noFiles": "0" - }, - "label": { - "remainingSpace": "Remaining storage space", - "uploadWidget": "Click to select files to upload or drag and drop files or directories", - "extensions": "Supported extensions: {extensions}" - }, - "header": { - "local": "Upload music from '~/your local storage", - "server": "Import music from your server", - "failure": "Error while launching import", - "status": "Import status" - }, - "table": { - "upload": { - "header": { - "filename": "Filename", - "size": "Size", - "status": "Status", - "actions": "Actions" - }, - "status": { - "uploaded": "Uploaded", - "uploading": "Uploading…", - "pending": "Pending" - }, - "progress": "{percent}%" - } - }, "button": { - "retry": "Retry failed uploads", - "cancel": "Cancel" + "cancel": "Cancel", + "retry": "Retry failed uploads" }, "description": { "import": "Import status", "previousImport": "Results of your previous import:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error while launching import", + "local": "Upload music from '~/your local storage", + "server": "Import music from your server", + "status": "Import status" + }, + "label": { + "extensions": "Supported extensions: {extensions}", + "remainingSpace": "Remaining storage space", + "uploadWidget": "Click to select files to upload or drag and drop files or directories" + }, + "link": { + "picard": "We recommend using Picard for that purpose.", + "processing": "Processing", + "uploading": "Uploading" + }, + "message": { + "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", + "local": { + "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", + "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", + "message": "You are about to upload music to your library. Before proceeding, please ensure that:", + "tag": "The music files you are uploading are tagged properly." + } + }, + "table": { + "upload": { + "header": { + "actions": "Actions", + "filename": "Filename", + "size": "Size", + "status": "Status" + }, + "progress": "{percent}%", + "status": { + "pending": "Pending", + "uploaded": "Uploaded", + "uploading": "Uploading…" + } + } + }, + "tooltip": { + "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", + "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}", + "network": "A network error occurred while uploading this file", + "retry": "Retry", + "size": "Cannot upload this file, ensure it is not too big", + "timeout": "Upload timeout, please try again" } }, "FsBrowser": { @@ -1746,17 +1746,21 @@ } }, "Home": { - "title": "Library", "header": { - "recentlyListened": "Recently listened", - "recentlyFavorited": "Recently favorited", + "newChannels": "New channels", "playlists": "Playlists", "recentlyAdded": "Recently added", - "newChannels": "New channels" - } + "recentlyFavorited": "Recently favorited", + "recentlyListened": "Recently listened" + }, + "title": "Library" }, "ImportStatusModal": { + "button": { + "close": "Close" + }, "error": { + "importFailure": "An error occurred during upload processing. You will find more information below.", "invalidMetadata": { "label": "Invalid metadata", "message": "The metadata included in the file is invalid or some mandatory fields are missing." @@ -1764,39 +1768,41 @@ "unknownError": { "label": "Unknown error", "message": "An unknown error occurred" - }, - "importFailure": "An error occurred during upload processing. You will find more information below." + } }, "header": { "importDetail": "Import detail" }, - "message": { - "importDetail": "Upload is still pending and will soon be processed by the server.", - "importSuccess": "Upload was successfully processed by the server." - }, - "warning": { - "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." - }, - "table": { - "error": { - "errorType": "Error type", - "errorDetail": "Error detail", - "help": "Getting help", - "debug": "Debug information" - } - }, "link": { "documentation": "Read our documentation for this error", "support": "Open a support thread (include the debug information below in your message)" }, - "button": { - "close": "Close" + "message": { + "importDetail": "Upload is still pending and will soon be processed by the server.", + "importSuccess": "Upload was successfully processed by the server." + }, + "table": { + "error": { + "debug": "Debug information", + "errorDetail": "Error detail", + "errorType": "Error type", + "help": "Getting help" + } + }, + "warning": { + "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." } }, "Podcasts": { - "title": "Podcasts", - "placeholder": { - "search": "Search…" + "button": { + "cancel": "Cancel", + "channel": "Create a Channel", + "feed": "Subscribe to feed", + "search": "Search", + "subscribe": "Subscribe" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing podcasts" @@ -1805,76 +1811,69 @@ "search": "Podcast title", "tags": "Tags" }, - "button": { - "search": "Search", - "cancel": "Cancel", - "subscribe": "Subscribe", - "channel": "Create a Channel", - "feed": "Subscribe to feed" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, - "pagination": { - "results": "Results per page" - }, - "empty": { - "noResults": "No results matching your query" - }, "modal": { "subscription": { "header": "Subscription" } - } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Search…" + }, + "title": "Podcasts" }, "Radios": { - "title": "Radios", - "placeholder": { - "search": "Enter a radio name…" + "button": { + "add": "Create a radio", + "create": "Create your own radio", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing radios", "instance": "Instance radios", "user": "User radios" }, - "link": {}, "label": { "search": "Search" }, - "button": { - "search": "Search", - "create": "Create your own radio", - "add": "Create a radio" - }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" - } + "placeholder": { + "search": "Enter a radio name…" + }, + "title": "Radios" }, "TagDetail": { - "link": { - "moderation": "Open in moderation interface", - "artists": "Artists", - "albums": "Albums" - }, "header": { "channels": "Channels", "tracks": "Tracks" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "moderation": "Open in moderation interface" } }, "TagSelector": { @@ -1883,73 +1882,73 @@ } }, "TrackBase": { - "title": "Track", + "button": { + "cancel": "Cancel", + "delete": "Delete", + "download": "Download", + "edit": "Edit", + "embed": "Embed", + "more": "More…", + "play": "Play" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "wikipedia": "Search on Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this track?" + }, + "embed": { + "header": "Embed this track on your website" + } + }, "subtitle": { "with-uploader": "Uploaded by {0} on {1}", "without-uploader": "Uploaded on {0}" }, - "button": { - "download": "Download", - "more": "More…", - "play": "Play", - "cancel": "Cancel", - "embed": "Embed", - "edit": "Edit", - "delete": "Delete" - }, - "link": { - "domain": "View on {domain}", - "wikipedia": "Search on Wikipedia", - "discogs": "Search on Discogs", - "moderation": "Open in moderation interface", - "django": "View in Django's admin" - }, - "modal": { - "embed": { - "header": "Embed this track on your website" - }, - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." - } - } - } + "title": "Track" }, "TrackDetail": { - "notApplicable": "N/A", - "header": { - "track": "Track details", - "episode": "Episode details", - "release": "Release Details", - "playlists": "Related Playlists", - "library": "Related libraries" - }, "description": { "library": "This track is present in the following libraries:" }, + "header": { + "episode": "Episode details", + "library": "Related libraries", + "playlists": "Related Playlists", + "release": "Release Details", + "track": "Track details" + }, "link": { "musicbrainz": "View on MusicBrainz" }, + "notApplicable": "N/A", "table": { + "release": { + "album": "Album", + "artist": "Artist", + "copyright": "Copyright", + "license": "License", + "series": "Serie", + "url": "URL", + "year": "Year" + }, "track": { - "duration": "Duration", - "size": "Size", - "codec": "Codec", "bitrate": { "label": "Bitrate", "value": "{bitrate}/s" }, - "downloads": "Downloads" - }, - "release": { - "copyright": "Copyright", - "year": "Year", - "license": "License", - "url": "URL", - "artist": "Artist", - "album": "Album", - "series": "Serie" + "codec": "Codec", + "downloads": "Downloads", + "duration": "Duration", + "size": "Size" } } }, @@ -1959,146 +1958,143 @@ "suggest": "Suggest an edit on this track" }, "message": { - "remote": " This object is managed by another server, you cannot edit it." + "remote": "This object is managed by another server, you cannot edit it." } }, "radios": { "Builder": { - "title": "Radio Builder", - "placeholder": { - "name": "My awesome radio", - "description": "My awesome description" - }, - "header": { - "builder": "Builder", - "updated": "Radio updated", - "created": "Radio created", - "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters" + "button": { + "filter": "Add filter", + "save": "Save" }, "description": { "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." }, - "label": { - "name": "Radio name", - "description": "Description", - "public": "Display publicly", - "filter": "Add filters to customize your radio" + "header": { + "builder": "Builder", + "created": "Radio created", + "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters", + "updated": "Radio updated" }, - "button": { - "save": "Save", - "filter": "Add filter" + "label": { + "description": "Description", + "filter": "Add filters to customize your radio", + "name": "Radio name", + "public": "Display publicly" }, "option": { "filter": "Select a filter" }, + "placeholder": { + "description": "My awesome description", + "name": "My awesome radio" + }, "table": { "filter": { "header": { - "name": "Filter name", - "exclude": "Exclude", - "config": "Config", + "actions": "Actions", "candidates": "Candidates", - "actions": "Actions" + "config": "Config", + "exclude": "Exclude", + "name": "Filter name" } } - } + }, + "title": "Radio Builder" }, "Filter": { + "cancelButton": "Cancel", "excludeLabel": "Exclude", "matchingTracks": "0 tracks matching filter | {n} track matching filter | {n} tracks matching filter", "matchingTracksModalHeader": "Tracks matching filter", - "cancelButton": "Cancel", "removeButton": "Remove" } } }, "manage": { "ChannelsTable": { - "placeholder": { - "search": "Search by domain, name, account…" + "label": { + "category": "Category", + "search": "Search" }, "link": { - "moderation": "Open in moderation interface", - "local": "Local" - }, - "label": { - "search": "Search", - "category": "Category" + "local": "Local", + "moderation": "Open in moderation interface" }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, account…" }, "table": { "channel": { "header": { - "name": "Name", "account": "Account", - "domain": "Domain", "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "library": { "AlbumsTable": { - "notApplicable": "N/A", - "placeholder": { - "search": "Search by domain, title, artist, MusicBrainz ID…" - }, - "link": { - "moderation": "Open in moderation interface", - "local": "Local" - }, - "label": { - "search": "Search" - }, "action": { "delete": { "label": "Delete", "warning": "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." } }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "notApplicable": "N/A", "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, MusicBrainz ID…" }, "table": { "album": { "header": { - "name": "Name", "artist": "Artist", + "creationDate": "Creation date", "domain": "Domain", - "tracks": "Tracks", + "name": "Name", "releaseDate": "Release date", - "creationDate": "Creation date" + "tracks": "Tracks" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "ArtistsTable": { - "placeholder": { - "search": "Search by domain, name, MusicBrainz ID…" - }, "action": { "delete": { "label": "Delete", @@ -2106,68 +2102,68 @@ } }, "label": { - "search": "Search", - "category": "Category" + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local" }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, MusicBrainz ID…" }, "table": { "artist": { "header": { - "name": "Name", - "domain": "Domain", "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" } } - }, - "link": { - "local": "Local" - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "EditsCardList": { - "placeholder": { - "search": "Search by account, summary, domain…" - }, "label": { "search": "Search", "status": "Status" }, "option": { "all": "All", - "pending": "Pending review", "approved": "Approved", + "pending": "Pending review", "rejected": "Rejected" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by account, summary, domain…" } }, "LibrariesTable": { - "placeholder": { - "search": "Search by domain, actor, name, description…" - }, "action": { "delete": { "label": "Delete", @@ -2178,41 +2174,41 @@ "search": "Search", "visibility": "Visibility" }, + "link": { + "local": "Local" + }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, - "link": { - "local": "Local" + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, actor, name, description…" }, "table": { "library": { "header": { - "name": "Name", "account": "Account", + "creationDate": "Creation date", "domain": "Domain", - "visibility": "Visibility", - "uploads": "Uploads", "followers": "Followers", - "creationDate": "Creation date" + "name": "Name", + "uploads": "Uploads", + "visibility": "Visibility" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "TagsTable": { - "placeholder": { - "search": "Search by name" - }, "action": { "delete": { "label": "Delete", @@ -2223,33 +2219,32 @@ "search": "Search" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } - }, - "link": {}, - "table": { - "tag": { - "header": { - "name": "Name", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" - } - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artists", + "creationDate": "Creation date", + "name": "Name", + "tracks": "Tracks" + } + } } }, "TracksTable": { - "placeholder": { - "search": "Search by domain, title, artist, album, MusicBrainz ID…" - }, "action": { "delete": { "label": "Delete", @@ -2259,38 +2254,38 @@ "label": { "search": "Search" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "link": { "local": "Local" }, - "table": { - "track": { - "header": { - "title": "Title", - "album": "Album", - "artist": "Artist", - "domain": "Domain", - "license": "License", - "creationDate": "Creation date" - } - } + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, title, artist, album, MusicBrainz ID…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "license": "License", + "title": "Title" + } + } + } }, "UploadsTable": { - "placeholder": { - "search": "Search by domain, actor, name, reference, source…" - }, "action": { "delete": { "label": "Delete", @@ -2299,46 +2294,49 @@ }, "label": { "search": "Search", - "visibility": "Visibility", - "status": "Import status" - }, - "option": { - "all": "All", - "pending": "Pending", - "skipped": "Skipped", - "failed": "Failed", - "finished": "Finished" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } + "status": "Import status", + "visibility": "Visibility" }, "link": { "local": "Local" }, - "table": { - "upload": { - "header": { - "name": "Name", - "library": "Library", - "account": "Account", - "domain": "Domain", - "visibility": "Visibility", - "importStatus": "Import status", - "size": "Size", - "creationDate": "Creation date", - "accessedDate": "Accessed date" - } - } + "notApplicable": "N/A", + "option": { + "all": "All", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, actor, name, reference, source…" + }, + "table": { + "upload": { + "header": { + "accessedDate": "Accessed date", + "account": "Account", + "creationDate": "Creation date", + "domain": "Domain", + "importStatus": "Import status", + "library": "Library", + "name": "Name", + "size": "Size", + "visibility": "Visibility" + } + } + } } }, "moderation": { @@ -2348,99 +2346,95 @@ "label": "Purge" } }, - "placeholder": { - "search": "Search by domain, username, bio…" - }, "label": { "search": "Search" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "link": { "local": "Local account" }, - "table": { - "account": { - "header": { - "name": "Name", - "domain": "Domain", - "uploads": "Uploads", - "firstSeen": "First seen", - "lastSeen": "Last seen", - "moderationRule": "Under moderation rule" - }, - "moderationRule": "Yes" - } + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, username, bio…" + }, + "table": { + "account": { + "header": { + "domain": "Domain", + "firstSeen": "First seen", + "lastSeen": "Last seen", + "moderationRule": "Under moderation rule", + "name": "Name", + "uploads": "Uploads" + }, + "moderationRule": "Yes" + } } }, "DomainsTable": { "action": { - "purge": { - "label": "Purge" - }, "add": { "label": "Add to allow-list" }, + "purge": { + "label": "Purge" + }, "remove": { "label": "Remove from allow-list" } }, - "placeholder": { - "search": "Search by name…" + "empty": { + "noPods": "No other pods found" + }, + "label": { + "inList": "Is present on allow-list", + "search": "Search" }, "link": { "list": "This domain is present in your allow-list" }, - "label": { - "search": "Search", - "inList": "Is present on allow-list" - }, "option": { "all": "All", - "yes": "Yes", - "no": "No" + "no": "No", + "yes": "Yes" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name…" }, "table": { "domain": { "header": { - "name": "Name", - "users": "Users", - "receivedMessages": "Received messages", "firstSeen": "First seen", - "moderationRule": "Under moderation rule" + "moderationRule": "Under moderation rule", + "name": "Name", + "receivedMessages": "Received messages", + "users": "Users" }, "moderationRule": "Yes" } - }, - "empty": { - "noPods": "No other pods found" - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "InstancePolicyCard": { - "status": { - "enabled": "Enabled", - "paused": "Paused" - }, "button": { "edit": "Edit" }, @@ -2451,73 +2445,77 @@ "blockAll": "Block everything", "muteActivity": "Mute activity", "muteNotifications": "Mute notifications", - "rejectMedia": "Reject media", - "reason": "Reason" + "reason": "Reason", + "rejectMedia": "Reject media" + }, + "status": { + "enabled": "Enabled", + "paused": "Paused" } }, "InstancePolicyForm": { - "tooltip": { - "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place.", - "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", - "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.", - "silenceActivity": "Hide account or domain content, except from followers.", - "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", - "rejectMedia": "Hide account or domain content, except from followers." - }, - "label": { - "silenceActivity": "Mute activity", - "silenceNotifications": "Mute notifications", - "rejectMedia": "Reject media", - "policyEnabled": "Enabled", - "policyDisabled": "Disabled", - "policyReason": "Reason", - "blockAll": "Block everything", - "customizeRule": "Or customize your rule" - }, - "header": { - "editRule": "Edit moderation rule", - "addRule": "Add a new moderation rule", - "failure": "Error while creating rule" - }, "button": { "cancel": "Cancel", - "update": "Update", + "confirm": "Delete moderation rule", "create": "Create", "delete": "Delete", - "confirm": "Delete moderation rule" + "update": "Update" + }, + "header": { + "addRule": "Add a new moderation rule", + "editRule": "Edit moderation rule", + "failure": "Error while creating rule" + }, + "label": { + "blockAll": "Block everything", + "customizeRule": "Or customize your rule", + "policyDisabled": "Disabled", + "policyEnabled": "Enabled", + "policyReason": "Reason", + "rejectMedia": "Reject media", + "silenceActivity": "Mute activity", + "silenceNotifications": "Mute notifications" }, "modal": { "delete": { - "header": "Delete this moderation rule?", "content": { "warning": "This action is irreversible" - } + }, + "header": "Delete this moderation rule?" } + }, + "tooltip": { + "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", + "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", + "rejectMedia": "Hide account or domain content, except from followers.", + "silenceActivity": "Hide account or domain content, except from followers.", + "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", + "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place." } }, "InstancePolicyModal": { "button": { - "show": "Moderation rules…", - "close": "Close" + "close": "Close", + "show": "Moderation rules…" }, "modal": { "manage": { - "header": "Manage moderation rules for {obj}", "content": { "warning": "This entity is subject to specific moderation rules" - } + }, + "header": "Manage moderation rules for {obj}" } } }, "NoteForm": { - "placeholder": { - "summary": "Describe what actions have been taken, or any other related updates…" + "button": { + "add": "Add note" }, "header": { "failure": "Error while submitting note" }, - "button": { - "add": "Add note" + "placeholder": { + "summary": "Describe what actions have been taken, or any other related updates…" } }, "NotesThread": { @@ -2526,115 +2524,115 @@ }, "modal": { "delete": { - "header": "Delete this note?", "content": { "warning": "The note will be deleted. This action is irreversible." - } + }, + "header": "Delete this note?" } } }, "ReportCard": { - "modal": { - "delete": { - "header": "Delete reported object?", - "content": { - "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." - } - } - }, "button": { + "confirmDelete": "Delete", "delete": "Delete reported object", "resolve": "Resolve", - "unresolve": "Unresolve", - "confirmDelete": "Delete" - }, - "link": { - "report": "Report {id}", - "publicPage": "View public page", - "moderation": "Open in moderation interface" - }, - "table": { - "report": { - "submittedBy": "Submitted by", - "category": "Category", - "creationDate": "Creation date" - }, - "status": { - "status": "Status", - "resolved": "Resolved", - "unresolved": "Unresolved", - "assignedTo": "Assigned to", - "resolutionDate": "Resolution date", - "internalNotes": "Internal notes" - }, - "object": { - "type": "Type", - "owner": "Owner", - "account": "Account", - "domain": "Domain", - "local": "Local" - } + "unresolve": "Unresolve" }, "header": { + "actions": "Actions", "message": "Message", - "reportedObject": "Reported object", "notes": "Internal notes", - "actions": "Actions" + "reportedObject": "Reported object" }, - "warning": { - "objectDeleted": "The object associated with this report was deleted." - }, - "notApplicable": "N/A" - }, - "UserRequestCard": { "link": { - "request": "Request {id}" + "moderation": "Open in moderation interface", + "publicPage": "View public page", + "report": "Report {id}" }, - "table": { - "request": { - "submittedBy": "Submitted by", - "creationDate": "Creation date" - }, - "status": { - "status": "Status", - "pending": "Pending", - "refused": "Refused", - "approved": "Approved", - "assignedTo": "Assigned to", - "resolutionDate": "Resolution date", - "internalNotes": "Internal notes" + "modal": { + "delete": { + "content": { + "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." + }, + "header": "Delete reported object?" } }, "notApplicable": "N/A", + "table": { + "object": { + "account": "Account", + "domain": "Domain", + "local": "Local", + "owner": "Owner", + "type": "Type" + }, + "report": { + "category": "Category", + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "resolutionDate": "Resolution date", + "resolved": "Resolved", + "status": "Status", + "unresolved": "Unresolved" + } + }, + "warning": { + "objectDeleted": "The object associated with this report was deleted." + } + }, + "UserRequestCard": { + "button": { + "approve": "Approve", + "reject": "Refuse" + }, "header": { - "signup": "Message", "actions": "Actions", - "notes": "Internal notes" + "notes": "Internal notes", + "signup": "Message" + }, + "link": { + "request": "Request {id}" }, "message": { "signup": "This user wants to sign-up on your pod." }, - "button": { - "approve": "Approve", - "reject": "Refuse" + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "approved": "Approved", + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "pending": "Pending", + "refused": "Refused", + "resolutionDate": "Resolution date", + "status": "Status" + } } } }, "users": { "InvitationForm": { - "placeholder": { - "invitation": "Leave empty for a random code" - }, - "header": { - "failure": "Error while creating invitation" - }, "button": { "clear": "Clear", "new": "Get a new invitation" }, + "header": { + "failure": "Error while creating invitation" + }, "label": { "invite": "Invitation code" }, + "placeholder": { + "invitation": "Leave empty for a random code" + }, "table": { "invitation": { "header": { @@ -2648,41 +2646,56 @@ "action": { "delete": "Delete" }, - "placeholder": { - "search": "Search by username, e-mail address, code…" - }, "label": { + "expired": "Expired", "search": "Search", "status": "Status", - "used": "Used", - "expired": "Expired", - "unused": "Not used" + "unused": "Not used", + "used": "Used" + }, + "option": { + "all": "All", + "expired": "Expired/used", + "open": "Open" }, "ordering": { "label": "Ordering" }, - "option": { - "all": "All", - "open": "Open", - "expired": "Expired/used" + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, + "placeholder": { + "search": "Search by username, e-mail address, code…" }, "table": { "invitation": { "header": { - "owner": "Owner", - "status": "Status", + "code": "Code", "creationDate": "Creation date", "expirationDate": "Expiration date", - "user": "User", - "code": "Code" + "owner": "Owner", + "status": "Status", + "user": "User" } } - }, - "pagination": { - "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" } }, "UsersTable": { + "label": { + "search": "Search" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, "permission": { "library": "Library", "moderation": "Moderation", @@ -2691,54 +2704,46 @@ "placeholder": { "search": "Search by username, e-mail address, name…" }, - "label": { - "search": "Search" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "table": { "user": { - "header": { - "username": "Username", - "email": "Email", - "accountStatus": "Account status", - "signup": "Sign-up", - "lastActivity": "Last activity", - "permissions": "Permissions", - "status": "Status" - }, "accountStatus": { "active": "Active", "inactive": "Inactive" }, + "header": { + "accountStatus": "Account status", + "email": "Email", + "lastActivity": "Last activity", + "permissions": "Permissions", + "signup": "Sign-up", + "status": "Status", + "username": "Username" + }, "status": { "admin": "Admin", - "staff": "Staff member", - "regular": "Regular user" + "regular": "Regular user", + "staff": "Staff member" } } - }, - "notApplicable": "N/A", - "pagination": { - "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" } } } }, "moderation": { "FilterModal": { - "message": { - "success": "Content filter successfully added" + "button": { + "cancel": "Cancel", + "hide": "Hide content" }, "header": { - "modal": "Do you want to hide content from artist \"{name}\"?", - "failure": "Error while creating filter" + "failure": "Error while creating filter", + "modal": "Do you want to hide content from artist \"{name}\"?" + }, + "help": { + "createFilter": "You can manage your filters any time from your account settings." + }, + "message": { + "success": "Content filter successfully added" }, "warning": { "createFilter": { @@ -2748,13 +2753,6 @@ "listItem3": "In artists and album listings", "listItem4": "In radio suggestions" } - }, - "help": { - "createFilter": "You can manage your filters any time from your account settings." - }, - "button": { - "cancel": "Cancel", - "hide": "Hide content" } }, "ReportCategoryDropdown": { @@ -2766,47 +2764,47 @@ } }, "ReportModal": { - "message": { - "submissionSuccess": "Report successfully submitted, thank you" + "button": { + "cancel": "Cancel", + "submit": "Submit report" + }, + "description": { + "email": "We'll use this e-mail address if we need to contact you regarding this report.", + "forwardToDomain": "Forward an anonymized copy of your report to the server hosting this element.", + "message": "Use this field to provide additional context to the moderator that will handle your report.", + "modal": "Use this form to submit a report to our moderation team" }, "error": { "nodeinfoFetch": "Cannot fetch Node Info: {error}" }, "header": { + "disabled": "Anonymous reports are disabled, please sign-in to submit a report.", "modal": "Do you want to report this object?", - "submissionFailure": "Error while submitting report", - "disabled": "Anonymous reports are disabled, please sign-in to submit a report." - }, - "description": { - "modal": "Use this form to submit a report to our moderation team", - "email": "We'll use this e-mail address if we need to contact you regarding this report.", - "message": "Use this field to provide additional context to the moderator that will handle your report.", - "forwardToDomain": "Forward an anonymized copy of your report to the server hosting this element." + "submissionFailure": "Error while submitting report" }, "label": { "email": "Email", - "message": "Message", - "forwardToDomain": "Forward to {domain}" + "forwardToDomain": "Forward to {domain}", + "message": "Message" }, - "button": { - "cancel": "Cancel", - "submit": "Submit report" + "message": { + "submissionSuccess": "Report successfully submitted, thank you" } } }, "notifications": { "NotificationRow": { "button": { + "approve": "Approve", "markRead": "Mark as read", "markUnread": "Mark as unread", - "reject": "Reject", - "approve": "Approve" + "reject": "Reject" }, "message": { - "libraryFollow": "{username} followed your library \"{library}\"", "libraryAcceptFollow": "{username} accepted your follow on library \"{library}\"", - "libraryReject": "You rejected {username}'s request to follow \"{library}\"", - "libraryPendingFollow": "{username} wants to follow your library \"{library}\"" + "libraryFollow": "{username} followed your library \"{library}\"", + "libraryPendingFollow": "{username} wants to follow your library \"{library}\"", + "libraryReject": "You rejected {username}'s request to follow \"{library}\"" } } }, @@ -2818,94 +2816,94 @@ }, "Editor": { "button": { - "copy": "Copy the current queue to this playlist", "addDuplicate": "Add anyways", "clear": "Clear playlist", + "copy": "Copy the current queue to this playlist", "insertFromQueue": "Insert from queue ({n} track) | Insert from queue ({n} tracks" }, - "header": { - "editor": "Playlist editor" - }, - "loading": { - "sync": "Syncing changes to server…" - }, "error": { "sync": "An error occurred while saving your changes" }, - "warning": { - "duplicate": "Some tracks in your queue are already in this playlist:" - }, - "message": { - "sync": "Changes synced with server" + "header": { + "editor": "Playlist editor" }, "help": { "reorder": "Drag and drop rows to reorder tracks in the playlist" }, + "loading": { + "sync": "Syncing changes to server…" + }, + "message": { + "sync": "Changes synced with server" + }, "modal": { "clearPlaylist": { - "header": "Do you want to clear the playlist \"{playlist}\"?", "content": { "warning": "This will remove all tracks from this playlist and cannot be undone." - } + }, + "header": "Do you want to clear the playlist \"{playlist}\"?" } + }, + "warning": { + "duplicate": "Some tracks in your queue are already in this playlist:" } }, "Form": { - "placeholder": { - "name": "My awesome playlist" + "button": { + "create": "Create playlist", + "update": "Update playlist" }, "header": { + "createFailure": "The playlist could not be created", "createPlaylist": "Create a new playlist", - "updateSuccess": "Playlist updated", "createSuccess": "Playlist created", - "createFailure": "The playlist could not be created" + "updateSuccess": "Playlist updated" }, "label": { "name": "Playlist name", "visibility": "Playlist visiblity" }, - "button": { - "update": "Update playlist", - "create": "Create playlist" + "placeholder": { + "name": "My awesome playlist" } }, "PlaylistModal": { - "placeholder": { - "filterPlaylist": "Enter playlist name" - }, "button": { + "addDuplicate": "Add anyways", "addToPlaylist": "Add to this playlist", "addTrack": "Add track", "cancel": "Cancel", - "addDuplicate": "Add anyways", "edit": "Edit" }, - "header": { - "addToPlaylist": "Add to playlist", - "track": "{title}, by {artist}", - "manage": "Manage playlists", - "addFailure": "The track can't be added to a playlist", - "available": "Available playlists", - "noResults": "No results matching your filter" + "empty": { + "noPlaylists": "No playlists have been created yet" }, - "warning": { - "duplicate": "{ 0 } is already in { 1 }." + "header": { + "addFailure": "The track can't be added to a playlist", + "addToPlaylist": "Add to playlist", + "available": "Available playlists", + "manage": "Manage playlists", + "noResults": "No results matching your filter", + "track": "{title}, by {artist}" + }, + "label": { + "filter": "Filter" + }, + "placeholder": { + "filterPlaylist": "Enter playlist name" }, "table": { "edit": { "header": { "edit": "Edit", - "name": "Name", "lastModification": "Last modification", + "name": "Name", "tracks": "Tracks" } } }, - "label": { - "filter": "Filter" - }, - "empty": { - "noPlaylists": "No playlists have been created yet" + "warning": { + "duplicate": "{ 0 } is already in { 1 }." } }, "TrackPlaylistIcon": { @@ -2914,25 +2912,25 @@ } }, "Widget": { - "placeholder": { - "noPlaylists": "No playlists have been created yet" - }, "button": { "create": "Create playlist", "more": "Show more" + }, + "placeholder": { + "noPlaylists": "No playlists have been created yet" } } }, "radios": { "Button": { - "stopTagsRadio": "Stop tags radio", + "startArtistsRadio": "Start artists radio", + "startPlaylistsRadio": "Start playlists radio", + "startRadio": "Play radio", "startTagsRadio": "Start tags radio", "stopArtistsRadio": "Stop artists radio", - "startArtistsRadio": "Start artists radio", "stopPlaylistsRadio": "Stop playlists radio", - "startPlaylistsRadio": "Start playlists radio", "stopRadio": "Stop radio", - "startRadio": "Play radio" + "stopTagsRadio": "Stop tags radio" }, "Card": { "button": { @@ -2950,23 +2948,12 @@ "vui": { "Pagination": { "label": "Pagination", - "previous": "Previous Page", - "next": "Next Page" + "next": "Next Page", + "previous": "Previous Page" } } }, "composables": { - "useErrorHandler": { - "unexpectedError": "An unexpected error occurred.", - "errorReportTitle": "An unexpected error occured.", - "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", - "leaveFeedback": "Leave feedback" - }, - "useThemeList": { - "browserDefault": "Browser default", - "lightTheme": "Light", - "darkTheme": "Dark" - }, "audio": { "usePlayOptions": { "addToQueueMessage": "{n} tracks were added to your queue | {n} track was added to your queue | {n} tracks were added to your queue" @@ -2975,169 +2962,169 @@ "locale": { "useSharedLabels": { "fields": { - "privacyLevel": { - "label": "Activity visibility", - "help": "Determine the visiblity level of your activity", + "contentCategory": { + "choices": { + "music": "Music", + "other": "Other", + "podcast": "Podcast" + }, + "label": "Content category" + }, + "importStatus": { + "choices": { + "draft": { + "help": "This track has been uploaded, but hasn't been scheduled for processing yet", + "label": "Draft" + }, + "errored": { + "help": "This track could not be processed, please make sure it is tagged correctly", + "label": "Errored" + }, + "finished": { + "help": "Imported", + "label": "Finished" + }, + "pending": { + "help": "This track has been uploaded, but hasn't been processed by the server yet", + "label": "Pending" + }, + "skipped": { + "help": "This track is already present in one of your libraries", + "label": "Skipped" + } + }, + "label": "Click to display more information about the import process for this upload" + }, + "privacyLevel": { "choices": { - "private": "Nobody except me", "instance": "Everyone on this instance", + "private": "Nobody except me", "public": "Everyone, across all instances" }, + "help": "Determine the visiblity level of your activity", + "label": "Activity visibility", "shortChoices": { - "private": "Private", "instance": "Instance", + "private": "Private", "public": "Everyone" } }, - "importStatus": { - "label": "Click to display more information about the import process for this upload", - "choices": { - "skipped": { - "label": "Skipped", - "help": "This track is already present in one of your libraries" - }, - "draft": { - "label": "Draft", - "help": "This track has been uploaded, but hasn't been scheduled for processing yet" - }, - "pending": { - "label": "Pending", - "help": "This track has been uploaded, but hasn't been processed by the server yet" - }, - "errored": { - "label": "Errored", - "help": "This track could not be processed, please make sure it is tagged correctly" - }, - "finished": { - "label": "Finished", - "help": "Imported" - } - } - }, "reportType": { - "label": "Category", "choices": { - "takedownRequest": "Takedown request", - "invalidMetadata": "Invalid metadata", "illegalContent": "Illegal content", + "invalidMetadata": "Invalid metadata", "offensiveContent": "Offensive content", - "other": "Other" - } + "other": "Other", + "takedownRequest": "Takedown request" + }, + "label": "Category" }, "summary": { "label": "Bio" - }, - "contentCategory": { - "label": "Content category", - "choices": { - "podcast": "Podcast", - "music": "Music", - "other": "Other" - } } }, "filters": { - "creationDate": "Creation date", - "releaseDate": "Release date", "accessedDate": "Accessed date", + "albumTitle": "Album name", "appliedDate": "Applied date", - "handledDate": "Handled date", + "artistName": "Artist name", + "bitrate": "Bitrate", + "creationDate": "Creation date", + "dateJoined": "Sign-up date", + "domain": "Domain", + "duration": "Duration", + "expirationDate": "Expiration date", "firstSeen": "First seen date", + "followers": "Followers", + "handledDate": "Handled date", + "itemsCount": "Items", + "lastActivity": "Last activity", "lastSeen": "Last seen date", "modificationDate": "Modification date", - "expirationDate": "Expiration date", - "trackTitle": "Track name", - "albumTitle": "Album name", - "artistName": "Artist name", "name": "Name", - "itemsCount": "Items", - "size": "Size", - "bitrate": "Bitrate", - "duration": "Duration", - "dateJoined": "Sign-up date", - "lastActivity": "Last activity", - "username": "Username", - "domain": "Domaimn", - "users": "Users", "receivedMessages": "Received messages", + "releaseDate": "Release date", + "size": "Size", + "trackTitle": "Track name", "uploads": "Uploads", - "followers": "Followers" + "username": "Username", + "users": "Users" }, "scopes": { - "profile": { - "label": "Profile", - "description": "Access to e-mail, username, and profile information" - }, - "libraries": { - "label": "Libraries and uploads", - "description": "Access to audio files, libraries, artists, albums and tracks" + "edits": { + "description": "Access to edits", + "label": "Edits" }, "favorites": { - "label": "Favorites", - "description": "Access to favorites" - }, - "listenings": { - "label": "Listenings", - "description": "Access to listening history" - }, - "follows": { - "label": "Follows", - "description": "Access to follows" - }, - "playlists": { - "label": "Playlists", - "description": "Access to playlists" - }, - "radios": { - "label": "Radios", - "description": "Access to radios" + "description": "Access to favorites", + "label": "Favorites" }, "filters": { - "label": "Content filters", - "description": "Access to content filters" + "description": "Access to content filters", + "label": "Content filters" + }, + "follows": { + "description": "Access to follows", + "label": "Follows" + }, + "libraries": { + "description": "Access to audio files, libraries, artists, albums and tracks", + "label": "Libraries and uploads" + }, + "listenings": { + "description": "Access to listening history", + "label": "Listenings" }, "notifications": { - "label": "Notifications", - "description": "Access to notifications" + "description": "Access to notifications", + "label": "Notifications" }, - "edits": { - "label": "Edits", - "description": "Access to edits" + "playlists": { + "description": "Access to playlists", + "label": "Playlists" }, - "security": { - "label": "Security", - "description": "Access to security settings such as password and authorization" + "profile": { + "description": "Access to e-mail, username, and profile information", + "label": "Profile" + }, + "radios": { + "description": "Access to radios", + "label": "Radios" }, "reports": { - "label": "Reports", - "description": "Access to moderation reports" + "description": "Access to moderation reports", + "label": "Reports" + }, + "security": { + "description": "Access to security settings such as password and authorization", + "label": "Security" } } } }, "moderation": { "useEditConfigs": { - "description": { - "label": "Description" - }, - "cover": { - "label": "Cover" - }, - "tags": { - "label": "Tags" + "album": { + "releaseDate": "Release date", + "title": "Title" }, "artist": { "name": "Name" }, - "album": { - "title": "Title", - "releaseDate": "Release date" + "cover": { + "label": "Cover" + }, + "description": { + "label": "Description" + }, + "tags": { + "label": "Tags" }, "track": { - "title": "Title", - "position": "Position", "copyright": "Copyright", - "license": "Licence" + "license": "Licence", + "position": "Position", + "title": "Title" } }, "useReport": { @@ -3145,78 +3132,89 @@ "label": "Report {'@'}{username}", "typeLabel": "Account" }, - "track": { - "label": "Report this track…", - "typeLabel": "Track" - }, "album": { "label": "Report this album…", "typeLabel": "Album" }, - "channel": { - "label": "Report this channel…", - "typeLabel": "Channel" - }, "artist": { "label": "Report this artist…", "typeLabel": "Artist", "unknownLabel": "Unknown artist" }, - "playlist": { - "label": "Report this playlist…", - "typeLabel": "Playlist" + "channel": { + "label": "Report this channel…", + "typeLabel": "Channel" }, "library": { "label": "Report this library…", "typeLabel": "Library" + }, + "playlist": { + "label": "Report this playlist…", + "typeLabel": "Playlist" + }, + "track": { + "label": "Report this track…", + "typeLabel": "Track" } }, "useReportConfigs": { - "tags": { - "label": "Tags" - }, - "name": { - "label": "Name" - }, - "creationDate": { - "label": "Creation date" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "visibility": { - "label": "Visibility" - }, - "artist": { - "label": "Artist" - }, - "album": { - "label": "Album", - "title": "Title", - "releaseDate": "Release date" - }, - "track": { - "label": "Track", - "title": "Title", - "position": "Position", - "copyright": "Copyright", - "license": "Licence" - }, - "library": { - "label": "Library", - "description": "Description" - }, - "playlist": { - "label": "Playlist" - }, "account": { "label": "Account", "summary": "Bio" }, + "album": { + "label": "Album", + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "label": "Artist" + }, "channel": { "label": "Channel" + }, + "creationDate": { + "label": "Creation date" + }, + "library": { + "description": "Description", + "label": "Library" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Name" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "label": "Track", + "license": "Licence", + "position": "Position", + "title": "Title" + }, + "visibility": { + "label": "Visibility" } } + }, + "useErrorHandler": { + "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", + "errorReportTitle": "An unexpected error occured.", + "leaveFeedback": "Leave feedback", + "unexpectedError": "An unexpected error occurred." + }, + "useThemeList": { + "browserDefault": "Browser default", + "darkTheme": "Dark", + "lightTheme": "Light" } }, "init": { @@ -3225,33 +3223,46 @@ "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" }, "sentry": { - "title": "To enhance the quality of our services, we would like to collect information about crashes during your session.", - "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", - "funkwhaleInstance": "Funkwhale's official Glitchtip instance", "allow": "Allow", - "deny": "Deny" + "deny": "Deny", + "funkwhaleInstance": "Funkwhale's official Glitchtip instance", + "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", + "title": "To enhance the quality of our services, we would like to collect information about crashes during your session." }, "serviceWorker": { - "newAppVersion": "A new version of the app is available.", "actions": { - "update": "Update", - "later": "Later" - } + "later": "Later", + "update": "Update" + }, + "newAppVersion": "A new version of the app is available." } }, "views": { "Notifications": { - "title": "Notifications", + "button": { + "read": "Mark all as read", + "submit": "Got it!" + }, + "empty": { + "notifications": "No notification to show" + }, "header": { - "messages": "Your messages", - "instanceSupport": "Support this Funkwhale pod", "funkwhaleSupport": "Do you like Funkwhale?", + "instanceSupport": "Support this Funkwhale pod", + "messages": "Your messages", "notifications": "Your notifications" }, "label": { "reminder": "Remind me in:", "showRead": "Show read notifications" }, + "link": { + "donate": "Donate", + "help": "Discover other ways to help" + }, + "loading": { + "notifications": "Loading notifications…" + }, "message": { "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" }, @@ -3263,96 +3274,83 @@ "never": "Never" } }, - "button": { - "submit": "Got it!", - "read": "Mark all as read" - }, - "link": { - "donate": "Donate", - "help": "Discover other ways to help" - }, - "loading": { - "notifications": "Loading notifications…" - }, - "empty": { - "notifications": "No notification to show" - } + "title": "Notifications" }, "Search": { - "header": { - "search": "Search", - "rss": "Subscribe to a podcast RSS feed", - "remote": "Search a remote object" - }, - "label": { - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "playlists": "Playlists", - "radios": "Radios", - "tags": "Tags", - "podcasts": "Podcasts", - "series": "Series" - }, "button": { "submit": "Submit Search Query" + }, + "header": { + "remote": "Search a remote object", + "rss": "Subscribe to a podcast RSS feed", + "search": "Search" + }, + "label": { + "albums": "Albums", + "artists": "Artists", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Tags", + "tracks": "Tracks" } }, "admin": { "ChannelDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "openRemote": "Open remote profile", + "refresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "channelData": "Channel data" }, "label": { "local": "Local" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin" - }, - "button": { - "refresh": "Refresh from remote server", - "openRemote": "Open remote profile", - "delete": "Delete" + "django": "View in Django's admin", + "localProfile": "Open local profile" }, "modal": { "delete": { - "header": "Delete this channel?", "content": { "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." - } + }, + "header": "Delete this channel?" } }, - "header": { - "channelData": "Channel data", - "activity": "Activity", - "audioContent": "Audio content" - }, "table": { - "channelData": { - "name": "Name", - "category": "Category", - "account": "Account", - "domain": "Domain", - "description": "Description", - "url": "URL", - "rss": "RSS feed" - }, "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", + "edits": "Edits", "favorited": "Favorited tracks", - "playlists": "Playlists", + "firstSeen": "First seen", "linkedReports": "Linked reports", - "edits": "Edits" + "listenings": "Listenings", + "playlists": "Playlists" }, "audioContent": { + "albums": "Albums", "cachedSize": "Cached size", "totalSize": "Total size", - "uploads": "Uploads", - "albums": "Albums", - "tracks": "Tracks" + "tracks": "Tracks", + "uploads": "Uploads" + }, + "channelData": { + "account": "Account", + "category": "Category", + "description": "Description", + "domain": "Domain", + "name": "Name", + "rss": "RSS feed", + "url": "URL" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "CommonList": { @@ -3371,189 +3369,182 @@ }, "Settings": { "header": { - "settings": "Instance Settings", - "instanceInfo": "Instance Information", - "signups": "Sign-ups", - "security": "Security", - "music": "Music", "channels": "Channels", - "playlists": "Playlists", - "moderation": "Moderation", "federation": "Federation", - "subsonic": "Subsonic", + "instanceInfo": "Instance Information", + "moderation": "Moderation", + "music": "Music", + "playlists": "Playlists", + "sections": "Sections", + "security": "Security", + "settings": "Instance Settings", + "signups": "Sign-ups", "stats": "Statistics", - "ui": "User Interface", - "sections": "Sections" + "subsonic": "Subsonic", + "ui": "User Interface" } }, "library": { "AlbumDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" }, "header": { - "local": "Local", + "activity": "Activity", "albumData": "Album data", - "activity": "Activity", - "audioContent": "Audio content" + "audioContent": "Audio content", + "local": "Local" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", "artist": "Artist", + "django": "View in Django's admin", "domain": "Domain", - "reports": "Linked reports", "edits": "Edits", "libraries": "Libraries", - "uploads": "Uploads", - "tracks": "Tracks" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } - } - }, - "table": { - "album": { - "title": "Title", - "description": "Description" - }, - "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", - "favorited": "Favorited tracks", - "playlists": "Playlists" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - } - } - }, - "ArtistDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "header": { - "local": "Local", - "artistData": "Artist data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { "localProfile": "Open local profile", - "django": "View in Django's admin", "musicbrainz": "Open on MusicBrainz", "remoteProfile": "Open remote profile", - "category": "Category", - "domain": "Domain", "reports": "Linked reports", - "edits": "Edits", - "libraries": "Libraries", - "uploads": "Uploads", - "albums": "Albums", - "tracks": "Tracks" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this artist?", - "content": { - "warning": "The artist will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } - } - }, - "table": { - "artist": { - "name": "Name", - "description": "Description" - }, - "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", - "favorited": "Favorited tracks", - "playlists": "Playlists" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - } - } - }, - "Base": { - "title": "Manage Library", - "menu": { - "secondary": "Secondary menu" - }, - "link": { - "edits": "Edits", - "channels": "Channels", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "libraries": "Libraries", - "uploads": "Uploads", - "tags": "Tags" - } - }, - "EditsList": { - "title": "Edits", - "header": { - "edits": "Library edits" - } - }, - "LibraryDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "header": { - "local": "Local", - "libraryData": "Library data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "visibility": "Visibility", - "account": "Account", - "reports": "Linked reports", - "domain": "Domain", - "artists": "Artists", - "albums": "Albums", "tracks": "Tracks", "uploads": "Uploads" }, - "button": { - "delete": "Delete" - }, "modal": { "delete": { - "header": "Delete this library?", "content": { - "warning": "The library will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } + "warning": "The album will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this album?" } }, "table": { - "library": { - "name": "Name", - "description": "Description" + "activity": { + "favorited": "Favorited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" }, + "album": { + "description": "Description", + "title": "Title" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "ArtistDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "artistData": "Artist data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Category", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The artist will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this artist?" + } + }, + "table": { + "activity": { + "favorited": "Favorited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "artist": { + "description": "Description", + "name": "Name" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "edits": "Edits", + "libraries": "Libraries", + "tags": "Tags", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Manage Library" + }, + "EditsList": { + "header": { + "edits": "Library edits" + }, + "title": "Edits" + }, + "LibraryDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "libraryData": "Library data", + "local": "Local" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "domain": "Domain", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The library will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this library?" + } + }, + "table": { "activity": { "firstSeen": "First seen", "followers": "Followers" @@ -3561,158 +3552,188 @@ "audioContent": { "cachedSize": "Cached size", "totalSize": "Total size" + }, + "library": { + "description": "Description", + "name": "Name" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "TagDetail": { - "header": { - "tagData": "Tag data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, "button": { "delete": "Delete" }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "tagData": "Tag data" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "localProfile": "Open local profile", + "tracks": "Tracks" + }, "modal": { "delete": { - "header": "Delete this tag?", "content": { "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." - } + }, + "header": "Delete this tag?" } }, "table": { - "tag": { - "name": "Name" - }, "activity": { "firstSeen": "First seen" + }, + "tag": { + "name": "Name" } } }, "TrackDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" }, "header": { + "activity": "Activity", "local": "Local", - "trackData": "Track data", - "activity": "Activity" + "trackData": "Track data" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", "album": "Album", + "albumArtist": "Album artist", "artist": "Artist", + "django": "View in Django's admin", "domain": "Domain", - "reports": "Linked reports", "edits": "Edits", "libraries": "Libraries", - "uploads": "Uploads", - "albumArtist": "Album artist" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "uploads": "Uploads" }, "modal": { "delete": { - "header": "Delete this track?", "content": { "warning": "The track will be deleted, as well as associated uploads, favorites and listening history. This action is irreversible." - } + }, + "header": "Delete this track?" } }, "table": { - "track": { - "title": "Title", - "position": "Position", - "discNumber": "Disc number", - "copyright": "Copyright", - "license": "License", - "description": "Description" - }, "activity": { + "favorited": "Favorited tracks", "firstSeen": "First seen", "listenings": "Listenings", - "favorited": "Favorited tracks", "playlists": "Playlists" }, + "track": { + "copyright": "Copyright", + "description": "Description", + "discNumber": "Disc number", + "license": "License", + "position": "Position", + "title": "Title" + }, "trackData": { "cachedSize": "Cached size", "totalSize": "Total size" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "UploadDetail": { - "header": { - "local": "Local", - "uploadData": "Upload data", - "activity": "Activity", - "audioContent": "Audio content" - }, "button": { - "download": "Download", - "delete": "Delete" + "delete": "Delete", + "download": "Download" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "local": "Local", + "uploadData": "Upload data" }, "link": { - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "visibility": "Visibility", "account": "Account", + "django": "View in Django's admin", "domain": "Domain", "importStatus": "Import status", "library": "Library", - "type": "Type" + "remoteProfile": "Open remote profile", + "type": "Type", + "visibility": "Visibility" }, "modal": { "delete": { - "header": "Delete this upload?", "content": { "warning": "The upload will be removed. This action is irreversible." - } + }, + "header": "Delete this upload?" } }, + "notApplicable": "N/A", "table": { - "upload": { - "name": "Name" - }, "activity": { - "firstSeen": "First seen", - "accessedDate": "Accessed date" + "accessedDate": "Accessed date", + "firstSeen": "First seen" }, "audioContent": { - "track": "Track", - "cachedSize": "Cached size", - "size": "Size", "bitrate": { "label": "Bitrate", "value": "{bitrate}/s" }, - "duration": "Duration" + "cachedSize": "Cached size", + "duration": "Duration", + "size": "Size", + "track": "Track" + }, + "upload": { + "name": "Name" } - }, - "notApplicable": "N/A" + } } }, "moderation": { "AccountsDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "addPolicy": "Add a moderation policy" }, - "tooltip": { - "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" }, + "header": { + "accountData": "Account data", + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activty", + "audioContent": "Audio content", + "localAccount": "Local account", + "noPolicy": "You don't have any rule in place for this account." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "domain": "Domain", + "libraries": "Libraries", + "linkedReports": "Linked reports", + "openProfile": "Open profile", + "remoteProfile": "Open remote profile", + "requests": "Requests", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "notApplicable": "N/A", "option": { "permission": { "library": "Library", @@ -3720,142 +3741,121 @@ "settings": "Settings" } }, - "header": { - "localAccount": "Local account", - "noPolicy": "You don't have any rule in place for this account.", - "activePolicy": "This domain is subject to specific moderation rules", - "accountData": "Account data", - "activity": "Activty", - "audioContent": "Audio content" - }, - "link": { - "openProfile": "Open profile", - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "domain": "Domain", - "linkedReports": "Linked reports", - "requests": "Requests", - "channels": "Channels", - "libraries": "Libraries", - "uploads": "Uploads", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account" - }, - "button": { - "addPolicy": "Add a moderation policy" - }, "table": { "accountData": { - "username": "Username", "displayName": "Display name", "email": "Email address", + "lastActivity": "Last activity", + "lastChecked": "Last checked", "loginStatus": { - "label": "Login status", + "disabled": "Disabled", "enabled": "Enabled", - "disabled": "Disabled" + "label": "Login status" }, "permissions": "Permissions", - "userType": "Type", - "lastChecked": "Last checked", "signupDate": "Sign-up date", - "lastActivity": "Last activity" + "userType": "Type", + "username": "Username" }, "activity": { - "firstSeen": "First seen", + "emittedFollows": "Emitted library follows", "emittedMessages": "Emitted messages", - "receivedFollows": "Received library follows", - "emittedFollows": "Emitted library follows" + "firstSeen": "First seen", + "receivedFollows": "Received library follows" }, "audioContent": { "cachedSize": "Cached size", - "uploadQuota": "Upload quota", "megabyte": "MB", - "totalSize": "Total size" + "totalSize": "Total size", + "uploadQuota": "Upload quota" } }, - "notApplicable": "N/A" + "tooltip": { + "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } }, "Base": { - "title": "Moderation", + "link": { + "accounts": "Accounts", + "domains": "Domains", + "reports": "Reports", + "userRequests": "User Requests" + }, "menu": { "secondary": "Secondary menu" }, - "link": { - "reports": "Reports", - "userRequests": "User Requests", - "domains": "Domains", - "accounts": "Accounts" - } + "title": "Moderation" }, "DomainsDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "link": { - "website": "Open website", - "django": "View in Django's admin", - "knownAccounts": "Known accounts", - "channels": "Channels", - "libraries": "Libraries", - "uploads": "Uploads", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, "button": { - "removeFromAllowList": "Remove from allow-list", - "addToAllowList": "Add to allow-list", "addPolicy": "Add a moderation policy", - "refreshNodeInfo": "Refresh node info" - }, - "header": { - "noPolicy": "You don't have any rule in place for this domain.", - "activePolicy": "This domain is subject to specific moderation rules", - "instanceData": "Instance data", - "activity": "Activty", - "audioContent": "Audio content" + "addToAllowList": "Add to allow-list", + "refreshNodeInfo": "Refresh node info", + "removeFromAllowList": "Remove from allow-list" }, "description": { "policy": "Moderation policies help you control how your instance interact with a given domain or account" }, + "header": { + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activty", + "audioContent": "Audio content", + "instanceData": "Instance data", + "noPolicy": "You don't have any rule in place for this domain." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "knownAccounts": "Known accounts", + "libraries": "Libraries", + "tracks": "Tracks", + "uploads": "Uploads", + "website": "Open website" + }, + "notApplicable": "N/A", "table": { + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, "instanceData": { + "domainName": "Name", "inAllowList": { + "false": "No", "label": "Is present on allow-list", - "true": "Yes", - "false": "No" + "true": "Yes" }, "lastChecked": "Last checked", + "nodeInfoStatus": { + "label": "Status", + "value": "Error while fetching node info" + }, "software": { "label": "Software", "value": "{name} ({version})" }, - "domainName": "Name", - "totalUsers": "Total users", - "nodeInfoStatus": { - "label": "Status", - "value": "Error while fetching node info" - } - }, - "activity": { - "firstSeen": "First seen", - "emittedMessages": "Emitted messages", - "receivedFollows": "Received library follows", - "emittedFollows": "Emitted library follows" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" + "totalUsers": "Total users" } }, - "notApplicable": "N/A" + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } }, "DomainsList": { - "title": "Domains", + "button": { + "add": "Add" + }, "header": { "domains": "Domains", "failure": "Error while creating domain" @@ -3864,18 +3864,12 @@ "addDomain": "Add a domain", "addToAllowList": "Add to allow-list" }, - "button": { - "add": "Add" - } + "title": "Domains" }, "ReportsList": { - "title": "Reports", "header": { "reports": "Reports" }, - "placeholder": { - "search": "Search by account, summary, domain…" - }, "label": { "search": "Search", "status": "Status" @@ -3888,19 +3882,19 @@ } }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by account, summary, domain…" + }, + "title": "Reports" }, "RequestsList": { - "title": "User Requests", - "placeholder": { - "search": "Search by username" - }, "header": { "userRequests": "User Requests" }, @@ -3911,31 +3905,35 @@ "option": { "status": { "all": "All", - "pending": "Pending", "approved": "Approved", + "pending": "Pending", "refused": "Refused" } }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by username" + }, + "title": "User Requests" } }, "users": { "Base": { - "title": "Manage users", + "link": { + "invitations": "Invitations", + "users": "Users" + }, "menu": { "secondary": "Secondary menu" }, - "link": { - "users": "Users", - "invitations": "Invitations" - } + "title": "Manage users" } } }, @@ -3946,7 +3944,6 @@ } }, "EmailConfirm": { - "title": "Confirm your e-mail address", "header": { "failure": "Could not confirm your e-mail address", "success": "E-mail address confirmed" @@ -3960,22 +3957,22 @@ }, "message": { "success": "You can now use the service without limitations" - } + }, + "title": "Confirm your e-mail address" }, "Login": { - "title": "Log in", "header": { "login": "Log in to your Funkwhale account" - } + }, + "title": "Log in" }, "PasswordReset": { - "title": "Reset your password", - "placeholder": { - "email": "Enter the e-mail address linked to your account" + "button": { + "requestReset": "Ask for a password reset" }, "header": { - "reset": "Reset your password", - "failure": "Error while asking for a password reset" + "failure": "Error while asking for a password reset", + "reset": "Reset your password" }, "help": { "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." @@ -3986,174 +3983,175 @@ "link": { "back": "Back to login" }, - "button": { - "requestReset": "Ask for a password reset" - } + "placeholder": { + "email": "Enter the e-mail address linked to your account" + }, + "title": "Reset your password" }, "PasswordResetConfirm": { - "title": "Change your password", + "button": { + "update": "Update your password" + }, "header": { "failure": "Error while changing your password", "success": "Password updated successfully" }, - "message": { - "success": "Your password has been updated successfully.", - "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes." + "label": { + "newPassword": "New password" }, "link": { "back": "Back to login", "login": "Proceed to login" }, - "label": { - "newPassword": "New password" + "message": { + "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", + "success": "Your password has been updated successfully." }, - "button": { - "update": "Update your password" - } + "title": "Change your password" }, "Plugins": { "title": "Manage plugins" }, "ProfileActivity": { "header": { - "recentlyListened": "Recently listened", + "playlists": "Playlists", "recentlyFavorited": "Recently favorited", - "playlists": "Playlists" + "recentlyListened": "Recently listened" } }, "ProfileBase": { - "title": "{username}'s profile", - "link": { - "domainView": "View on {domain}", - "moderation": "Open in moderation interface", - "overview": "Overview", - "activity": "Activity" - }, "label": { "self": "This is you!" - } + }, + "link": { + "activity": "Activity", + "domainView": "View on {domain}", + "moderation": "Open in moderation interface", + "overview": "Overview" + }, + "title": "{username}'s profile" }, "ProfileOverview": { - "header": { - "libraries": "User Libraries", - "channels": "Channels", - "sharedLibraries": "This user shared the following libraries" + "button": { + "cancel": "Cancel", + "createChannel": "Create channel", + "next": "Next step", + "previous": "Previous step" }, - "modal": { - "createChannel": { - "header": "Create channel", - "podcast": { - "header": "Podcast channel" - }, - "artist": { - "header": "Artist channel" - } - } + "header": { + "channels": "Channels", + "libraries": "User Libraries", + "sharedLibraries": "This user shared the following libraries" }, "link": { "addNew": "Add New" }, - "button": { - "cancel": "Cancel", - "previous": "Previous step", - "next": "Next step", - "createChannel": "Create channel" + "modal": { + "createChannel": { + "artist": { + "header": "Artist channel" + }, + "header": "Create channel", + "podcast": { + "header": "Podcast channel" + } + } } }, "Signup": { - "title": "Sign up", "header": { "createAccount": "Create a Funkwhale account" - } + }, + "title": "Sign up" } }, "channels": { "DetailBase": { - "title": "Channel", - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks", - "subscribers": "No subscribers | {n} subscriber | {n} subscribers", - "listenings": "No listenings | {n} listening | {n} listenings" + "button": { + "cancel": "Cancel", + "confirm": "Delete", + "delete": "Delete…", + "edit": "Edit…", + "embed": "Embed", + "play": "Play", + "updateChannel": "Update channel", + "upload": "Upload" }, "header": { - "podcastChannel": "Podcast channel", - "artistChannel": "Artist channel" + "artistChannel": "Artist channel", + "podcastChannel": "Podcast channel" + }, + "link": { + "channelEpisodes": "All episodes", + "channelOverview": "Overview", + "channelTracks": "Tracks", + "domainView": "View on {domain}", + "mirrored": "Mirrored from {domain}", + "moderation": "Open in moderation interface" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "listenings": "No listenings | {n} listening | {n} listenings", + "subscribers": "No subscribers | {n} subscriber | {n} subscribers", + "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { - "subscribe": { - "header": "Subscribe to this channel", - "funkwhale": { - "header": "Subscribe on Funkwhale" - }, - "rss": { - "header": "Subscribe via RSS", - "content": { - "help": "Copy paste the following URL in your favorite podcatcher:" - } - }, - "fediverse": { - "header": "Subscribe on the Fediverse", - "content": { - "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" - } - } - }, "delete": { - "header": "Delete this Channel?", "content": { "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." - } + }, + "header": "Delete this Channel?" }, "embed": { "header": "Embed this artist work on your website" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" + }, + "header": "Subscribe on the Fediverse" + }, + "funkwhale": { + "header": "Subscribe on Funkwhale" + }, + "header": "Subscribe to this channel", + "rss": { + "content": { + "help": "Copy paste the following URL in your favorite podcatcher:" + }, + "header": "Subscribe via RSS" + } } }, - "button": { - "cancel": "Cancel", - "embed": "Embed", - "edit": "Edit…", - "delete": "Delete…", - "upload": "Upload", - "play": "Play", - "updateChannel": "Update channel", - "confirm": "Delete" - }, - "link": { - "domainView": "View on {domain}", - "moderation": "Open in moderation interface", - "mirrored": "Mirrored from {domain}", - "channelOverview": "Overview", - "channelEpisodes": "All episodes", - "channelTracks": "Tracks" - } + "title": "Channel" }, "DetailOverview": { "header": { - "uploadsSuccess": "Uploads published successfully", - "uploadsFailure": "Some uploads couldn't be published", - "uploadsProcessing": "Uploads are being processed", + "albums": "Albums", "latestEpisodes": "Latest episodes", "latestTracks": "Latest tracks", "series": "Series", - "albums": "Albums" - }, - "meta": { - "progress": "Processed uploads: {finished}/{total}" + "uploadsFailure": "Some uploads couldn't be published", + "uploadsProcessing": "Uploads are being processed", + "uploadsSuccess": "Uploads published successfully" }, "link": { - "skippedUploads": "View skipped uploads", + "addAlbum": "Add new", "erroredUploads": "View errored uploads", - "addAlbum": "Add new" + "skippedUploads": "View skipped uploads" }, "message": { "processing": "Your uploads are being processed by Funkwhale and will be live very soon." + }, + "meta": { + "progress": "Processed uploads: {finished}/{total}" } }, "SubscriptionsList": { - "title": "Subscribed Channels", - "placeholder": { - "search": "Filter by name…" + "button": { + "cancel": "Cancel", + "subscribe": "Subscribe" }, "link": { "addNew": "Add new" @@ -4163,58 +4161,58 @@ "header": "Subscription" } }, - "button": { - "cancel": "Cancel", - "subscribe": "Subscribe" - } + "placeholder": { + "search": "Filter by name…" + }, + "title": "Subscribed Channels" } }, "content": { "Base": { - "title": "Add content", - "menu": { - "secondary": "Secondary menu" - }, "link": { "libraries": "Libraries", "tracks": "Tracks" - } + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Add content" }, "Home": { - "title": "Add and manage content", - "help": { - "uploadQuota": "This instance offers up to {quota} of storage space for every user." - }, - "header": { - "channel": "Publish your work in a channel", - "upload": "Upload third-party content in a library", - "follow": "Follow remote libraries" + "button": { + "start": "Get started" }, "description": { "channel": { "1": "If you are a musician or a podcaster, channels are designed for you!", "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." }, - "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family.", - "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner." + "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", + "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." }, - "button": { - "start": "Get started" - } + "header": { + "channel": "Publish your work in a channel", + "follow": "Follow remote libraries", + "upload": "Upload third-party content in a library" + }, + "help": { + "uploadQuota": "This instance offers up to {quota} of storage space for every user." + }, + "title": "Add and manage content" }, "libraries": { "Card": { - "label": { - "size": "Total size of the files in this library" - }, - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - }, "button": { "upload": "Upload" }, + "label": { + "size": "Total size of the files in this library" + }, "link": { "details": "Library Details" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" } }, "FilesTable": { @@ -4222,64 +4220,61 @@ "delete": "Delete", "restartImport": "Restart import" }, - "placeholder": { - "search": "Search by domain, title, artist, album…" - }, "button": { "showStatus": "Show information about the upload status for this track" }, - "label": { - "search": "Search", - "importStatus": "Import status" - }, - "option": { - "status": { - "all": "All", - "draft": "Draft", - "pending": "Pending", - "skipped": "Skipped", - "failed": "Failed", - "finished": "Finished" - } - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "empty": { "noTracks": "No tracks have been added to this libray yet" }, - "table": { - "file": { - "header": { - "title": "Title", - "artist": "Artist", - "album": "Album", - "uploadDate": "Upload date", - "importStatus": "Import status", - "duration": "Duration", - "size": "Size" - } + "label": { + "importStatus": "Import status", + "search": "Search" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "All", + "draft": "Draft", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" } }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, title, artist, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artist", + "duration": "Duration", + "importStatus": "Import status", + "size": "Size", + "title": "Title", + "uploadDate": "Upload date" + } + } + } }, "Form": { - "placeholder": { - "description": "This library contains my personal music, I hope you like it.", - "name": "My awesome library" - }, - "message": { - "libraryUpdated": "Library updated", - "libraryCreated": "Library created", - "libraryDeleted": "LIbrary deleted" + "button": { + "confirm": "Delete library", + "create": "Create library", + "delete": "Delete", + "update": "Update library" }, "description": { "library": "Libraries help you organize and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", @@ -4289,154 +4284,157 @@ "failure": "Error" }, "label": { - "name": "Name", "description": "Description", + "name": "Name", "visibility": "Visibility" }, - "button": { - "update": "Update library", - "create": "Create library", - "delete": "Delete", - "confirm": "Delete library" + "message": { + "libraryCreated": "Library created", + "libraryDeleted": "LIbrary deleted", + "libraryUpdated": "Library updated" }, "modal": { "delete": { - "header": "Delete this library?", "content": { "warning": "The library and all its tracks will be deleted. This can not be undone." - } + }, + "header": "Delete this library?" } + }, + "placeholder": { + "description": "This library contains my personal music, I hope you like it.", + "name": "My awesome library" } }, "Home": { - "loading": { - "libraries": "Loading libraries…" + "empty": { + "noLibrary": "Looks like you don't have a library, it's time to create one." }, "header": { "libraries": "My libraries" }, - "empty": { - "noLibrary": "Looks like you don't have a library, it's time to create one." - }, "link": { "createLibrary": "Create a new library" + }, + "loading": { + "libraries": "Loading libraries…" } }, "Quota": { + "button": { + "purge": "Purge" + }, "header": { "currentUsage": "Current usage" }, - "loading": { - "currentUsage": "Loading usage data…" - }, "label": { - "percentUsed": "{progress}%", "currentUsage": "{amount} used on {max} allowed", - "skipped": "Skipped files", "errored": "Errored files", - "pending": "Pending files" + "pending": "Pending files", + "percentUsed": "{progress}%", + "skipped": "Skipped files" }, "link": { "viewFiles": "View files" }, - "button": { - "purge": "Purge" + "loading": { + "currentUsage": "Loading usage data…" }, "modal": { - "purgePending": { - "header": "Purge pending files?", - "content": { - "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." - } - }, - "purgeSkipped": { - "header": "Purge skipped files?", - "content": { - "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." - } - }, "purgeErrored": { - "header": "Purge errored files?", "content": { "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." - } + }, + "header": "Purge errored files?" + }, + "purgePending": { + "content": { + "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." + }, + "header": "Purge pending files?" + }, + "purgeSkipped": { + "content": { + "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." + }, + "header": "Purge skipped files?" } } } }, "remote": { "Card": { - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely" - }, - "message": { - "scanSkipped": "Scan skipped (previous scan is too recent)", - "scanLaunched": "Scan launched" + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "pending": "Follow request pending approval", + "unfollow": "Unfollow" }, "error": { "follow": "Cannot follow remote library: {error}", "unfollow": "Cannot unfollow remote library: {error}" }, - "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "lastUpdate": "Last update: ", - "failedTracks": "Failed tracks: {tracks}" - }, - "button": { - "follow": "Follow", - "pending": "Follow request pending approval", - "cancel": "Cancel follow request", - "unfollow": "Unfollow" - }, - "link": { - "scanDetails": "Details", - "scan": "Scan now " - }, "label": { - "sharingLink": "Sharing link", + "scanFailure": "Problem during scanning", + "scanPartialSuccess": "Scanned with errors", "scanPending": "Scan pending", "scanProgress": "Scanning ({progress})", - "scanFailure": "Problem during scanning", "scanSuccess": "Scanned", - "scanPartialSuccess": "Scanned with errors" + "sharingLink": "Sharing link" + }, + "link": { + "scan": "Scan now", + "scanDetails": "Details" + }, + "message": { + "scanLaunched": "Scan launched", + "scanSkipped": "Scan skipped (previous scan is too recent)" + }, + "meta": { + "failedTracks": "Failed tracks: {tracks}", + "lastUpdate": "Last update: ", + "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { "unfollow": { - "header": "Unfollow this libary?", "content": { "warning": "By unfollowing this library, you loose access to its content." - } + }, + "header": "Unfollow this libary?" } + }, + "tooltip": { + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" } }, "Home": { - "loading": { - "remoteLibraries": "Loading remote libraries…" - }, - "header": { - "remoteLibraries": "Remote libraries", - "knownLibraries": "Known libraries" + "button": { + "refresh": "Refresh" }, "description": { "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." }, - "button": { - "refresh": "Refresh" + "header": { + "knownLibraries": "Known libraries", + "remoteLibraries": "Remote libraries" + }, + "loading": { + "remoteLibraries": "Loading remote libraries…" } }, "ScanForm": { - "placeholder": { - "url": "Enter a library URL" - }, "button": { "submit": "Submit search" }, + "header": { + "failure": "Could not fetch remote library" + }, "label": { "search": "Search a remote library" }, - "header": { - "failure": "Could not fetch remote library" + "placeholder": { + "url": "Enter a library URL" } } } @@ -4444,174 +4442,174 @@ "library": { "DetailAlbums": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "DetailOverview": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "DetailTracks": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "Edit": { - "header": { - "libraryContents": "Library contents", - "followers": "Followers" - }, "button": { "accept": "Accept", "reject": "Reject" }, + "empty": { + "noFollowers": "Nobody is following this library" + }, + "header": { + "followers": "Followers", + "libraryContents": "Library contents" + }, "loading": { "followers": "Loading followers…" }, "table": { "action": { "header": { - "user": "User", + "action": "Action", "date": "Date", "status": "Status", - "action": "Action" + "user": "User" }, "status": { - "pending": "Pending approval", "accepted": "Accepted", + "pending": "Pending approval", "rejected": "Rejected" } } - }, - "empty": { - "noFollowers": "Nobody is following this library" } }, "LibraryBase": { - "title": "Library", - "label": { - "private": "Private", - "instance": "Restricted", - "public": "Public", - "sharingLink": "Sharing link" - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "instance": "This library is restricted to users on this pod only", - "public": "This library is public and you can access its content freely" + "button": { + "edit": "Edit", + "upload": "Upload" }, "description": { "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." }, + "label": { + "instance": "Restricted", + "private": "Private", + "public": "Public", + "sharingLink": "Sharing link" + }, "link": { + "albums": "Albums", + "artists": "Artists", "domain": "View on {domain}", "moderation": "Open in moderation interface", "owner": "Owned by {username}", - "artists": "Artists", - "albums": "Albums", "tracks": "Tracks" }, "meta": { "tracks": "No tracks | {n} track | {n} tracks" }, - "button": { - "upload": "Upload", - "edit": "Edit" + "title": "Library", + "tooltip": { + "instance": "This library is restricted to users on this pod only", + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" } } }, "playlists": { "Detail": { - "title": "Playlist", - "meta": { - "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" + "button": { + "cancel": "Cancel", + "confirm": "Delete playlist", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "playAll": "Play all", + "stopEdit": "Stop Editing" + }, + "empty": { + "noTracks": "There are no tracks in this playlist yet" }, "header": { "tracks": "Tracks" }, - "button": { - "playAll": "Play all", - "stopEdit": "Stop Editing", - "edit": "Edit", - "embed": "Embed", - "delete": "Delete", - "cancel": "Cancel", - "confirm": "Delete playlist" + "meta": { + "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" }, "modal": { "delete": { - "header": "Do you want to delete the playlist {playlist}?", "content": { "warning": "This will completely delete this playlist and cannot be undone." - } + }, + "header": "Do you want to delete the playlist {playlist}?" }, "embed": { "header": "Embed this playlist on your website" } }, - "empty": { - "noTracks": "There are no tracks in this playlist yet" - } + "title": "Playlist" }, "List": { - "header": { - "playlists": "Playlists", - "browse": "Browsing playlists" - }, - "placeholder": { - "search": "Enter playlist name…" - }, "button": { - "manage": "Manage your playlists", "create": "Create a playlist", + "manage": "Manage your playlists", "search": "Search" }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing playlists", + "playlists": "Playlists" + }, "label": { "search": "Search" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" + "placeholder": { + "search": "Enter playlist name…" } } }, "radios": { "Detail": { - "title": "Radio", + "button": { + "confirm": "Delete radio", + "delete": "Delete", + "edit": "Edit…" + }, + "empty": { + "noTracks": "No tracks have been hadded to this radio yet" + }, "header": { "radio": "Radio containing {tracks} tracks, by ", "tracks": "Tracks" }, - "button": { - "edit": "Edit…", - "delete": "Delete", - "confirm": "Delete radio" - }, "modal": { "delete": { - "header": "Do you want to delete the radio {radio}?", "content": { "warning": "This will completely delete this radio and cannot be undone." - } + }, + "header": "Do you want to delete the radio {radio}?" } }, - "empty": { - "noTracks": "No tracks have been hadded to this radio yet" - } + "title": "Radio" } } } diff --git a/front/src/locales/eu.json b/front/src/locales/eu.json index b511d46be..3600f4b25 100644 --- a/front/src/locales/eu.json +++ b/front/src/locales/eu.json @@ -1,1431 +1,66 @@ { + "App": { + "loading": "Kargatzen…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app }-(e)k zure Funkwhale kontura sartu nahi du", - "authorize": "Baimendu hirugarrenen aplikazioa", - "authorizeFailure": "Errorea aplikazioa baimentzerakoan", - "fetchFailure": "Errorea aplikazioaren datuak eskuratzerakoan", - "allScopes": "Sarbide osoa", - "readOnly": "Irakurtzeko soilik", - "writeOnly": "Idazteko soilik" - }, - "title": "Baimendu aplikazioa", - "button": { - "authorize": "Baimendu { app }" - }, - "help": { - "pasteCode": "Kopiatu eta itsatsi honako kodea aplikazioan:", - "redirect": "{ 0 }(e)ra birbideratua izango zara", - "copyCode": "Aplikazioan kopiatu eta itsasteko kodea erakutsiko zaizu." - }, - "message": { - "unknownPermissions": "Aplikazioak ondorengo baimen ezezagunak ere eskatzen ari da:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Sarbidea desgaituta", - "passwordUpdated": "Pasahitza eguneratuta", - "unavailable": "Subsonic APIa ez dago erabilgarri Funkwhale instantzia honetan." - }, - "button": { - "confirmDisable": "Sarbidea ezgaitu", - "disable": "Subsonic sarbidea ezgaitu", - "newPassword": "Eskatu pasahitz berria", - "confirmNewPassword": "Eskatu pasahitza" - }, - "modal": { - "disableSubsonic": { - "header": "Subsonic API sarbidea ezgaitu?", - "content": { - "warning": "Honek guztiz desgaituko du Subsonic APIrako sarbidea kontu honetatik." - } - }, - "newPassword": { - "header": "Eskatu Subsonic API pasahitz berria?", - "content": { - "warning": "Honek uneko pasahitza erabiltzen duten gailuetako zure saioak amaituko ditu." - } - } - }, - "link": { - "apps": "Ezagutu nola erabili Funkwhale beste aplikazio batzuetatik" - }, - "header": { - "error": "Errorea", - "subsonic": "Subsonic API pasahitza" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin bateragarria da.", - "paragraph3": "Hala ere, bezero horietatik Funkwhalera sarbidea lortzeko behean ezar dezakezun aparteko pasahitz bat behar duzu.", - "paragraph2": "Zure zerrendak eta musika lineaz kanpo gozatzeko erabil ditzakezu, adibidez, zure mugikor edo tabletan." - } - }, - "label": { - "subsonicField": "Zure Subsonic API pasahitza" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Sarbide tokena", - "appId": "Aplikazioaren IDa", - "appSecret": "Aplikazioaren sekretua" - }, - "header": { - "appDetails": "Aplikazioaren xehetasunak", - "editApp": "Editatu aplikazioa" - }, - "help": { - "appDetails": "Aplikazioaren IDa eta sekretua balio sentikorrak dira eta pasahitz gisa tratatu behar dira. Ez partekatu beste inorrekin." - }, - "link": { - "settings": "Itzuli ezarpenetara" - }, - "title": "Editatu aplikazioa", - "button": { - "regenerateToken": "Birsortu tokena" - } - }, - "Settings": { - "title": "Kontuaren ezarpenak", - "header": { - "accountSettings": "Kontuaren ezarpenak", - "authorizedApps": "Baimendutako aplikazioak", - "avatar": "Irudia", - "changeEmail": "Aldatu nire eposta helbidea", - "changePassword": "Nire pasahitza aldatu", - "contentFilters": "Edukien iragazkiak", - "deleteAccount": "Ezabatu nire kontua", - "hiddenArtists": "Ezkutuko artistak", - "plugins": "Pluginak", - "settingsUpdated": "Ezarpenak eguneratuta", - "emailFailure": "Ezin dugu zure eposta helbidea aldatu", - "accountFailure": "Ezin dugu zure kontua ezabatu", - "noApps": "Ez daukazu kontuari konektatutako aplikaziorik.", - "noPersonalApps": "Ez daukazu aplikaziorik erregistratuta oraindik.", - "yourApps": "Zure aplikazioak", - "avatarFailure": "Zure avatarra ezin da gorde", - "passwordFailure": "Zure pasahitza ezin da aldatu", - "updateFailure": "Zure ezarpenak ezin dira eguneratu" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplikazioa", - "permissions": "Baimenak" - } - }, - "yourApps": { - "header": { - "application": "Aplikazioa", - "creationDate": "Sortze data", - "scopes": "Esparruak" - } - }, - "artists": { - "header": { - "creationDate": "Sortze data", - "name": "Izena" - } - } - }, - "label": { - "avatar": "Irudia", - "currentPassword": "Uneko pasahitza", - "newEmail": "Eposta helbide berria", - "newPassword": "Pasahitz berria", - "password": "Pasahitza" - }, - "button": { - "password": "Pasahitza aldatu", - "delete": "Ezabatu", - "deleteAccountConfirm": "Ezabatu nire kontua", - "deleteAccount": "Ezabatu nire kontua…", - "disableSubsonic": "Sarbidea ezgaitu", - "edit": "Editatu", - "refresh": "Freskatu", - "remove": "Kendu", - "removeApp": "Kendu aplikazioa", - "revoke": "Ezeztatu", - "revokeAccess": "Ezeztatu sarbidea", - "update": "Eguneratu", - "updateSettings": "Eguneratu ezarpenak" - }, - "description": { - "changeEmail": "Aldatu zure kontuarekin lotutako eposta helbidea. Berrespena bidaliko dizugu helbide berrira.", - "changePassword": { - "paragraph1": "Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat eskatuta baduzu.", - "paragraph2": "Pasahitz hau erabiltzen duten bezeroetan pasahitza eguneratu beharko duzu." - }, - "contentFilters": "Edukiaren iragazkiek zerbitzuan ikusi nahi ez duzun edukia ezkutatzen lagunduko dizute.", - "authorizedApps": "Hau da zure kontuaren datuetara sarbidea duten aplikazioen zerrenda.", - "yourApps": "Hau da erregistratu dituzun aplikazioen zerrenda.", - "plugins": "Erabili pluginak Funkwhale hedatu eta ezaugarri gehigarriak lortzeko.", - "deleteAccount": "Beheko formularioa erabiliz zure kontua eta erlazionatutako datu guztiak ezabatu ditzakezu behin betiko eta atzera bueltarik gabe. Berresteko eskatuko zaizu." - }, - "modal": { - "changePassword": { - "header": "Zure pasahitza aldatu?", - "content": { - "warning": "Pasahitza aldatzeak hurrengo ondorioak izango ditu:", - "logout": "Saio hau amaituko zaizu eta berriarekin hasi beharko duzu", - "subsonic": "Zure Subsonic pasahitza ausazko pasahitz batekin ordezkatuko da, Subsonic pasahitz zaharra erabiltzen duten gailuetan saioa amaituz" - } - }, - "deleteAccount": { - "header": "Zure kontua ezabatu nahi duzu?", - "content": { - "warning": "Hau ezin da desegin eta datuak behin betiko ezabatuko ditu gure zerbitzarietatik. Berehala zure saioa amaitu da." - } - }, - "deleteApp": { - "header": "\"{ application }\" aplikazioa kendu?", - "content": { - "warning": "Honek behin betiko ezabatuko ditu aplikazioa eta erlazionatutako token guztiak." - } - }, - "revokeApp": { - "header": "\"{ application }\" aplikazioaren sarbidea ezeztatu?", - "content": { - "warning": "Honek eragotzi egingo dio aplikazio honi zerbitzura zure izenean sartzea." - } - } - }, - "help": { - "noApps": "Hirugarrengoen aplikazioei zure datuetarako sarbidea baimentzen badiezu, aplikazio horiek hemen zerrendatuko dira.", - "changePassword": "Mesedez egiaztatu bi aldiz pasahitza zuzena dela", - "noPersonalApps": "Erregistratu bat Funkwhale hirugarrenen aplikazioekin integratzeko." - }, - "link": { - "managePlugins": "Kudeatu pluginak", - "newApp": "Erregistratu aplikazio berri bat" - }, - "warning": { - "deleteAccount": "Zure kontua gure zerbitzarietatik ezabatuko da minutu batzuk barru. Zure datuen kopia eduki dezaketen beste zerbitzariei ere ezabatzeko jakinaraziko diegu. Kontuan izan zerbitzari batzuk lineaz kanpo egon daitezkeela edo ez dutela eskaera osatu nahiko." - }, - "message": { - "currentEmail": "Zure uneko eposta helbidea { email } da.", - "confirmDelete": "Zure ezabatze eskaera bidali da, zure kontua eta edukia laster ezabatuko dira" - } - }, - "Logout": { - "header": { - "confirm": "Ziur al zaude saioa itxi nahi duzula?", - "unauthenticated": "Une honetan ez duzu saioa hasita" - }, - "link": { - "login": "Hasi saioa!" - }, - "title": "Amaitu saioa", - "button": { - "logout": "Bai, amaitu saioa!" - }, - "message": { - "loggedIn": "{ username } moduan saioa hasita" - } - }, - "ApplicationNew": { - "link": { - "settings": "Itzuli ezarpenetara" - }, - "title": "Sortu aplikazio berri bat" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Gurasoek \"Irakurri\" edo \"Idatzi\" esparruak egiaztatzeak dagozkien haurren esparru guztietarako sarbidea suposatzen du.", - "read": { - "label": "Irakurri", - "description": "Soilik irakurtzeko sarbidea erabiltzailearen datuetara" - }, - "write": { - "label": "Idatzi", - "description": "Idazteko soilik sarbidea erabiltzaile datuetara" - } - }, - "name": "Izena", - "redirectUri": "Birbideratu URIa" - }, - "button": { - "create": "Sortu aplikazioa", - "update": "Eguneratu aplikazioa" - }, - "help": { - "redirectUri": "Erabili \"urn:ietf:wg:oauth:2.0:oob\" birbideratzea URI bezala zure aplikazioa ez bada webean zerbitzatzen." - }, - "header": { - "failure": "Ezin ditugu zure aldaketak gorde" - } - }, - "LoginForm": { - "link": { - "createAccount": "Sortu kontua", - "resetPassword": "Berrezarri pasahitza" - }, - "placeholder": { - "username": "Idatzi zure erabiltzaile-izena edo eposta helbidea" - }, - "help": { - "approvalRequired": "Duela gutxi erregistratu bazara, baliteke moderazio taldeak zure kontua berrikusi edo zure eposta helbidea egiaztatu arte itxaron behar izatea.", - "invalidCredentials": "Egiaztatu erabiltzaile izena eta pasahitza zuzenak direla eta ziurtatu zure eposta helbidea egiaztatu duzula." - }, - "button": { - "login": "Sartu" - }, - "label": { - "password": "Pasahitza", - "username": "Erabiltzaile-izena edo eposta helbidea" - }, - "header": { - "loginFailure": "Ezin dugu zure saioa hasi" - } - }, - "SignupForm": { - "button": { - "create": "Sortu nire kontua" - }, - "label": { - "email": "Eposta helbidea", - "password": "Pasahitza", - "username": "Erabiltzaile-izena" - }, - "placeholder": { - "email": "Idatzi zure eposta helbidea", - "invitation": "Idatzi zure gonbidapen kodea (ez ditu maiuskulak eta minuskulak bereizten)", - "username": "Idatzi zure erabiltzaile-izena" - }, - "header": { - "login": "Sartu zure Funkwhale kontura", - "signupFailure": "Ezin da zure kontua sortu." - }, - "message": { - "registrationClosed": "Izena ematea itxita dago instantzia honetan. Gonbidapen kode bat beharko duzu izena emateko.", - "requiresReview": "Instantzia honetako izen emateak irekita daude, baina moderatzaileek berrikusi behar dituzte onartu aurretik.", - "awaitingReview": "Zure kontu-eskaera arrakastaz bidali da. Eposta mezu bat jasoko duzu gure moderazio taldeak zure eskaera berrikusi duenean.", - "accountCreated": "Zure kontua arrakastaz sortu da. Egiaztatu zure eposta saio hasten saiatu aurretik." - } - }, - "Plugin": { - "link": { - "documentation": "Dokumentazioa" - }, - "label": { - "pluginEnabled": "Gaituta", - "library": "Liburutegia" - }, - "header": { - "failure": "Errorea plugina gordetzerakoan" - }, - "description": { - "library": "Fitxategiak ze liburutegitara inportatu behar diren." - }, - "button": { - "save": "Gorde", - "scan": "Eskaneatu" - } - } - }, "About": { - "stat": { - "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", - "hoursOfMusic": "ordu musika | ordu musika" + "description": { + "findApp": "Erabili Funkwhale beste gailuetan gure aplikazioekin.", + "funkwhale": "Funkwhale komunitateak bultzatutako proiektua da, eta musika eta audioa sare deszentralizatu eta ireki batean entzuteko eta partekatzeko aukera ematen du.", + "publicContent": "Entzun instantzia honetan partekatutako album eta erreprodukzio-zerrenda publikoak.", + "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!", + "signup": "Erregistratu orain zure gogokoenak jarraitzeko, erreprodukzio-zerrendak sortzeko, eduki berriak aurkitzeko eta askoz gehiago!" }, "header": { - "funkwhale": "Musikaz gozatzeko eta partekatzeko plataforma soziala", "aboutPod": "Instantzia honi buruz", - "publicContent": "Arakatu eduki publikoa", "findApp": "Bilatu aplikazio bat", + "funkwhale": "Musikaz gozatzeko eta partekatzeko plataforma soziala", + "publicContent": "Arakatu eduki publikoa", "signup": "Erregistratu" }, - "title": "Honi buruz", + "help": { + "closedRegistrations": "Izen-emateak itxita daude instantzia honetan. Beste instantzia batean eman dezakezu izena hurrengo esteka erabiliz." + }, "link": { "findOtherPod": "Bilatu beste instantzia bat", "learnMore": "Ikasi gehiago" }, - "description": { - "funkwhale": "Funkwhale komunitateak bultzatutako proiektua da, eta musika eta audioa sare deszentralizatu eta ireki batean entzuteko eta partekatzeko aukera ematen du.", - "publicContent": "Entzun pod honetan partekatutako album eta erreprodukzio-zerrenda publikoak.", - "signup": "Erregistratu orain zure gogokoenak jarraitzeko, erreprodukzio-zerrendak sortzeko, eduki berriak aurkitzeko eta askoz gehiago!", - "findApp": "Erabili Funkwhale beste gailuetan gure aplikazioekin.", - "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!" + "message": { + "greeting": "Kaixo {username}", + "loggedIn": "Saioa hasita zenuen!" }, "placeholder": { - "noDescription": "Ez dago deskribapenik eskuragarri." + "noDescription": "Ez dago azalpenik eskuragarri" }, - "message": { - "loggedIn": "Saioa hasita zenuen!" - } - }, - "Home": { "stat": { "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", - "hoursOfMusic": "Ordubete musika | { n } ordu musika" + "hoursOfMusic": "ordu musika | ordu musika" }, - "header": { - "aboutFunkwhale": "Funkwhale-ri buruz", - "about": "Funkwhale instantzia honi buruz", - "contact": "Kontaktua", - "login": "Hasi saioa", - "newChannels": "Kanal berriak", - "newAlbums": "Azken aldian gehitutako albumak", - "signup": "Erregistratu", - "statistics": "Estatistikak", - "links": "Esteka erabilgarriak", - "welcome": "Ongi etorri { podName }(e)ra!" - }, - "link": { - "publicContent": { - "label": "Arakatu eduki publikoa", - "description": "Entzun instantzia honetan partekatutako album eta erreprodukzio-zerrenda publikoak" - }, - "userGuides": { - "description": "Ezagutu Funkwhale eta bere ezaugarriei buruz jakin behar duzun guztia", - "label": "Erabiltzaile-gidak" - }, - "findOtherPod": "Bilatu beste instantzia bat", - "learnMore": "Ikasi gehiago", - "mobileApps": { - "label": "Mugikorreko aplikazioak", - "description": "Erabili Funkwhale beste gailuetan gure aplikazioekin" - }, - "rules": "Zerbitzariaren arauak", - "viewMore": "Ikusi gehiago…", - "funkwhale": "Bisitatu funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale librea eta doakoa da eta boluntario komunitate jator batek garatzen du.", - "paragraph1": "Instantzia honek Funkwhale erabiltzen du, sare ireki eta deszentralizatu batean musika eta audioak entzun eta partekatzeko aukera ematen duen komunitateak gidatutako proiektu bat." - }, - "signup": "Erregistratu orain zure gogokoen jarraipena egiteko, zerrendak sortzeko, eduki berria aurkitzeko eta asko gehiago!", - "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!" - }, - "title": "Hasiera", - "placeholder": { - "noDescription": "Ez dago deskribapenik." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - } - }, - "Widget": { - "button": { - "more": "Erakutsi gehiago" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - }, - "title": "{ date }-(e)an eguneratua" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "Saio { n } | { n } saio" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - } - }, - "Widget": { - "button": { - "more": "Erakutsi gehiago" - } - } - }, - "Player": { - "meta": { - "position": "{ index } / { length }" - }, - "header": { - "player": "Audio erreproduzigailua eta kontrolak" - }, - "label": { - "clearQueue": "Garbitu zure ilara", - "expandQueue": "Zabaldu ilara", - "addArtistContentFilter": "Ezkutatu artista honen edukia…", - "loopingDisabled": "Begizta desgaituta. Egin klik pista bakarreko begiztara aldatzeko.", - "loopingSingle": "Pista bakarreko begiztan. Egin klik ilara osoko begiztara aldatzeko.", - "loopingWholeQueue": "Ilara osoko begiztan. Egin klik begizta desgaitzeko.", - "audioPlayer": "Multimedia-erreproduzigailua", - "mute": "Isilarazi", - "nextTrack": "Hurrengo pista", - "pause": "Pausatu", - "play": "Erreproduzitu", - "previousTrack": "Aurreko pista", - "shuffleQueue": "Nahasi zure ilara", - "unmute": "Aktibatu audioa" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Gehitu uneko ilaran", - "addToPlaylist": "Gehitu erreprodukzio-zerrendan…", - "episodeDetails": "Saioaren xehetasunak", - "hideArtist": "Ezkutatu artista honen edukia", - "discretePlay": "Erreproduzitu", - "playAlbum": "Erreproduzitu albuma", - "playArtist": "Erreproduzitu artista", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "playPlaylist": "Erreproduzitu zerrenda", - "startRadio": "Erreproduzitu antzeko kantak", - "playTrack": "Erreproduzitu pista", - "playTracks": "Erreproduzitu pistak", - "report": "Salatu…", - "trackDetails": "Pistaren xehetasunak" - }, - "title": { - "more": "Gehiago…", - "unavailable": "Pista hau ez dago sarbidea duzun liburutegietan" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Gogokoetan sartu", - "addToPlaylist": "Gehitu erreprodukzio-zerrendan…", - "addToQueue": "Gehitu ilaran", - "episodeDetails": "Saioaren xehetasunak", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "startRadio": "Erreproduzitu irratia", - "removeFromFavorites": "Kendu gogokoetatik", - "trackDetails": "Pistaren xehetasunak", - "albumDetails": "Ikusi albuma", - "artistDetails": "Ikusi artista", - "channelDetails": "Ikusi kanala", - "seriesDetails": "Ikusi serieak" - } - }, - "MobileRow": { - "button": { - "actions": "Erakutsi pistako ekintzak" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Gogokoetan sartu", - "addToPlaylist": "Gehitu erreprodukzio-zerrendan…", - "addToQueue": "Gehitu ilaran", - "episodeDetails": "Saioaren xehetasunak", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "startRadio": "Erreproduzitu irratia", - "removeFromFavorites": "Kendu gogokoetatik", - "trackDetails": "Pistaren xehetasunak", - "albumDetails": "Ikusi albuma", - "artistDetails": "Ikusi artista", - "channelDetails": "Ikusi kanala", - "seriesDetails": "Ikusi serieak" - } - }, - "Table": { - "table": { - "header": { - "album": "Albuma", - "artist": "Artista", - "title": "Izenburua" - } - } - }, - "Widget": { - "empty": { - "noResults": "Ez da ezer aurkitu" - }, - "button": { - "more": "Erakutsi gehiago" - } - }, - "MobileRow": { - "button": { - "actions": "Erakutsi pistako ekintzak" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Doitu bolumena" - }, - "button": { - "mute": "Isilarazi", - "unmute": "Aktibatu audioa" - } - }, - "SearchBar": { - "label": { - "album": "Albuma", - "artist": "Artista", - "category": { - "federation": "Federazioa", - "podcasts": "Podcastak" - }, - "search": "Bilatu edukia", - "tag": "Etiketa", - "track": "Pista" - }, - "link": { - "more": "Emaitza gehiago 🡒", - "fediverse": "Bilatu fedibertsoan", - "rss": "Harpidetu podcastera RSS bidez" - }, - "header": { - "noResults": "Ez da bat datorren emaitzarik aurkitu" - }, - "placeholder": { - "search": "Bilatu artistaren, albumaren, pisten… arabera" - }, - "empty": { - "noResults": "Sentitzen dugu, ez dago emaitzarik bilaketa honentzat" - } - }, - "Search": { - "header": { - "albums": "Albumak", - "artists": "Artistak", - "search": "Bilatu musika pixka bat" - }, - "placeholder": { - "search": "Artista, albuma, pista …" - }, - "empty": { - "noAlbums": "Ez dago zure bilaketarekin bat datorren albumik", - "noArtists": "Ez dago zure bilaketarekin bat datorren artistarik" - } - }, - "ChannelForm": { - "label": { - "discography": "Artistaren diskografia", - "category": "Kategoria", - "image": "Kanalaren irudia", - "description": "Deskribapena", - "username": "Fedibertsoko izena", - "language": "Hizkuntza", - "name": "Izena", - "email": "Jabearen eposta helbidea", - "owner": "Jabearen izena", - "podcast": "Podcastak", - "subcategory": "Azpikategoria", - "tags": "Etiketak" - }, - "placeholder": { - "name": "Kanalaren izen bikaina", - "username": "kanalarenizenbikaina" - }, - "header": { - "error": "Errorea kanala gordetzerakoan" - }, - "help": { - "podcast": "Ostatatu zure saioak eta mantendu zure komunitatea eguneratuta.", - "discography": "Argitaratu zuk egindako musika album eta singlez osatutako diskografia eder batean.", - "podcastFields": "Spotify edo iTunes bezalako plataforma batzuetako itunes:email eta itune:name eremuetan erabiltzen da.", - "username": "URLetan eta kanal hau Fedibertsoan jarraitzeko erabiltzen da. Ezin duzu aldatu aurrerago." - }, - "loader": { - "loading": "Kargatzen" - }, - "legend": { - "purpose": "Zertarako erabiliko da kanal hau?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Utzi jarraitzeko eskaera", - "follow": "Jarraitu", - "unfollow": "Utzi jarraitzeari" - } - }, - "EmbedWizard": { - "button": { - "copy": "Kopiatu" - }, - "help": { - "embed": "Kopiatu eta itsatsi kode hau zure webguneko HTMLan", - "width": "Utzi hutsik widget moldagarrirako", - "anonymous": "Jarri zure administratzaileekin harremanetan eta eskatu dagokion ezarpena eguneratzeko." - }, - "label": { - "embed": "Txertatu kodea", - "height": "Widgetaren altuera", - "width": "Widgetaren zabalera" - }, - "header": { - "preview": "Aurrebista" - }, - "warning": { - "anonymous": "Partekatzeak ez du funtzionatuko instantzia honek ez duelako onartzen erabiltzaile anonimoek edukira sarbidea izatea." - }, - "message": { - "copy": "Testua arbelera kopiatu da!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Erakutsi gehiago" - }, - "help": { - "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Erakutsi gehiago" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "addDescription": "Gehitu deskribapena…" - } - }, - "ArtistBase": { - "title": "Artista", - "button": { - "cancel": "Ezeztatu", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiago…", - "play": "Erreproduzitu album denak" - }, - "modal": { - "embed": { - "header": "Txertatu artista honen lana zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "wikipedia": "Bilatu Wikipedian", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n", - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "Pista { n } dator bat iragazki konbinatuekin | { n } pista datoz bat iragazki konbinatuekin", - "builder": "Eraikitzailea", - "created": "Irratia sortuta", - "updated": "Irratia eguneratuta" - }, - "table": { - "filter": { - "header": { - "actions": "Akzioak", - "candidates": "Hautagaiak", - "config": "Konfigurazioa", - "exclude": "Baztertu", - "name": "Iragazkiaren izena" - } - } - }, - "button": { - "filter": "Iragazkia sortu", - "save": "Gorde" - }, - "label": { - "filter": "Iragazkiak sortu zure irratia pertsonalizatzeko", - "description": "Deskribapena", - "public": "Erakutsi publikoki", - "name": "Irratiaren izena" - }, - "placeholder": { - "description": "Nire deskribapen txundigarria", - "name": "Nire irrati txundigarria" - }, - "title": "Irrati eraikitzailea", - "option": { - "filter": "Aukeratu filtroa" - }, - "description": { - "builder": "Zure irizpidearen araberako pistak erreproduzituko dituen irrati pertsonalizatua sortu dezakezu interfaze honekin." - } - }, - "Filter": { - "cancelButton": "Ezeztatu", - "excludeLabel": "Baztertu", - "removeButton": "Kendu", - "matchingTracksModalHeader": "Iragazkiarekin bat datozen pistak" - } - }, - "FileUpload": { - "tooltip": { - "network": "Sare-errorea eman da fitxategi hau igotzerakoan", - "size": "Ezin da fitxategi hau igo, ziurtatu ez dela handiegia", - "extension": "Fitxategi-mota baliogabea, ziurtatu igotzen ari zarena audio-fitxategi bat dela. Onartzen diren fitxategi-luzapenak: { extensions }", - "retry": "Saiatu berriro", - "denied": "Igoera ukatuta, ziurtatu fitxategia ez dela handiegia eta ez zarela zure mugara iritsi", - "timeout": "Igoeraren denbora-muga, mesedez saiatu berriro" - }, - "table": { - "upload": { - "header": { - "actions": "Ekintzak", - "filename": "Fitxategi-izena", - "size": "Tamaina", - "status": "Egoera" - }, - "status": { - "pending": "Zain", - "uploaded": "Igota", - "uploading": "Igotzen…" - } - } - }, - "button": { - "cancel": "Ezeztatu", - "retry": "Saiatu berriro huts egindako igoerekin" - }, - "label": { - "uploadWidget": "Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin fitxategi edo karpetak", - "remainingSpace": "Gelditzen den biltegiratze-lekua", - "extensions": "Euskarria duten hedapenak: { extensions }" - }, - "header": { - "failure": "Errorea inportazioa abiarazterakoan", - "server": "Inportazioaren egoera", - "status": "Inportatu egoera", - "local": "Igo musika zure gailutik" - }, - "link": { - "processing": "Prozesatzen", - "uploading": "Igotzen", - "picard": "Helburu horretarako Picard erabiltzea gomendatzen dugu." - }, - "description": { - "import": "Zure inportazioaren emaitzak:", - "previousImport": "Zure aurreko inportazioaren emaitzak:" - }, - "message": { - "local": { - "format": "Igotzen ari zaren audio fitxategiak OGG, Flac, MP3 edo AIFF formatuan daude", - "tag": "Igotzen ari zaren musika fitxategiak behar bezala etiketatuta daude.", - "message": "Zure liburutegira musika igotzera zoaz. Jarraitu aurretik, ziurtatu:", - "copyright": "Ez zarela ari copyright duen edukia liburutegi publiko batera igotzen, bestela legea hausten ari zara" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Zure aldaketak deskribatzen dituen laburpentxoa." - }, - "button": { - "cancel": "Ezeztatu", - "clear": "Garbitu", - "reset": "Berrezarri hasierako baliora", - "showUnreviewed": "Mugatu berrikusi gabeko edizioetara", - "showAll": "Erakutsi edizio guztiak", - "submit": "Bilatu eta aplikatu edizioa", - "new": "Bidali beste edizio bat", - "suggest": "Bidali iradokizuna" - }, - "header": { - "failure": "Errorea aldatutakoa bidaltzerakoan", - "recentEdits": "Azken aldiko edizioak", - "unreviewed": "Berrikuspenaren zain dauden azken aldiko edizioak", - "success": "Zure edizioa behar bezala bidalita." - }, - "notApplicable": "Daturik gabe", - "empty": { - "suggestEdit": "Iradoki aldaketa bat beheko formularioa erabiliz." - }, - "label": { - "summary": "Laburpena (hautazkoa)" - }, - "message": { - "noPermission": "Ez daukazu objektu hau editatzeko baimenik, baina aldaketak iradoki ditzakezu. Bidalitakoan, iradokizunak onartu aurretik berrikusiko dira." - } - }, - "Albums": { - "link": { - "addMusic": "Gehitu musikaren bat" - }, - "title": "Albumak", - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Albumak arakatzen" - }, - "placeholder": { - "search": "Idatzi albumaren izena…" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "label": { - "search": "Bilatu", - "tags": "Etiketak" - }, - "button": { - "search": "Bilatu" - } - }, - "Artists": { - "button": { - "upload": "Gehitu musikaren bat", - "search": "Bilatu" - }, - "label": { - "search": "Artistaren izena", - "excludeCompilation": "Baztertu bilduma-artistak", - "tags": "Etiketak" - }, - "title": "Artistak", - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Artistak arakatzen" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "placeholder": { - "search": "Bilatu…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Albuma", - "artist": "Artista", - "copyright": "Copyright-a", - "license": "Lizentzia", - "series": "Seriea", - "url": "URL", - "year": "Urtea" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Kodeka", - "downloads": "Deskargak", - "duration": "Iraupena", - "size": "Tamaina" - } - }, - "header": { - "episode": "Saioaren xehetasunak", - "library": "Erlazionatutako liburutegiak", - "playlists": "Erlazionatutako zerrendak", - "release": "Argitalpenaren xehetasunak", - "track": "Pistaren xehetasunak" - }, - "notApplicable": "Daturik gabe", - "description": { - "library": "Pista hau ondorengo liburutegietan dago:" - }, - "link": { - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "TagDetail": { - "link": { - "albums": "Albumak", - "artists": "Artistak", - "moderation": "Ireki moderazio interfazean" - }, - "header": { - "channels": "Kanalak", - "tracks": "Pistak" - } - }, - "ArtistDetail": { - "header": { - "album": "Artista honen albumak", - "track": "Artista honen pista berriak", - "library": "Erabiltzaileen liburutegiak" - }, - "button": { - "more": "Kargatu gehiago…", - "filter": "Kendu iragazkia" - }, - "link": { - "filter": "Berrikusi nire iragazkiak" - }, - "description": { - "library": "Artista hau ondorengo liburutegietan dago:" - }, - "message": { - "filter": "Artista honekin erlazionatutako edukia ezkutatzen ari zara une honetan." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Errore bat gertatu da igoera prozesatzean. Azpian informazio gehiago aurkituko duzu.", - "unknownError": { - "message": "Errore ezezaguna gertatu da", - "label": "Errore ezezaguna" - }, - "invalidMetadata": { - "label": "Metadatu baliogabeak", - "message": "Fitxategiaren metadatuak baliogabeak dira edo beharrezko eremuak falta dituzte." - } - }, - "button": { - "close": "Itxi" - }, - "table": { - "error": { - "debug": "Arazketa informazioa", - "errorDetail": "Errorearen xehetasuna", - "errorType": "Errore mota", - "help": "Lortu laguntza" - } - }, - "header": { - "importDetail": "Inportazioaren xehetasunak" - }, - "link": { - "support": "Ireki laguntza haria (sartu arazteko informazioa azpian, zure mezuan)", - "documentation": "Irakurri errori honi buruzko gure dokumentazioa" - }, - "message": { - "importDetail": "Igoera zain dago oraindik eta laster prozesatuko du zerbitzariak.", - "importSuccess": "Igoera behar bezala prozesatu da zerbitzarian." - }, - "warning": { - "importSkipped": "Igoera saltatu egin da zure liburutegietako batean antzeko bat badagoelako dagoeneko." - } - }, - "EditCard": { - "button": { - "approve": "Onartu", - "delete": "Ezabatu", - "reject": "Baztertu" - }, - "status": { - "approved": "Onartuta", - "applied": "Onartuta eta aplikatuta", - "pending": "Berrikuspenaren zain", - "rejected": "Baztertuta" - }, - "modal": { - "delete": { - "header": "Iradokizun hau ezabatu nahi duzu?" - }, - "content": { - "warning": "Iradokizuna guztiz ezabatuko da, ekintza hau ezin da desegin." - } - }, - "table": { - "update": { - "header": { - "field": "Eremua", - "newValue": "Balio berria", - "oldValue": "Balio zaharra" - }, - "notApplicable": "Daturik gabe" - } - }, - "header": { - "modification": "Aldaketa { id }" - }, - "link": { - "track": "Pista #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Podcastak arakatzen" - }, - "button": { - "cancel": "Ezeztatu", - "channel": "Sortu kanala", - "search": "Bilatu", - "subscribe": "Harpidetu", - "feed": "Harpidetu RSS jariora" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "label": { - "search": "Podcastaren izenburua", - "tags": "Etiketak" - }, - "title": "Podcastak", - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "placeholder": { - "search": "Bilatu…" - }, - "modal": { - "subscription": { - "header": "Harpidetza" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "header": { - "browse": "Irratiak arakatzen", - "instance": "Instantziako irratiak", - "user": "Erabiltzaileen irratiak" - }, - "button": { - "add": "Sortu irrati bat", - "create": "Sortu zure irrati propioa" - }, - "placeholder": { - "search": "Idatzi irrati baten izena …" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "title": "Irratiak", - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "label": { - "search": "Bilatu" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatu…", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiago…" - }, - "modal": { - "delete": { - "header": "Album hau ezabatu nahi duzu?", - "content": { - "warning": "Album hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu album hau zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n", - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "TrackBase": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatu…", - "download": "Deskargatu", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiago…", - "play": "Erreproduzitu" - }, - "modal": { - "delete": { - "header": "Pista hau ezabatu nahi duzu?", - "content": { - "warning": "Pista eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu pista hau zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "wikipedia": "Bilatu Wikipedian", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n" - }, - "title": "Pista" - }, - "AlbumEdit": { - "header": { - "edit": "Editatu album hau", - "suggest": "Iradoki edizio bat album honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "ArtistEdit": { - "header": { - "edit": "Editatu artista hau", - "suggest": "Iradoki edizio bat artista honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "TrackEdit": { - "header": { - "edit": "Editatu pista hau", - "suggest": "Iradoki edizio bat pista honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Saioak", - "tracks": "Pistak", - "libraries": "Erabiltzaileen liburutegiak" - }, - "description": { - "libraries": "Album hau ondorengo liburutegietan dago:" - }, - "meta": { - "volume": "{ number } bolumena" - } - }, - "FsBrowser": { - "button": { - "import": "Inportatu" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Inportazioa ez da hasi oraindik" - } - }, - "Home": { - "title": "Liburutegia", - "header": { - "newChannels": "Kanal berriak", - "playlists": "Zerrendak", - "recentlyAdded": "Azken aldian gehituta", - "recentlyFavorited": "Azken aldian gogokoa", - "recentlyListened": "Azken aldian entzuna" - } - }, - "TagSelector": { - "placeholder": { - "search": "Bilatu…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "Gogoko { n } | { n } gogoko" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "link": { - "library": "Arakatu liburutegia" - }, - "loader": { - "loading": "Zure gogokoak kargatzen…" - }, - "empty": { - "noFavorites": "Ez da pistarik gehitu oraindik zure gogokoetara" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "title": "Zure gogokoak" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Gogokoetan sartu", - "remove": "Kendu gogokoetatik" - }, - "label": { - "inFavorites": "Gogokoetan" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "Fitxategi { n } | { n } fitxategi", - "quota": "Gelditzen den biltegiratze-lekua:" - }, - "button": { - "cancel": "Ezeztatu", - "close": "Itxi", - "finishLater": "Amaitu beranduago", - "next": "Hurrengo pausoa", - "previous": "Aurreko pausoa", - "publish": "Argitaratu", - "update": "Eguneratu" - }, - "header": { - "uploadFiles": "Fitxategiak kargatzeko", - "processing": "Igoerak prozesatzen", - "publish": "Argitaratu audioa", - "uploadDetails": "Igoeraren xehetasunak" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "label": { - "album": "Albuma", - "series": "Serieak" - }, - "option": { - "none": "Bat ere ez" - } - }, - "LicenseSelect": { - "link": { - "license": "Lizentzia honi buruz" - }, - "label": { - "license": "Lizentzia" - }, - "option": { - "none": "Bat ere ez" - } - }, - "UploadForm": { - "help": { - "license": "Gehitu lizentzia zure igoerari zure entzuleei askatasun batzuk emateko." - }, - "label": { - "openBrowser": "Arakatu…", - "channel": "Kanala" - }, - "message": { - "dragAndDrop": "Arrastatu eta askatu fitxategiak hemen edo ireki nabigatzailea fitxategiak igotzeko", - "pending": "Argitaratu gabeko igoera zirriborro batzuk dauzkazu." - }, - "button": { - "edit": "Editatu", - "ignore": "Ez ikusi egin", - "remove": "Kendu", - "resume": "Berrekin", - "retry": "Saiatu berriro" - }, - "header": { - "error": "Errorea argitaratzerakoan" - }, - "status": { - "errored": "Erroreduna", - "pending": "Zain", - "uploading": "Igotzen" - }, - "description": { - "extensions": "Euskarria duten hedapenak: { extensions }" - }, - "warning": { - "quota": "Ez daukazu fitxategiak kargatzeko leku librerik. Jarri moderatzaileekin harremanetan." - } - }, - "AlbumModal": { - "button": { - "cancel": "Ezeztatu", - "create": "Sortu" - }, - "header": { - "newAlbum": "Album berria", - "newSeries": "Serie berria" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Deskribapena", - "position": "Kokapena", - "tags": "Etiketak", - "title": "Izenburua", - "image": "Pistaren irudia" - } - }, - "AlbumForm": { - "header": { - "error": "Errorea sorketan" - }, - "label": { - "albumTitle": "Izenburua" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Harpidetu", - "unsubscribe": "Kendu harpidetza" - }, - "help": { - "auth": "Saioa hasi behar duzu kanal honetara harpidetzeko" - } - } + "title": "Honi buruz" }, "AboutPod": { - "stat": { - "hoursOfMusic": "ordu musika | ordu musika", - "activeUsers": "erabiltzaile aktibo | erabiltzaile aktibo", - "albumsCount": "album | album", - "artistsCount": "artista | artista", - "listeningsCount": "entzunaldi | entzunaldiak", - "tracksCount": "pista | pista" + "feature": { + "allowList": "Baimen-zerrenda", + "anonymousAccess": "Sarbide anonimoa", + "federation": "Federazioa", + "quota": "Igoera muga", + "registrations": "Izen-emateak", + "status": { + "closed": "Itxita", + "disabled": "Desgaituta", + "enabled": "Gaituta", + "open": "Irekita" + }, + "version": "Funkwhale bertsioa" + }, + "header": { + "about": "Instantzia honi buruz", + "contact": "Kontaktua", + "features": "Ezaugarriak", + "rules": "Arauak", + "statistics": "Estatistikak", + "terms": "Erabilera baldintzak eta pribatutasun politika" }, - "title": "Honi buruz", "link": { "about": "Instantzia honi buruz", "features": "Ezaugarriak", @@ -1434,360 +69,242 @@ "statistics": "Estatistikak", "terms": "Erabilera baldintzak eta pribatutasun politika" }, - "header": { - "about": "Instantzia honi buruz", - "contact": "Kontaktua", - "features": "Ezaugarriak", - "rules": "Arauak", - "statistics": "Estatistikak", - "terms": "Erabilera baldintzak eta pribatutasun politika" - }, - "feature": { - "allowList": "Baimen-zerrenda", - "anonymousAccess": "Sarbide anonimoa", - "status": { - "closed": "Itxita", - "disabled": "Desgaituta", - "enabled": "Gaituta", - "open": "Irekita" - }, - "federation": "Federazioa", - "version": "Funkwhale bertsioa", - "registrations": "Izen-emateak", - "quota": "Igoera muga" + "message": { + "contact": "Bidal iezaguzu mezu elektroniko bat: {'{{'} contactEmail {'}}'}" }, "notApplicable": "Daturik gabe", "placeholder": { - "noDescription": "Ez dago deskribapenik eskuragarri.", - "noRules": "Ez dago araurik erabilgarri.", - "noTerms": "Ez dago baldintzarik eskuragarri." + "noDescription": "Ez dago azalpenik eskuragarri", + "noRules": "Ez dago araurik erabilgarri", + "noTerms": "Ez dago baldintzarik eskuragarri" + }, + "stat": { + "activeUsers": "erabiltzaile aktibo | erabiltzaile aktibo", + "albumsCount": "album | album", + "artistsCount": "artista | artista", + "hoursOfMusic": "ordu musika | ordu musika", + "listeningsCount": "entzunaldi | entzunaldiak", + "tracksCount": "pista | pista" + }, + "title": "Honi buruz" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Instantzia honek Funkwhale erabiltzen du, sare ireki eta deszentralizatu batean musika eta audioak entzun eta partekatzeko aukera ematen duen komunitateak gidatutako proiektu bat.", + "paragraph2": "Funkwhale librea eta doakoa da eta boluntario komunitate jator batek garatzen du." + }, + "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!", + "signup": "Erregistratu orain zure gogokoen jarraipena egiteko, zerrendak sortzeko, eduki berria aurkitzeko eta asko gehiago!" + }, + "header": { + "about": "Funkwhale instantzia honi buruz", + "aboutFunkwhale": "Funkwhale-ri buruz", + "contact": "Kontaktua", + "links": "Esteka erabilgarriak", + "login": "Hasi saioa", + "newAlbums": "Azken aldian gehitutako albumak", + "newChannels": "Kanal berriak", + "signup": "Erregistratu", + "statistics": "Estatistikak", + "welcome": "Ongi etorri { podName }(e)ra!" + }, + "help": { + "registrationsClosed": "Izen-emateak itxita daude instantzia honetan. Beste instantzia batean eman dezakezu izena hurrengo esteka erabiliz." + }, + "link": { + "findOtherPod": "Bilatu beste instantzia bat", + "funkwhale": "Bisitatu funkwhale.audio", + "learnMore": "Ikasi gehiago", + "mobileApps": { + "description": "Erabili Funkwhale beste gailuetan gure aplikazioekin", + "label": "Mugikorreko aplikazioak" + }, + "publicContent": { + "description": "Entzun instantzia honetan partekatutako album eta zerrenda publikoak.", + "label": "Arakatu eduki publikoa" + }, + "rules": "Zerbitzariaren arauak", + "userGuides": { + "description": "Ezagutu Funkwhale eta bere ezaugarriei buruz jakin behar duzun guztia", + "label": "Erabiltzaile-gidak" + }, + "viewMore": "Ikusi gehiago…" + }, + "placeholder": { + "noDescription": "Ez dago azalpenik eskuragarri" + }, + "stat": { + "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", + "hoursOfMusic": "Ordubete musika | { n } ordu musika" + }, + "title": "Hasiera" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Orrialdea ez da aurkitu!" + }, + "link": { + "home": "Joan hasiera orrira" }, "message": { - "contact": "Bidal iezaguzu mezu elektroniko bat: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Sentitzen dugu, eskatu duzun orria ez da existitzen:" + }, + "title": "Orrialdea ez da aurkitu" + }, + "Queue": { + "button": { + "clear": "Garbitu", + "close": "Itxi", + "stopRadio": "Gelditu irratia" + }, + "header": { + "failure": "Pista ezin da kargatu", + "noSources": "Pistak ez du iturburu erabilgarririk.", + "radio": "Irrati bat martxan duzu" + }, + "label": { + "addArtistContentFilter": "Ezkutatu artista honen edukia…", + "duration": "Iraupena", + "enterFullscreen": "Sartu pantaila osoa moduan", + "exitFullscreen": "Irten pantaila osoa modutik", + "favorite": "Pista gogokoa", + "next": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "populatingRadio": "Irratiaren pista lortzen…", + "previous": "Aurreko pista", + "queue": "Ilara", + "remove": "Kendu", + "restart": "Berrasi pista", + "selectTrack": "Hautatu pista", + "showCoverArt": "Erakutsi azala", + "showVisualizer": "Erakutsi MoonDrop bisualizatzailea" + }, + "message": { + "automaticPlay": "Hurrengo pista automatikoki erreproduzituko da segundo batzuk barru…", + "radio": "Abesti berriak hemen gehituko dira automatikoki.", + "webglUnsupported": "Badirudi arakatzaileak ez duela onartzen WebGL2." + }, + "meta": { + "end": "Amaiera", + "queuePosition": "Pista { index } / { length }", + "startTime": "00:00", + "unknownAlbum": "Album ezezaguna", + "unknownArtist": "Artista ezezaguna" + }, + "warning": { + "connectivity": "Konexio arazo bat izan dezakezu." } }, - "common": { - "ActionTable": { - "button": { - "selected": "Aaukeratutako { n },{ total }(e)tik | { n } aukeratutako { total }(e)tik", - "allSelected": "Elementu bakarra hautatuta | { n } elementu hautatuta", - "go": "Joan", - "launch": "Abiarazi", - "refresh": "Freskatu taularen edukia", - "select": "Hautatu", - "selectAll": "Hautatu elementu guztiak", - "selectElement": "Hautatu elementu { n } | Hautatu { n } elementuak", - "selectCurrentPage": "Aukeratu orrialde hau bakarrik" + "RemoteSearchForm": { + "button": { + "fediverse": "Fedibertsoa", + "rss": "RSS", + "search": "Bilatu" + }, + "description": { + "fediverse": "Erabili formulario hau fedibertsoan ostatatutako kanal batera harpidetzeko.", + "rss": "Erabili formulario hau RSS jario batera bere URLaren bidez harpidetzeko." + }, + "error": { + "fetchFailed": "Objektu hau ezin da berreskuratu" + }, + "header": { + "fetchFailed": "Errorea objektua eskuratzerakoan" + }, + "label": { + "fediverse": { + "fieldLabel": "Fedibertsoko objektua", + "fieldPlaceholder": "{'@'}erabiltzaile-izena{'@'}adibidea.eus", + "title": "Harpidetu Fedibertsoan ostatatutako podcast batera" }, - "message": { - "success": "{ action } ekintza arrakastaz gauzatu da elementu batean | { action } ekintza arrakastaz gauzatu da { n } elementutan", - "needsRefresh": "Edukia eguneratu da, sakatu Freskatu eduki eguneratua ikusteko" - }, - "label": { - "actions": "Akzioak", - "performAction": "Burutu ekintzak" - }, - "modal": { - "performAction": { - "header": "{ action } abiarazi nahi duzu elementu batean? | { action } abiarazi nahi duzu { n } elementutan?", - "content": { - "warning": "Honek elementu askori eragin diezaieke edo ondorio konponezinak eduki, egiaztatu hau den benetan nahi duzuna." - } - } - }, - "header": { - "error": "Errorea akzioa aplikatzen zen bitartean" + "rss": { + "fieldLabel": "RSS jarioaren kokapena", + "fieldPlaceholder": "https://adibidea.eus/rss.xml", + "title": "Harpidetu podcast baten RSS jariora" } }, - "Duration": { - "meta": { - "hours": "{ hours } o { minutes } min", - "minutes": "{ minutes } minutu" - } - }, - "UserMenu": { - "link": { - "about": "Honi buruz", - "chat": "Txat gela", - "docs": "Dokumentazioa", - "forum": "Foroa", - "support": "Laguntza", - "git": "Arazoen jarraipena", - "login": "Hasi saioa", - "logout": "Amaitu saioa", - "notifications": "Jakinarazpenak", - "profile": "Profila", - "settings": "Ezarpenak", - "signup": "Erregistratu" - }, - "label": { - "shortcuts": "Laster-teklak", - "language": "Hizkuntza", - "theme": "Gaia" - } - }, - "UserModal": { - "link": { - "about": "Honi buruz", - "chat": "Txat gela", - "forum": "Foroa", - "support": "Laguntza", - "git": "Arazoen jarraipena", - "login": "Hasi saioa", - "logout": "Amaitu saioa", - "notifications": "Jakinarazpenak", - "profile": "Profila", - "settings": "Ezarpenak", - "signup": "Erregistratu" - }, - "label": { - "shortcuts": "Laster-teklak", - "language": "Hizkuntza", - "theme": "Gaia" - }, - "header": { - "options": "Aukerak" - }, - "button": { - "switchInstance": "Erabili beste instantzia bat" - } - }, - "DangerousButton": { - "button": { - "cancel": "Ezeztatu", - "confirm": "Baieztatu" - }, - "header": { - "confirm": "Nahi duzu akzio hau baieztatzea?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Ezeztatu", - "edit": "Editatu", - "less": "Erakutsi gutxiago", - "more": "Erakutsi gehiago", - "update": "Eguneratu deskribapena" - }, - "header": { - "failure": "Errorea deskribapena eguneratzerakoan" - }, - "empty": { - "noDescription": "Ez dago deskribapenik" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Garbitu" - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Tolestu", - "expand": "Zabaldu" - } - }, - "CopyInput": { - "button": { - "copy": "Kopiatu" - }, - "message": { - "success": "Testua arbelera kopiatu da!" - } - }, - "LoginModal": { - "link": { - "login": "Hasi saioa", - "signup": "Erregistratu" - }, - "header": { - "unauthenticated": "Autentifikatu gabe" - }, - "description": { - "noAccess": "Ez daukazu sarbiderik!" - } - }, - "ContentForm": { - "help": { - "markdown": "Markdown sintaxia onartzen da." - }, - "empty": { - "noContent": "Aurrebistarako ezer ez." - }, - "button": { - "preview": "Aurrebista", - "write": "Idatzi" - }, - "placeholder": { - "input": "Idatzi hitz batzuk hemen…" - } - }, - "EmptyState": { - "header": { - "noResults": "Ez da emaitzarik aurkitu." - }, - "button": { - "refresh": "Freskatu" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG edo JPG. Neurriak 1400x1400px eta 3000x3000px artekoa izan behar du. Onartzen den gehienezko fitxategi-tamaina 5MB da." - }, - "button": { - "remove": "Kendu" - }, - "label": { - "upload": "Igo irudi berria…" - }, - "loader": { - "uploading": "Fitxategia igotzen…" - }, - "header": { - "failure": "Zure eranskina ezin da gorde" - } - }, - "ExpandableDiv": { - "button": { - "less": "Erakutsi gutxiago", - "more": "Erakutsi gehiago" - } + "warning": { + "unsupported": "Objektu mota hau ez da onartzen oraindik" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - } + "SetInstanceModal": { + "button": { + "cancel": "Ezeztatu", + "submit": "Bidali" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } jada badago { 1 }(e)n." - }, - "button": { - "addDuplicate": "Gehitu halere", - "addToPlaylist": "Gehitu erreprodukzio-zerrenda honetan", - "addTrack": "Abestia sartu", - "cancel": "Ezeztatu", - "edit": "Editatu" - }, - "header": { - "addToPlaylist": "Gehitu erreprodukzio-zerrendan", - "available": "Zerrendak eskuragarri", - "manage": "Kudeatu zerrendak", - "noResults": "Ez dago zure iragazkiarekin bat datorren emaitzarik", - "addFailure": "Pista ezin da zerrenda batera gehitu" - }, - "table": { - "edit": { - "header": { - "edit": "Editatu", - "lastModification": "Azken aldaketa", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "placeholder": { - "filterPlaylist": "Idatzi erreprodukzio-zerrendaren izena" - }, - "label": { - "filter": "Iragazkia" - }, - "empty": { - "noPlaylists": "Ez da zerrendarik sortu oraindik" - } + "header": { + "chooseInstance": "Zure instantzia hautatu", + "failure": "Ezin da konektatu emandako URLarekin", + "suggestions": "Iradokitako aukerak" }, - "Editor": { - "button": { - "addDuplicate": "Gehitu halere", - "clear": "Garbitu zerrenda", - "copy": "Kopiatu uneko ilara erreprodukzio-zerrenda honetara", - "insertFromQueue": "Gehitu ilaratik (abesti { n }) | Gehitu ilaratik ({ n } abesti)" - }, - "error": { - "sync": "Errorea gertatu da aldaketak gordetzerakoan" - }, - "message": { - "sync": "Aldaketak zerbitzariarekin sinkronizatuta" - }, - "modal": { - "clearPlaylist": { - "header": "Nahi duzu \"{ playlist }\" zerrenda garbitzea?", - "content": { - "warning": "Honek zerrenda honetako pista guztiak kenduko ditu eta ezin da desegin." - } - } - }, - "help": { - "reorder": "Arrastatu eta jaregin lerroak abestiak zerrendan berrordenatzeko" - }, - "header": { - "editor": "Zerrenda editorea" - }, - "warning": { - "duplicate": "Zure ilarako pista batzuk zerrenda honetan daude dagoeneko:" - }, - "loading": { - "sync": "Aldaketak zerbitzariarekin sinkronizatzen…" - } + "help": { + "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", + "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat.", + "serverDown": "Zerbitzaria erorita egon daiteke" }, - "TrackPlaylistIcon": { - "button": { - "add": "Gehitu erreprodukzio-zerrendan…" - } + "label": { + "url": "Instantziaren URLa" }, - "Form": { - "header": { - "createPlaylist": "Zerrenda berria sortu", - "createSuccess": "Zerrenda sortuta", - "updateSuccess": "Zerrenda eguneratuta", - "createFailure": "Ezin izan da zerrenda sortu" - }, - "button": { - "create": "Zerrenda sortu", - "update": "Eguneratu zerrenda" - }, - "placeholder": { - "name": "Nire zerrenda txundigarria" - }, - "label": { - "name": "Zerrenda izena", - "visibility": "Zerrendaren ikusgaitasuna" - } - }, - "Widget": { - "button": { - "create": "Sortu erreprodukzio-zerrenda", - "more": "Erakutsi gehiago" - }, - "placeholder": { - "noPlaylists": "Ez da zerrendarik sortu oraindik" - } + "message": { + "currentConnection": "{ 0 } instantziara konektatuta zaude orain. Jarraituz gero, uneko instantziatik deskonektatuko zara eta datu lokal guztiak ezabatuko dira.", + "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username }-(e)k zure jarraipen-eskaera onartu du \"{ library }\" liburutegian", - "libraryFollow": "{ username } zure \"{ library }\" liburutegia jarraitzen hasi da", - "libraryPendingFollow": "{ username }-(e)k zure \"{ library }\" liburutegia jarraitu nahi du" + "ShortcutsModal": { + "button": { + "close": "Itxi" + }, + "header": { + "modal": "Laster-teklak" + }, + "shortcut": { + "audio": { + "clearQueue": "Garbitu ilara", + "decreaseVolume": "Jaitsi bolumena", + "expandQueue": "Zabaldu ilara/erreproduzigailu ikuspegia", + "increaseVolume": "Igo bolumena", + "label": "Audio erreproduzigailuaren laster-teklak", + "playNext": "Erreproduzitu hurrengo pista", + "playPause": "Pausatu/erreproduzitu uneko pista", + "playPrevious": "Erreproduzitu aurreko pista", + "seekBack30": "Bilatu atzeraka 30s", + "seekBack5": "Bilatu atzeraka 5s", + "seekForward30": "Bilatu aurreraka 30s", + "seekForward5": "Bilatu aurreraka 5s", + "shuffleQueue": "Nahasi ilara", + "toggleFavorite": "Txandakatu gogokoa", + "toggleLoop": "Txandakatu ilararen begizta", + "toggleMute": "Txandakatu mututzea" }, - "button": { - "approve": "Onartu", - "markRead": "Markatu irakurrita", - "markUnread": "Markatu irakurri gabe", - "reject": "Baztertu" + "general": { + "focus": "Fokuratu bilaketa-barra", + "label": "Lasterbide orokorrak", + "show": "Erakutsi erabilgarri dauden laster-tekla guztiak", + "unfocus": "Kendu fokua bilaketa-barrari" } } }, "Sidebar": { + "header": { + "administration": "Administrazioa", + "explore": "Arakatu", + "library": "Nire liburutegia", + "main": "Nabigazio nagusia", + "more": "Gehiago" + }, + "label": { + "add": "Edukia sartu", + "administration": "Administrazioa", + "edits": "Berrikuspen edizioak zain", + "follows": "Zain dauden jarraitzeko eskaerak", + "language": "Hizkuntza", + "main": "Menu nagusia", + "play": "Erreproduzitu pista hau", + "reports": "Zain dauden berrikuspen txostenak", + "theme": "Gaia" + }, "link": { "about": "Instantzia honi buruz", "albums": "Albumak", @@ -1805,44 +322,1985 @@ "radios": "Irratiak", "search": "Bilatu", "settings": "Ezarpenak", + "switchInstance": "Aldatu instantzia", "users": "Erabiltzaileak" - }, - "label": { - "add": "Edukia sartu", - "administration": "Administrazioa", - "language": "Hizkuntza", - "main": "Menu nagusia", - "follows": "Zain dauden jarraitzeko eskaerak", - "edits": "Berrikuspen edizioak zain", - "play": "Erreproduzitu pista hau", - "theme": "Gaia" - }, - "header": { - "administration": "Administrazioa", - "explore": "Arakatu", - "main": "Nabigazio nagusia", - "more": "Gehiago", - "library": "Nire liburutegia" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Gorde" + }, + "header": { + "error": "Errorea ezarpenak gordetzerakoan.", + "image": "Uneko irudia" + }, + "message": { + "success": "Ezarpenak arrakastaz eguneratuta." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Gehitu eremu berri bat", + "edit": "Editatu formularioa", + "preview": "Formularioaren aurrebista" + }, + "help": { + "additionalFields": "Formularioan erakusteko eremu gehigarriak. Soili eskuzko izen-emate baliozkotzea gaituta badago erakutsiko da.", + "helpText": "Izena emateko formularioaren hasieran bistaratuko den aukerako testua." + }, + "label": { + "additionalField": "Eremu gehigarria", + "additionalFields": "Eremu gehigarriak", + "delete": "Ezabatu", + "helpText": "Laguntza testua", + "moveDown": "Eraman behera", + "moveUp": "Eraman gora" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Ekintzak", + "label": "Eremuaren etiketa", + "required": "Beharrezkoa", + "type": "Eremu mota" + }, + "required": { + "false": "Ez", + "true": "Bai" + }, + "type": { + "long": "Testu luzea", + "short": "Testu laburra" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + }, + "title": "{ date }-(e)an eguneratua" + }, + "ChannelEntries": { + "help": { + "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." + } + }, + "ChannelForm": { + "header": { + "error": "Errorea kanala gordetzerakoan." + }, + "help": { + "discography": "Argitaratu zuk egindako musika album eta singlez osatutako diskografia eder batean.", + "podcast": "Ostatatu zure saioak eta mantendu zure komunitatea eguneratuta.", + "podcastFields": "Spotify edo iTunes bezalako plataforma batzuetako itunes:email eta itune:name eremuetan erabiltzen da.", + "username": "URLetan eta kanal hau Fedibertsoan jarraitzeko erabiltzen da. Ezin duzu aldatu aurrerago." + }, + "label": { + "category": "Kategoria", + "description": "Deskribapena", + "discography": "Artistaren diskografia", + "email": "Jabearen eposta helbidea", + "image": "Kanalaren irudia", + "language": "Hizkuntza", + "name": "Izena", + "owner": "Jabearen izena", + "podcast": "Podcastak", + "subcategory": "Azpikategoria", + "tags": "Etiketak", + "username": "Fedibertsoko izena" + }, + "legend": { + "purpose": "Zertarako erabiliko da kanal hau?" + }, + "loader": { + "loading": "Kargatzen" + }, + "placeholder": { + "name": "Kanalaren izen bikaina", + "username": "kanalarenizenbikaina" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "Saio { n } | { n } saio" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Erakutsi gehiago" + }, + "help": { + "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Erakutsi gehiago" + } + }, + "EmbedWizard": { + "button": { + "copy": "Kopiatu" + }, + "header": { + "preview": "Aurrebista" + }, + "help": { + "anonymous": "Jarri zure administratzaileekin harremanetan eta eskatu dagokion ezarpena eguneratzeko.", + "embed": "Kopiatu eta itsatsi kode hau zure webguneko HTMLan", + "width": "Utzi hutsik widget moldagarrirako" + }, + "label": { + "embed": "Txertatu kodea", + "height": "Widgetaren altuera", + "width": "Widgetaren zabalera" + }, + "message": { + "copy": "Testua arbelera kopiatu da!" + }, + "warning": { + "anonymous": "Partekatzeak ez du funtzionatuko instantzia honek ez duelako onartzen erabiltzaile anonimoek edukira sarbidea izatea." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Utzi jarraitzeko eskaera", + "follow": "Jarraitu", + "unfollow": "Utzi jarraitzeari" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu uneko ilaran", + "discretePlay": "Erreproduzitu", + "episodeDetails": "Saioaren xehetasunak", + "hideArtist": "Ezkutatu artista honen edukia", + "playAlbum": "Erreproduzitu albuma", + "playArtist": "Erreproduzitu artista", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "playPlaylist": "Erreproduzitu zerrenda", + "playTrack": "Erreproduzitu pista", + "playTracks": "Erreproduzitu pistak", + "report": "Salatu…", + "startRadio": "Erreproduzitu antzeko kantak", + "trackDetails": "Pistaren xehetasunak" + }, + "title": { + "more": "Gehiago…", + "unavailable": "Pista hau ez dago sarbidea duzun liburutegietan" + } + }, + "Player": { + "header": { + "player": "Audio erreproduzigailua eta kontrolak" + }, + "label": { + "addArtistContentFilter": "Ezkutatu artista honen edukia…", + "audioPlayer": "Multimedia-erreproduzigailua", + "clearQueue": "Garbitu zure ilara", + "expandQueue": "Zabaldu ilara", + "loopingDisabled": "Begizta desgaituta. Egin klik pista bakarreko begiztara aldatzeko.", + "loopingSingle": "Pista bakarreko begiztan. Egin klik ilara osoko begiztara aldatzeko.", + "loopingWholeQueue": "Ilara osoko begiztan. Egin klik begizta desgaitzeko.", + "mute": "Isilarazi", + "nextTrack": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "previousTrack": "Aurreko pista", + "shuffleQueue": "Nahasi zure ilara", + "unmute": "Aktibatu audioa" + }, + "meta": { + "position": "{ index } / { length }", + "unknownAlbum": "Album ezezaguna", + "unknownArtist": "Artista ezezaguna" + } + }, + "PlayerControls": { + "labels": { + "next": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "previous": "Aurreko pista" + } + }, + "Search": { + "empty": { + "noAlbums": "Ez dago zure bilaketarekin bat datorren albumik", + "noArtists": "Ez dago zure bilaketarekin bat datorren artistarik" + }, + "header": { + "albums": "Albumak", + "artists": "Artistak", + "search": "Bilatu musika pixka bat" + }, + "placeholder": { + "search": "Artista, albuma, pista …" + } + }, + "SearchBar": { + "empty": { + "noResults": "Sentitzen dugu, ez dago emaitzarik bilaketa honentzat" + }, + "header": { + "noResults": "Ez da bat datorren emaitzarik aurkitu" + }, + "label": { + "album": "Albuma", + "artist": "Artista", + "category": { + "federation": "Federazioa", + "podcasts": "Podcastak" + }, + "search": "Bilatu edukia", + "tag": "Etiketa", + "track": "Pista" + }, + "link": { + "fediverse": "Bilatu fedibertsoan", + "more": "Emaitza gehiago 🡒", + "rss": "Harpidetu podcastera RSS bidez" + }, + "placeholder": { + "search": "Bilatu artistak, albumak, pistak…" + } + }, + "VolumeControl": { + "button": { + "mute": "Isilarazi", + "unmute": "Aktibatu audioa" + }, + "label": { + "slider": "Doitu bolumena" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Erakutsi pistako ekintzak" + } + }, + "Modal": { + "button": { + "addToFavorites": "Gogokoetan sartu", + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu ilaran", + "albumDetails": "Ikusi albuma", + "artistDetails": "Ikusi artista", + "channelDetails": "Ikusi kanala", + "episodeDetails": "Saioaren xehetasunak", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "removeFromFavorites": "Kendu gogokoetatik", + "seriesDetails": "Ikusi serieak", + "startRadio": "Erreproduzitu irratia", + "trackDetails": "Pistaren xehetasunak" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Erakutsi pistako ekintzak" + } + }, + "Modal": { + "button": { + "addToFavorites": "Gogokoetan sartu", + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu ilaran", + "albumDetails": "Ikusi albuma", + "artistDetails": "Ikusi artista", + "channelDetails": "Ikusi kanala", + "episodeDetails": "Saioaren xehetasunak", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "removeFromFavorites": "Kendu gogokoetatik", + "seriesDetails": "Ikusi serieak", + "startRadio": "Erreproduzitu irratia", + "trackDetails": "Pistaren xehetasunak" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Albuma", + "artist": "Artista", + "title": "Izenburua" + } + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + }, + "empty": { + "noResults": "Ez da ezer aurkitu" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Birsortu tokena" + }, + "header": { + "appDetails": "Aplikazioaren xehetasunak", + "appSecretWarning": "Gorde token honen kopia bat leku seguru batean.", + "editApp": "Editatu aplikazioa" + }, + "help": { + "appDetails": "Aplikazioaren IDa eta sekretua balio sentikorrak dira eta pasahitz gisa tratatu behar dira. Ez partekatu beste inorrekin." + }, + "label": { + "accessToken": "Sarbide tokena", + "appId": "Aplikazioaren IDa", + "appSecret": "Aplikazioaren sekretua" + }, + "link": { + "settings": "Itzuli ezarpenetara" + }, + "message": { + "appSecretWarning": "Ezin izango duzu berriro ikusi behin pantaila honetatik irtetean." + }, + "title": "Editatu aplikazioa" + }, + "ApplicationForm": { + "button": { + "create": "Sortu aplikazioa", + "update": "Eguneratu aplikazioa" + }, + "header": { + "failure": "Ezin ditugu zure aldaketak gorde" + }, + "help": { + "redirectUri": "Erabili \"urn:ietf:wg:oauth:2.0:oob\" birbideratzea URI bezala zure aplikazioa ez bada webean zerbitzatzen." + }, + "label": { + "name": "Izena", + "redirectUri": "Birbideratu URIa", + "scopes": { + "description": "Gurasoek \"Irakurri\" edo \"Idatzi\" esparruak egiaztatzeak dagozkien haurren esparru guztietarako sarbidea suposatzen du.", + "label": "Esparruak", + "read": { + "description": "Soilik irakurtzeko sarbidea erabiltzailearen datuetara", + "label": "Irakurri" + }, + "write": { + "description": "Idazteko soilik sarbidea erabiltzaile datuetara", + "label": "Idatzi" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Itzuli ezarpenetara" + }, + "title": "Sortu aplikazio berri bat" + }, + "Authorize": { + "button": { + "authorize": "Baimendu { app }" + }, + "header": { + "access": "{ app }-(e)k zure Funkwhale kontura sartu nahi du", + "allScopes": "Sarbide osoa", + "authorize": "Baimendu hirugarrenen aplikazioa", + "authorizeFailure": "Errorea aplikazioa baimentzerakoan", + "fetchFailure": "Errorea aplikazioaren datuak eskuratzerakoan", + "readOnly": "Irakurtzeko soilik", + "writeOnly": "Idazteko soilik" + }, + "help": { + "copyCode": "Aplikazioan kopiatu eta itsasteko kodea erakutsiko zaizu", + "pasteCode": "Kopiatu eta itsatsi honako kodea aplikazioan:", + "redirect": "{ 0 }(e)ra birbideratua izango zara" + }, + "message": { + "unknownPermissions": "Aplikazioak ondorengo baimen ezezagunak ere eskatzen ari da:" + }, + "title": "Baimendu aplikazioa" + }, + "LoginForm": { + "button": { + "login": "Sartu" + }, + "header": { + "loginFailure": "Ezin dugu zure saioa hasi" + }, + "help": { + "approvalRequired": "Duela gutxi erregistratu bazara, baliteke moderazio taldeak zure kontua berrikusi edo zure eposta helbidea egiaztatu arte itxaron behar izatea.", + "invalidCredentials": "Egiaztatu erabiltzaile izena eta pasahitza zuzenak direla eta ziurtatu zure eposta helbidea egiaztatu duzula." + }, + "label": { + "password": "Pasahitza", + "username": "Erabiltzaile-izena edo eposta helbidea" + }, + "link": { + "createAccount": "Sortu kontua", + "resetPassword": "Berrezarri pasahitza" + }, + "message": { + "redirect": "{domain} domeinura birbideratua izango zara autentifikatzeko" + }, + "placeholder": { + "username": "Idatzi zure erabiltzaile-izena edo eposta helbidea" + } + }, + "Logout": { + "button": { + "logout": "Bai, amaitu saioa!" + }, + "header": { + "confirm": "Ziur al zaude saioa itxi nahi duzula?", + "unauthenticated": "Une honetan ez duzu saioa hasita" + }, + "link": { + "login": "Hasi saioa!" + }, + "message": { + "loggedIn": "{ username } moduan saioa hasita" + }, + "title": "Amaitu saioa" + }, + "Plugin": { + "button": { + "save": "Gorde", + "scan": "Eskaneatu" + }, + "description": { + "library": "Fitxategiak ze liburutegitara inportatu behar diren." + }, + "header": { + "failure": "Errorea plugina gordetzerakoan" + }, + "label": { + "library": "Liburutegia", + "pluginEnabled": "Gaituta" + }, + "link": { + "documentation": "Dokumentazioa" + } + }, + "Settings": { + "button": { + "delete": "Ezabatu", + "deleteAccount": "Ezabatu nire kontua…", + "deleteAccountConfirm": "Ezabatu nire kontua", + "disableSubsonic": "Sarbidea ezgaitu", + "edit": "Editatu", + "password": "Pasahitza aldatu", + "refresh": "Freskatu", + "remove": "Kendu", + "removeApp": "Kendu aplikazioa", + "revoke": "Ezeztatu", + "revokeAccess": "Ezeztatu sarbidea", + "update": "Eguneratu", + "updateSettings": "Eguneratu ezarpenak" + }, + "description": { + "authorizedApps": "Hau da zure kontuaren datuetara sarbidea duten aplikazioen zerrenda.", + "changeEmail": "Aldatu zure kontuarekin lotutako eposta helbidea. Berrespena bidaliko dizugu helbide berrira.", + "changePassword": { + "paragraph1": "Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat eskatuta baduzu.", + "paragraph2": "Pasahitz hau erabiltzen duten bezeroetan pasahitza eguneratu beharko duzu." + }, + "contentFilters": "Edukiaren iragazkiek zerbitzuan ikusi nahi ez duzun edukia ezkutatzen lagunduko dizute.", + "deleteAccount": "Beheko formularioa erabiliz zure kontua eta erlazionatutako datu guztiak ezabatu ditzakezu behin betiko eta atzera bueltarik gabe. Berresteko eskatuko zaizu.", + "plugins": "Erabili pluginak Funkwhale hedatu eta ezaugarri gehigarriak lortzeko.", + "yourApps": "Hau da erregistratu dituzun aplikazioen zerrenda." + }, + "header": { + "accountFailure": "Ezin dugu zure kontua ezabatu", + "accountSettings": "Kontuaren ezarpenak", + "authorizedApps": "Baimendutako aplikazioak", + "avatar": "Irudia", + "avatarFailure": "Zure avatarra ezin da gorde", + "changeEmail": "Aldatu nire eposta helbidea", + "changePassword": "Nire pasahitza aldatu", + "contentFilters": "Edukien iragazkiak", + "deleteAccount": "Ezabatu nire kontua", + "emailFailure": "Ezin dugu zure eposta helbidea aldatu", + "hiddenArtists": "Ezkutuko artistak", + "noApps": "Ez daukazu kontuari konektatutako aplikaziorik.", + "noPersonalApps": "Ez daukazu aplikaziorik erregistratuta oraindik.", + "passwordFailure": "Zure pasahitza ezin da aldatu", + "plugins": "Pluginak", + "settingsUpdated": "Ezarpenak eguneratuta", + "updateFailure": "Zure ezarpenak ezin dira eguneratu", + "yourApps": "Zure aplikazioak" + }, + "help": { + "changePassword": "Mesedez egiaztatu bi aldiz pasahitza zuzena dela", + "noApps": "Hirugarrengoen aplikazioei zure datuetarako sarbidea baimentzen badiezu, aplikazio horiek hemen zerrendatuko dira.", + "noPersonalApps": "Erregistratu bat Funkwhale hirugarrenen aplikazioekin integratzeko." + }, + "label": { + "avatar": "Irudia", + "currentPassword": "Uneko pasahitza", + "newEmail": "Eposta helbide berria", + "newPassword": "Pasahitz berria", + "password": "Pasahitza" + }, + "link": { + "managePlugins": "Kudeatu pluginak", + "newApp": "Erregistratu aplikazio berri bat" + }, + "message": { + "confirmDelete": "Zure ezabatze eskaera bidali da, zure kontua eta edukia laster ezabatuko dira", + "currentEmail": "Zure uneko posta elektronikoa {email} da" + }, + "modal": { + "changePassword": { + "content": { + "logout": "Saio hau amaituko zaizu eta berriarekin hasi beharko duzu", + "subsonic": "Zure Subsonic pasahitza ausazko pasahitz batekin ordezkatuko da, Subsonic pasahitz zaharra erabiltzen duten gailuetan saioa amaituz", + "warning": "Pasahitza aldatzeak hurrengo ondorioak izango ditu" + }, + "header": "Zure pasahitza aldatu?" + }, + "deleteAccount": { + "content": { + "warning": "Hau ezin da desegin eta datuak behin betiko ezabatuko ditu gure zerbitzarietatik. Berehala zure saioa amaitu da." + }, + "header": "Zure kontua ezabatu nahi duzu?" + }, + "deleteApp": { + "content": { + "warning": "Honek behin betiko ezabatuko ditu aplikazioa eta erlazionatutako token guztiak." + }, + "header": "\"{ application }\" aplikazioa kendu?" + }, + "revokeApp": { + "content": { + "warning": "Honek eragotzi egingo dio aplikazio honi zerbitzura zure izenean sartzea." + }, + "header": "\"{ application }\" aplikazioaren sarbidea ezeztatu?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Sortze data", + "name": "Izena" + } + }, + "authorizedApps": { + "header": { + "application": "Aplikazioa", + "permissions": "Baimenak" + } + }, + "yourApps": { + "header": { + "application": "Aplikazioa", + "creationDate": "Sortze data", + "scopes": "Esparruak" + } + } + }, + "title": "Kontuaren ezarpenak", + "warning": { + "deleteAccount": "Zure kontua gure zerbitzarietatik ezabatuko da minutu batzuk barru. Zure datuen kopia eduki dezaketen beste zerbitzariei ere ezabatzeko jakinaraziko diegu. Kontuan izan zerbitzari batzuk lineaz kanpo egon daitezkeela edo ez dutela eskaera osatu nahiko." + } + }, + "SignupForm": { + "button": { + "create": "Sortu nire kontua" + }, + "header": { + "login": "Sartu zure Funkwhale kontura", + "signupFailure": "Ezin da zure kontua sortu." + }, + "label": { + "email": "Eposta helbidea", + "invitation": "Gonbidapen kodea", + "password": "Pasahitza", + "username": "Erabiltzaile-izena" + }, + "message": { + "accountCreated": "Zure kontua arrakastaz sortu da. Egiaztatu zure eposta saio hasten saiatu aurretik.", + "awaitingReview": "Zure kontu-eskaera arrakastaz bidali da. Eposta mezu bat jasoko duzu gure moderazio taldeak zure eskaera berrikusi duenean.", + "registrationClosed": "Izena-emate publikoak itxita daude instantzia honetan. Gonbidapen kode bat beharko duzu izena emateko.", + "requiresReview": "Instantzia honetako izen emateak irekita daude, baina moderatzaileek berrikusi behar dituzte onartu aurretik." + }, + "placeholder": { + "email": "Idatzi zure eposta helbidea", + "invitation": "Idatzi zure gonbidapen kodea (ez ditu maiuskulak eta minuskulak bereizten)", + "username": "Idatzi zure erabiltzaile-izena" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Sarbidea ezgaitu", + "confirmNewPassword": "Eskatu pasahitza", + "disable": "Subsonic sarbidea ezgaitu", + "newPassword": "Eskatu pasahitz berria" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin bateragarria da.", + "paragraph2": "Zure zerrendak eta musika lineaz kanpo gozatzeko erabil ditzakezu, adibidez, zure mugikor edo tabletan.", + "paragraph3": "Hala ere, bezero horietatik Funkwhalera sarbidea lortzeko behean ezar dezakezun aparteko pasahitz bat behar duzu." + } + }, + "header": { + "error": "Errorea", + "subsonic": "Subsonic API pasahitza" + }, + "label": { + "subsonicField": "Zure Subsonic API pasahitza" + }, + "link": { + "apps": "Ezagutu nola erabili Funkwhale beste aplikazio batzuetatik" + }, + "message": { + "accessDisabled": "Sarbidea desgaituta", + "passwordUpdated": "Pasahitza eguneratuta", + "unavailable": "Subsonic APIa ez dago erabilgarri Funkwhale instantzia honetan." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Honek guztiz desgaituko du Subsonic APIrako sarbidea kontu honetatik." + }, + "header": "Subsonic API sarbidea ezgaitu?" + }, + "newPassword": { + "content": { + "warning": "Honek uneko pasahitza erabiltzen duten gailuetako zure saioak amaituko ditu." + }, + "header": "Eskatu Subsonic API pasahitz berria?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Errorea sorketan" + }, + "label": { + "albumTitle": "Izenburua" + } + }, + "AlbumModal": { + "button": { + "cancel": "Ezeztatu", + "create": "Sortu" + }, + "header": { + "newAlbum": "Album berria", + "newSeries": "Serie berria" + } + }, + "AlbumSelect": { + "label": { + "album": "Albuma", + "series": "Serieak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + }, + "option": { + "none": "Bat ere ez" + } + }, + "LicenseSelect": { + "label": { + "license": "Lizentzia" + }, + "link": { + "license": "Lizentzia honi buruz" + }, + "option": { + "none": "Bat ere ez" + } + }, + "SubscribeButton": { + "help": { + "auth": "Saioa hasi behar duzu kanal honetara harpidetzeko" + }, + "title": { + "subscribe": "Harpidetu", + "unsubscribe": "Kendu harpidetza" + } + }, + "UploadForm": { + "button": { + "edit": "Editatu", + "ignore": "Ez ikusi egin", + "remove": "Kendu", + "resume": "Berrekin", + "retry": "Saiatu berriro" + }, + "description": { + "extensions": "Euskarria duten hedapenak: { extensions }" + }, + "header": { + "error": "Errorea argitaratzerakoan" + }, + "help": { + "license": "Gehitu lizentzia zure igoerari zure entzuleei askatasun batzuk emateko." + }, + "label": { + "channel": "Kanala", + "openBrowser": "Arakatu…" + }, + "message": { + "dragAndDrop": "Arrastatu eta askatu fitxategiak hemen edo ireki nabigatzailea fitxategiak igotzeko", + "pending": "Argitaratu gabeko igoera zirriborro batzuk dauzkazu." + }, + "status": { + "errored": "Erroreduna", + "pending": "Zain", + "uploading": "Igotzen" + }, + "warning": { + "quota": "Ez daukazu fitxategiak kargatzeko leku librerik. Jarri moderatzaileekin harremanetan." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Deskribapena", + "image": "Pistaren irudia", + "position": "Kokapena", + "tags": "Etiketak", + "title": "Izenburua" + } + }, + "UploadModal": { + "button": { + "cancel": "Ezeztatu", + "close": "Itxi", + "finishLater": "Amaitu beranduago", + "next": "Hurrengo pausoa", + "previous": "Aurreko pausoa", + "publish": "Argitaratu", + "update": "Eguneratu" + }, + "header": { + "processing": "Igoerak prozesatzen", + "publish": "Argitaratu audioa", + "uploadDetails": "Igoeraren xehetasunak", + "uploadFiles": "Fitxategiak kargatzeko" + }, + "meta": { + "files": "Fitxategi { n } | { n } fitxategi", + "quota": "Gelditzen den biltegiratze-lekua: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Elementu bakarra hautatuta | { n } elementu hautatuta", + "go": "Joan", + "launch": "Abiarazi", + "refresh": "Freskatu taularen edukia", + "select": "Hautatu", + "selectAll": "Hautatu elementu guztiak", + "selectCurrentPage": "Aukeratu orrialde hau bakarrik", + "selectElement": "Hautatu elementu { n } | Hautatu { n } elementuak", + "selected": "Aaukeratutako { n },{ total }(e)tik | { n } aukeratutako { total }(e)tik" + }, + "header": { + "error": "Errorea akzioa aplikatzen zen bitartean" + }, + "label": { + "actions": "Akzioak", + "performAction": "Burutu ekintzak" + }, + "message": { + "needsRefresh": "Edukia eguneratu da, sakatu Freskatu eduki eguneratua ikusteko", + "success": "{ action } ekintza arrakastaz gauzatu da elementu batean | { action } ekintza arrakastaz gauzatu da { n } elementutan" + }, + "modal": { + "performAction": { + "content": { + "warning": "Honek elementu askori eragin diezaieke edo ondorio konponezinak eduki, egiaztatu hau den benetan nahi duzuna." + }, + "header": "{ action } abiarazi nahi duzu elementu batean? | { action } abiarazi nahi duzu { n } elementutan?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Kendu" + }, + "header": { + "failure": "Zure eranskina ezin da gorde" + }, + "help": { + "upload": "PNG edo JPG. Neurriak 1400x1400px eta 3000x3000px artekoa izan behar du. Onartzen den gehienezko fitxategi-tamaina 5MB da." + }, + "label": { + "upload": "Igo irudi berria…" + }, + "loader": { + "uploading": "Fitxategia igotzen…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Tolestu", + "expand": "Zabaldu" + } + }, + "ContentForm": { + "button": { + "preview": "Aurrebista", + "write": "Idatzi" + }, + "empty": { + "noContent": "Aurreikusteko ezer" + }, + "help": { + "markdown": "Markdown sintaxia onartzen da" + }, + "placeholder": { + "input": "Idatzi hitz batzuk hemen…" + } + }, + "CopyInput": { + "button": { + "copy": "Kopiatu" + }, + "message": { + "success": "Testua arbelera kopiatu da!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Baieztatu" + }, + "header": { + "confirm": "Nahi duzu akzio hau baieztatzea?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } o { minutes } min", + "minutes": "{ minutes } minutu" + } + }, + "EmptyState": { + "button": { + "refresh": "Freskatu" + }, + "header": { + "noResults": "Ez da emaitzarik aurkitu." + } + }, + "ExpandableDiv": { + "button": { + "less": "Erakutsi gutxiago", + "more": "Erakutsi gehiago" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Garbitu" + }, + "label": { + "search": "Bilatu" + }, + "placeholder": { + "search": "Bilatu…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Ez duzu sarbiderik" + }, + "header": { + "unauthenticated": "Autentifikatu gabe" + }, + "link": { + "login": "Hasi saioa", + "signup": "Erregistratu" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Ezeztatu", + "edit": "Editatu", + "less": "Erakutsi gutxiago", + "more": "Erakutsi gehiago", + "update": "Eguneratu deskribapena" + }, + "empty": { + "noDescription": "Ez dago deskribapenik" + }, + "header": { + "failure": "Errorea deskribapena eguneratzerakoan" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Hizkuntza", + "shortcuts": "Laster-teklak", + "theme": "Gaia" + }, + "link": { + "about": "Honi buruz", + "chat": "Txat gela", + "docs": "Dokumentazioa", + "forum": "Foroa", + "git": "Arazoen jarraipena", + "login": "Hasi saioa", + "logout": "Amaitu saioa", + "notifications": "Jakinarazpenak", + "profile": "Profila", + "settings": "Ezarpenak", + "signup": "Erregistratu", + "support": "Laguntza" + } + }, + "UserModal": { + "button": { + "switchInstance": "Erabili beste instantzia bat" + }, + "header": { + "options": "Aukerak" + }, + "label": { + "language": "Hizkuntza", + "shortcuts": "Laster-teklak", + "theme": "Gaia" + }, + "link": { + "about": "Honi buruz", + "chat": "Txat gela", + "docs": "Dokumentazioa", + "forum": "Foroa", + "git": "Arazoen jarraipena", + "login": "Hasi saioa", + "logout": "Amaitu saioa", + "notifications": "Jakinarazpenak", + "profile": "Profila", + "settings": "Ezarpenak", + "signup": "Erregistratu", + "support": "Laguntza" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Ez da pistarik gehitu oraindik zure gogokoetara" + }, + "header": { + "favorites": "Gogoko { n } | { n } gogoko" + }, + "link": { + "library": "Arakatu liburutegia" + }, + "loader": { + "loading": "Zure gogokoak kargatzen…" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "title": "Zure gogokoak" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Gogokoetan sartu", + "remove": "Kendu gogokoetatik" + }, + "label": { + "inFavorites": "Gogokoetan" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Itxi", + "reload": "Itxi eta freskatu orria" + }, + "description": { + "failure": "Errore bat gertatu da datuak freskatzen saiatzean:", + "pending": "Freskatze eskaera ez da garaiz prozesatu gure zerbitzarian. Beranduago prozesatuko da.", + "skipped": "Urruneko zerbitzariak erantzun du, baina Funkwhalek ez du itzulitako datuen euskarririk.", + "success": "Datuak behar bezala freskatu dira urruneko zerbitzaritik." + }, + "header": { + "failure": "Freskatu errorea", + "pending": "Freskatu zain daudenak", + "refresh": "Objektua freskatzen urruneko zerbitzaritik…", + "saveFailure": "Errorea ezarpenak gordetzerakoan", + "skipped": "Freskatzea saltatu da", + "success": "Arrakastaz freskatua" + }, + "loader": { + "awaitingResult": "Erantzunen zain…", + "fetchRequest": "Bilaketa eskatzen…" + }, + "table": { + "error": { + "label": { + "detail": "Errorearen xehetasuna", + "type": "Errore mota" + }, + "value": { + "connectionError": "Ezin izan da urruneko zerbitzarira konektatu", + "httpError": "HTTP errorea gertatu da urruneko zerbitzariarekin harremanetan jartzean", + "httpStatus": "Urruneko zerbitzariak HTTP { status } egoerarekin erantzun du", + "invalidAttributesError": "Urruneko zerbitzariak itzulitako datuek atributu baliogabeak edo faltan ditu", + "invalidJsonError": "Urruneko zerbitzariak baliogabeko JSON edo JSON-LD datuak itzuli ditu", + "timeoutError": "Urruneko zerbitzariak ez du behar bezain azkar erantzun", + "unknownError": "Errore ezezaguna" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Erakutsi gehiago" + }, + "empty": { + "noMatch": "Ez da bat datorren liburutegirik aurkitu." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Kopiatu" + }, + "message": { + "copy": "Testua arbelera kopiatu da!" + }, + "title": "Erakutsi/ezkutatu pasahitza" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Gehitu deskribapena…" + }, + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + }, + "title": "Albuma" + }, + "AlbumDetail": { + "description": { + "libraries": "Album hau ondorengo liburutegietan dago:" + }, + "header": { + "episodes": "Saioak", + "libraries": "Erabiltzaileen liburutegiak", + "tracks": "Pistak" + }, + "meta": { + "volume": "{ number } bolumena" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Ezeztatu", + "delete": "Ezabatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiago…" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "musicbrainz": "Ikusi MusicBrainz-en" + }, + "modal": { + "delete": { + "content": { + "warning": "Album hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Album hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu album hau zure webgunean" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Editatu album hau", + "suggest": "Iradoki edizio bat album honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "Albums": { + "button": { + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Albumak arakatzen" + }, + "label": { + "search": "Bilatu", + "tags": "Etiketak" + }, + "link": { + "addMusic": "Gehitu musikaren bat" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Idatzi albumaren izena…" + }, + "title": "Albumak" + }, + "ArtistBase": { + "button": { + "cancel": "Ezeztatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiago…", + "play": "Erreproduzitu album denak" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "musicbrainz": "Ikusi MusicBrainz-en", + "wikipedia": "Bilatu Wikipedian" + }, + "meta": { + "albums": "0 album | {n} album | {n} album", + "tracks": "0 pista hemen: | {count} pista hemen: | {count} pista hemen:" + }, + "modal": { + "embed": { + "header": "Txertatu artista honen lana zure webgunean" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Kendu iragazkia", + "more": "Kargatu gehiago…" + }, + "description": { + "library": "Artista hau ondorengo liburutegietan dago:" + }, + "header": { + "album": "Artista honen albumak", + "library": "Erabiltzaileen liburutegiak", + "track": "Artista honen pista berriak" + }, + "link": { + "filter": "Berrikusi nire iragazkiak" + }, + "message": { + "filter": "Artista honekin erlazionatutako edukia ezkutatzen ari zara une honetan." + } + }, + "ArtistEdit": { + "header": { + "edit": "Editatu artista hau", + "suggest": "Iradoki edizio bat artista honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "Artists": { + "button": { + "search": "Bilatu", + "upload": "Gehitu musikaren bat" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Artistak arakatzen" + }, + "label": { + "excludeCompilation": "Baztertu bilduma-artistak", + "search": "Artistaren izena", + "tags": "Etiketak" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Bilatu…" + }, + "title": "Artistak" + }, + "EditCard": { + "button": { + "approve": "Onartu", + "delete": "Ezabatu", + "reject": "Baztertu" + }, + "header": { + "modification": "Aldaketa { id }" + }, + "link": { + "track": "Pista #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Iradokizuna guztiz ezabatuko da, ekintza hau ezin da desegin." + }, + "delete": { + "header": "Iradokizun hau ezabatu nahi duzu?" + } + }, + "status": { + "applied": "Onartuta eta aplikatuta", + "approved": "Onartuta", + "pending": "Berrikuspenaren zain", + "rejected": "Baztertuta" + }, + "table": { + "update": { + "header": { + "field": "Eremua", + "newValue": "Balio berria", + "oldValue": "Balio zaharra" + }, + "notApplicable": "Daturik gabe" + } + } + }, + "EditForm": { + "button": { + "cancel": "Ezeztatu", + "clear": "Garbitu", + "new": "Bidali beste edizio bat", + "reset": "Berrezarri hasierako baliora", + "showAll": "Erakutsi edizio guztiak", + "showUnreviewed": "Mugatu berrikusi gabeko edizioetara", + "submit": "Bilatu eta aplikatu edizioa", + "suggest": "Bidali iradokizuna" + }, + "empty": { + "suggestEdit": "Iradoki aldaketa bat beheko formularioa erabiliz" + }, + "header": { + "failure": "Errorea aldatutakoa bidaltzerakoan", + "recentEdits": "Azken aldiko edizioak", + "success": "Zure edizioa behar bezala bidalita.", + "unreviewed": "Berrikuspenaren zain dauden azken aldiko edizioak" + }, + "label": { + "summary": "Laburpena (hautazkoa)" + }, + "message": { + "noPermission": "Ez daukazu objektu hau editatzeko baimenik, baina aldaketak iradoki ditzakezu. Bidalitakoan, iradokizunak onartu aurretik berrikusiko dira." + }, + "notApplicable": "Daturik gabe", + "placeholder": { + "summary": "Zure aldaketak deskribatzen dituen laburpentxoa." + } + }, + "FileUpload": { + "button": { + "cancel": "Ezeztatu", + "retry": "Saiatu berriro huts egindako igoerekin" + }, + "description": { + "import": "Inportazioaren egoera", + "previousImport": "Zure aurreko inportazioaren emaitzak:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Errorea inportazioa abiarazterakoan", + "local": "Igo musika zure gailutik", + "server": "Inportazioaren egoera", + "status": "Inportatu egoera" + }, + "label": { + "extensions": "Euskarria duten hedapenak: { extensions }", + "remainingSpace": "Gelditzen den biltegiratze-lekua", + "uploadWidget": "Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin fitxategi edo karpetak" + }, + "link": { + "picard": "Helburu horretarako Picard erabiltzea gomendatzen dugu.", + "processing": "Prozesatzen", + "uploading": "Igotzen" + }, + "message": { + "listener": "Orri honek irten nahi duzula berrestea eskatzen du, baliteke sartutako datuak ez gordetzea.", + "local": { + "copyright": "Ez zarela ari copyright duen edukia liburutegi publiko batera igotzen, bestela legea hausten ari zara", + "format": "Igotzen ari zaren audio fitxategiak OGG, Flac, MP3 edo AIFF formatuan daude", + "message": "Zure liburutegira musika igotzera zoaz. Jarraitu aurretik, ziurtatu:", + "tag": "Igotzen ari zaren musika fitxategiak behar bezala etiketatuta daude." + } + }, + "table": { + "upload": { + "header": { + "actions": "Ekintzak", + "filename": "Fitxategi-izena", + "size": "Tamaina", + "status": "Egoera" + }, + "progress": "% {percent}", + "status": { + "pending": "Zain", + "uploaded": "Igota", + "uploading": "Igotzen…" + } + } + }, + "tooltip": { + "denied": "Igoera ukatuta, ziurtatu fitxategia ez dela handiegia eta ez zarela zure mugara iritsi", + "extension": "Fitxategi-mota baliogabea, ziurtatu igotzen ari zarena audio-fitxategi bat dela. Onartzen diren fitxategi-luzapenak: { extensions }", + "network": "Sare-errorea eman da fitxategi hau igotzerakoan", + "retry": "Saiatu berriro", + "size": "Ezin da fitxategi hau igo, ziurtatu ez dela handiegia", + "timeout": "Igoeraren denbora-muga, mesedez saiatu berriro" + } + }, + "FsBrowser": { + "button": { + "import": "Inportatu" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Inportazioa ez da hasi oraindik" + } + }, + "Home": { + "header": { + "newChannels": "Kanal berriak", + "playlists": "Zerrendak", + "recentlyAdded": "Azken aldian gehituta", + "recentlyFavorited": "Azken aldian gogokoa", + "recentlyListened": "Azken aldian entzuna" + }, + "title": "Liburutegia" + }, + "ImportStatusModal": { + "button": { + "close": "Itxi" + }, + "error": { + "importFailure": "Errore bat gertatu da igoera prozesatzean. Azpian informazio gehiago aurkituko duzu.", + "invalidMetadata": { + "label": "Metadatu baliogabeak", + "message": "Fitxategiaren metadatuak baliogabeak dira edo beharrezko eremuak falta dituzte." + }, + "unknownError": { + "label": "Errore ezezaguna", + "message": "Errore ezezaguna gertatu da" + } + }, + "header": { + "importDetail": "Inportazioaren xehetasunak" + }, + "link": { + "documentation": "Irakurri errori honi buruzko gure dokumentazioa", + "support": "Ireki laguntza haria (sartu arazteko informazioa azpian, zure mezuan)" + }, + "message": { + "importDetail": "Igoera zain dago oraindik eta laster prozesatuko du zerbitzariak.", + "importSuccess": "Igoera behar bezala prozesatu da zerbitzarian." + }, + "table": { + "error": { + "debug": "Arazketa informazioa", + "errorDetail": "Errorearen xehetasuna", + "errorType": "Errore mota", + "help": "Lortu laguntza" + } + }, + "warning": { + "importSkipped": "Igoera saltatu egin da zure liburutegietako batean antzeko bat badagoelako dagoeneko." + } + }, + "Podcasts": { + "button": { + "cancel": "Ezeztatu", + "channel": "Sortu kanala", + "feed": "Harpidetu RSS jariora", + "search": "Bilatu", + "subscribe": "Harpidetu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Podcastak arakatzen" + }, + "label": { + "search": "Podcastaren izenburua", + "tags": "Etiketak" + }, + "modal": { + "subscription": { + "header": "Harpidetza" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Bilatu…" + }, + "title": "Podcastak" + }, + "Radios": { + "button": { + "add": "Sortu irrati bat", + "create": "Sortu zure irrati propioa", + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Irratiak arakatzen", + "instance": "Instantziako irratiak", + "user": "Erabiltzaileen irratiak" + }, + "label": { + "search": "Bilatu" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Idatzi irrati baten izena …" + }, + "title": "Irratiak" + }, + "TagDetail": { + "header": { + "channels": "Kanalak", + "tracks": "Pistak" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "moderation": "Ireki moderazio interfazean" + } + }, + "TagSelector": { + "placeholder": { + "search": "Bilatu…" + } + }, + "TrackBase": { + "button": { + "cancel": "Ezeztatu", + "delete": "Ezabatu", + "download": "Deskargatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiago…", + "play": "Erreproduzitu" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "wikipedia": "Bilatu Wikipedian" + }, + "modal": { + "delete": { + "content": { + "warning": "Pista eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Pista hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu pista hau zure webgunean" + } + }, + "subtitle": { + "with-uploader": "{0} erabiltzaileak igota data honetan: {1}", + "without-uploader": "Igoera-data: {0}" + }, + "title": "Pista" + }, + "TrackDetail": { + "description": { + "library": "Pista hau ondorengo liburutegietan dago:" + }, + "header": { + "episode": "Saioaren xehetasunak", + "library": "Erlazionatutako liburutegiak", + "playlists": "Erlazionatutako zerrendak", + "release": "Argitalpenaren xehetasunak", + "track": "Pistaren xehetasunak" + }, + "link": { + "musicbrainz": "Ikusi MusicBrainz-en" + }, + "notApplicable": "Daturik gabe", + "table": { + "release": { + "album": "Albuma", + "artist": "Artista", + "copyright": "Copyright-a", + "license": "Lizentzia", + "series": "Seriea", + "url": "URL", + "year": "Urtea" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Kodeka", + "downloads": "Deskargak", + "duration": "Iraupena", + "size": "Tamaina" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Editatu pista hau", + "suggest": "Iradoki edizio bat pista honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Iragazkia sortu", + "save": "Gorde" + }, + "description": { + "builder": "Zure irizpidearen araberako pistak erreproduzituko dituen irrati pertsonalizatua sortu dezakezu interfaze honekin." + }, + "header": { + "builder": "Eraikitzailea", + "created": "Irratia sortuta", + "matches": "Pista { n } dator bat iragazki konbinatuekin | { n } pista datoz bat iragazki konbinatuekin", + "updated": "Irratia eguneratuta" + }, + "label": { + "description": "Deskribapena", + "filter": "Iragazkiak sortu zure irratia pertsonalizatzeko", + "name": "Irratiaren izena", + "public": "Erakutsi publikoki" + }, + "option": { + "filter": "Aukeratu filtroa" + }, + "placeholder": { + "description": "Nire deskribapen txundigarria", + "name": "Nire irrati txundigarria" + }, + "table": { + "filter": { "header": { - "accessedDate": "Sarbide data", - "account": "Kontua", - "creationDate": "Sortze data", - "domain": "Domeinua", - "importStatus": "Inportazioaren egoera", - "library": "Liburutegia", - "name": "Izena", - "size": "Tamaina", - "visibility": "Ikusgaitasuna" + "actions": "Akzioak", + "candidates": "Hautagaiak", + "config": "Konfigurazioa", + "exclude": "Baztertu", + "name": "Iragazkiaren izena" } } }, + "title": "Irrati eraikitzailea" + }, + "Filter": { + "cancelButton": "Ezeztatu", + "excludeLabel": "Baztertu", + "matchingTracks": "iragazkiarekin bat datorren pistarik ez | iragazkiarekin bat datorren {n} pista | iragazkiarekin bat datozen {n} pista", + "matchingTracksModalHeader": "Iragazkiarekin bat datozen pistak", + "removeButton": "Kendu" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Kategoria", + "search": "Bilatu" + }, + "link": { + "local": "Lokala", + "moderation": "Ireki moderazio interfazean" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenaren, kontuaren arabera" + }, + "table": { + "channel": { + "header": { + "account": "Kontua", + "albums": "Albumak", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako albumak eta erlazionatutako pistak, igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "link": { + "local": "Lokala", + "moderation": "Ireki moderazio interfazean" + }, + "notApplicable": "Daturik gabe", + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, MusicBrainz IDaren arabera" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izenburua", + "releaseDate": "Argitalpen-data", + "tracks": "Pistak" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako artista eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "category": "Kategoria", + "search": "Bilatu" + }, + "link": { + "local": "Lokala" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenaren MusicBrainz IDaren arabera" + }, + "table": { + "artist": { + "header": { + "albums": "Albumak", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "all": "Dena", + "approved": "Onartuta", + "pending": "Berrikuspenaren zain", + "rejected": "Baztertuta" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu kontuaren, laburpenaren, domeinuaren arabera" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako liburutegia eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu", + "visibility": "Ikusgaitasuna" + }, + "link": { + "local": "Lokala" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, aktorearen, izenaren, azalpenaren arabera" + }, + "table": { + "library": { + "header": { + "account": "Kontua", + "creationDate": "Sortze data", + "domain": "Domeinua", + "followers": "Jarraitzaileak", + "name": "Izena", + "uploads": "Igoerak", + "visibility": "Ikusgaitasuna" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu izenaren arabera" + }, + "table": { + "tag": { + "header": { + "albums": "Albumak", + "artists": "Artistak", + "creationDate": "Sortze data", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako pistak eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "link": { + "local": "Lokala" + }, + "notApplicable": "Daturik gabe", + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren, MusicBrainz IDaren arabera" + }, + "table": { + "track": { + "header": { + "album": "Albuma", + "artist": "Artista", + "creationDate": "Sortze data", + "domain": "Domeinua", + "license": "Lizentzia", + "title": "Izenburua" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako igoerak ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu", + "status": "Inportazioaren egoera", + "visibility": "Ikusgaitasuna" + }, + "link": { + "local": "Lokala" + }, + "notApplicable": "Daturik gabe", "option": { "all": "Dena", "failed": "Huts egin du", @@ -1858,396 +2316,68 @@ }, "label": "Ordena" }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako igoerak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu", - "status": "Egoera", - "visibility": "Ikusgaitasuna" - }, - "placeholder": { - "search": "Bilatu domeinuaren, aktorearen, izenaren, erreferentziaren, iturburuaren... arabera" - }, "pagination": { "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "LibrariesTable": { + }, + "placeholder": { + "search": "Bilatu domeinuaren, aktorearen, izenaren, erreferentziaren, iturburuaren arabera" + }, "table": { - "library": { + "upload": { "header": { + "accessedDate": "Sarbide data", "account": "Kontua", "creationDate": "Sortze data", "domain": "Domeinua", - "followers": "Jarraitzaileak", + "importStatus": "Inportazioaren egoera", + "library": "Liburutegia", "name": "Izena", - "uploads": "Igoerak", + "size": "Tamaina", "visibility": "Ikusgaitasuna" } } - }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako liburutegia eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "label": { - "search": "Bilatu", - "visibility": "Ikusgaitasuna" - }, - "placeholder": { - "search": "Bilatu domeinuaren, aktorearen, izenaren, deskribapenaren… arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Albuma", - "artist": "Artista", - "creationDate": "Sortze data", - "domain": "Domeinua", - "license": "Lizentzia", - "title": "Izenburua" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako pistak eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren, MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albumak", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "label": { - "category": "Kategoria", - "search": "Bilatu" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako artista eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenaren MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albumak", - "artists": "Artistak", - "creationDate": "Sortze data", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." - } - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu izenaren arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "EditsCardList": { - "option": { - "all": "Dena", - "approved": "Onartuta", - "pending": "Berrikuspenaren zain", - "rejected": "Baztertuta" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "placeholder": { - "search": "Bilatu kontuaren, laburpenaren, domeinuaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - }, - "label": { - "status": "Egoera" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izenburua", - "releaseDate": "Argitalpen-data", - "tracks": "Pistak" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako albumak eta erlazionatutako pistak, igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala", - "moderation": "Ireki moderazio interfazean" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenburuaren, artistaren, MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Kontua", - "domain": "Domeinua", - "local": "Lokala", - "owner": "Jabea", - "type": "Mota" - }, - "status": { - "assignedTo": "Honi esleituta", - "internalNotes": "Barne oharrak", - "resolutionDate": "Ebazpenaren data", - "resolved": "Ebatzita", - "status": "Egoera", - "unresolved": "Konpondu gabea" - }, - "report": { - "category": "Kategoria", - "creationDate": "Sortze data", - "submittedBy": "Bidaltzailea" + "AccountsTable": { + "action": { + "purge": { + "label": "Kendu" } }, - "header": { - "actions": "Akzioak", - "notes": "Barne oharrak", - "message": "Mezua", - "reportedObject": "Salatutako objektua" - }, - "button": { - "confirmDelete": "Ezabatu", - "delete": "Ezabatu salatutako objektua", - "resolve": "Ebatzi", - "unresolve": "Konpondu gabe" - }, - "modal": { - "delete": { - "header": "Salatutako objektua ezabatu nahi duzu?", - "content": { - "warning": "Honek txostenarekin erlazionatutako objektua ezabatuko du. Ezabaketa ezin da desegin." - } - } - }, - "notApplicable": "Daturik gabe", - "link": { - "moderation": "Ireki moderazio interfazean", - "report": "Salatu { id }", - "publicPage": "Ikusi orrialde publikoa" - }, - "warning": { - "objectDeleted": "Txosten honekin lotutako objektua ezabatu da." - } - }, - "UserRequestCard": { - "header": { - "actions": "Akzioak", - "notes": "Barne oharrak", - "signup": "Mezua" - }, - "button": { - "approve": "Onartu", - "reject": "Ukatu" - }, - "table": { - "status": { - "approved": "Onartuta", - "assignedTo": "Honi esleituta", - "internalNotes": "Barne oharrak", - "pending": "Zain", - "refused": "Ukatuta", - "status": "Egoera" - }, - "request": { - "creationDate": "Sortze data", - "submittedBy": "Bidaltzailea" - } - }, - "notApplicable": "Daturik gabe", - "link": { - "request": "Eskatu { id }" - }, - "message": { - "signup": "Erabiltzaile honek zure instantzian erregistratu nahi du." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Gehitu moderazio-arau berri bat", - "editRule": "Editatu moderazio-arauak", - "failure": "Errorea araua sortzerakoan" - }, "label": { - "blockAll": "Blokeatu dena", - "policyDisabled": "Desgaituta", - "policyEnabled": "Gaituta", - "silenceActivity": "Isilarazi aktibitatea", - "silenceNotifications": "Isilarazi jakinarazpenak", - "customizeRule": "Edo pertsonalizatu zure araua", - "policyReason": "Arrazoia", - "rejectMedia": "Baztertu multimedia" + "search": "Bilatu" }, - "tooltip": { - "blockAll": "Blokeatu kontu edo domeinu honetako guztia. Erakundearekin edozein harreman ekidingo du, eta lotutako edukiak ezabatu (igoerak, liburutegiak, jarraitzeak, etab.)", - "rejectMedia": "Ez deskargatu multimedia fitxategirik (audioa, albumaren azala, kontuaren avatarra...) kontu edo domeinu honetatik.", - "summary": "Azaldu zergatik aplikatzen duzun gidalerro hau: arau hau zergatik gehitu duzun gogoratzen lagunduko dizu. Zure instantziaren konfigurazioaren arabera publikoki erakutsi liteke erabiltzaileei zein moderazio-arau dauden ulertzen laguntzeko.", - "silenceActivity": "Ezkutatu kontua edo domeinuaren edukia, jarraitzaileentzat ezik.", - "silenceNotifications": "Eragotzi kontu edo domeinuak jakinarazpenak abiaraztea, jarraitzaileengandik izan ezik.", - "isActive": "Erabili ezarpen hau gidalerroa aldi baterako gaitu/desgaitzeko, guztiz kendu gabe." + "link": { + "local": "Kontu lokala" }, - "button": { - "cancel": "Ezeztatu", - "create": "Sortu", - "delete": "Ezabatu", - "confirm": "Ezabatu moderazio-araua", - "update": "Eguneratu" + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" }, - "modal": { - "delete": { - "header": "Moderazio-arau hau ezabatu nahi duzu?", - "content": { - "warning": "Ekintza hau ezin da desegin." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Gehitu oharra" + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" }, "placeholder": { - "summary": "Deskribatu zer ekintza egin diren edo horiekin lotutako beste edozein eguneraketa…" + "search": "Bilatu domeinuaren, erabiltzaile-izenaren, biografiaren arabera" }, - "header": { - "failure": "Errorea oharra bidaltzerakoan" + "table": { + "account": { + "header": { + "domain": "Domeinua", + "firstSeen": "Lehen aldiz ikusia", + "lastSeen": "Ikusi zen azken aldia", + "moderationRule": "Moderazio arauaren pean", + "name": "Izena", + "uploads": "Igoerak" + }, + "moderationRule": "Bai" + } } }, "DomainsTable": { @@ -2262,6 +2392,16 @@ "label": "Kendu baimenendutakoen zerrendatik" } }, + "empty": { + "noPods": "Ez da beste instantziarik aurkitu" + }, + "label": { + "inList": "Onartuen zerrendan dago", + "search": "Bilatu" + }, + "link": { + "list": "Domeinu hau zure onartuen zerrendan dago" + }, "option": { "all": "Dena", "no": "Ez", @@ -2275,76 +2415,32 @@ }, "label": "Ordena" }, - "table": { - "domain": { - "header": { - "firstSeen": "Lehen aldiz ikusia", - "name": "Izena", - "receivedMessages": "Jasotako mezuak", - "moderationRule": "Moderazio arauaren pean", - "users": "Erabiltzaileak" - }, - "moderationRule": "Bai" - } - }, - "label": { - "inList": "Onartuen zerrendan dago", - "search": "Bilatu" - }, - "empty": { - "noPods": "Ez da beste instantziarik aurkitu" + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" }, "placeholder": { "search": "Bilatu izenaren arabera…" }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - }, - "link": { - "list": "Domeinu hau zure onartuen zerrendan dago" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domeinua", "firstSeen": "Lehen aldiz ikusia", - "lastSeen": "Ikusi zen azken aldia", - "name": "Izena", "moderationRule": "Moderazio arauaren pean", - "uploads": "Igoerak" + "name": "Izena", + "receivedMessages": "Jasotako mezuak", + "users": "Erabiltzaileak" }, "moderationRule": "Bai" } - }, - "link": { - "local": "Kontu lokala" - }, - "action": { - "purge": { - "label": "Kendu" - } - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, erabiltzaile-izenaren, biografiaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" } }, "InstancePolicyCard": { + "button": { + "edit": "Editatu" + }, + "header": { + "rule": "Araua" + }, "label": { "blockAll": "Blokeatu dena", "muteActivity": "Isilarazi aktibitatea", @@ -2352,15 +2448,49 @@ "reason": "Arrazoia", "rejectMedia": "Baztertu multimedia" }, - "button": { - "edit": "Editatu" - }, "status": { "enabled": "Gaituta", "paused": "Pausatuta" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Ezabatu moderazio-araua", + "create": "Sortu", + "delete": "Ezabatu", + "update": "Eguneratu" }, "header": { - "rule": "Araua" + "addRule": "Gehitu moderazio-arau berri bat", + "editRule": "Editatu moderazio-arauak", + "failure": "Errorea araua sortzerakoan" + }, + "label": { + "blockAll": "Blokeatu dena", + "customizeRule": "Edo pertsonalizatu zure araua", + "policyDisabled": "Desgaituta", + "policyEnabled": "Gaituta", + "policyReason": "Arrazoia", + "rejectMedia": "Baztertu multimedia", + "silenceActivity": "Isilarazi aktibitatea", + "silenceNotifications": "Isilarazi jakinarazpenak" + }, + "modal": { + "delete": { + "content": { + "warning": "Ekintza hau ezin da desegin" + }, + "header": "Moderazio-arau hau ezabatu nahi duzu?" + } + }, + "tooltip": { + "blockAll": "Blokeatu kontu edo domeinu honetako guztia. Erakundearekin edozein harreman ekidingo du, eta lotutako edukiak ezabatu (igoerak, liburutegiak, jarraitzeak, etab.)", + "isActive": "Erabili ezarpen hau gidalerroa aldi baterako gaitu/desgaitzeko, guztiz kendu gabe.", + "rejectMedia": "Ez deskargatu multimedia fitxategirik (audioa, albumaren azala, kontuaren avatarra...) kontu edo domeinu honetatik.", + "silenceActivity": "Ezkutatu kontua edo domeinuaren edukia, jarraitzaileentzat ezik.", + "silenceNotifications": "Eragotzi kontu edo domeinuak jakinarazpenak abiaraztea, jarraitzaileengandik izan ezik.", + "summary": "Azaldu zergatik aplikatzen duzun gidalerro hau: arau hau zergatik gehitu duzun gogoratzen lagunduko dizu. Zure instantziaren konfigurazioaren arabera publikoki erakutsi liteke erabiltzaileei zein moderazio-arau dauden ulertzen laguntzeko." } }, "InstancePolicyModal": { @@ -2370,161 +2500,130 @@ }, "modal": { "manage": { - "header": "Kudeatu { obj }(r)en moderazio arauak", "content": { "warning": "Entitate honek moderazio arau espezifikoak ditu" - } + }, + "header": "Kudeatu { obj }(r)en moderazio arauak" } } }, + "NoteForm": { + "button": { + "add": "Gehitu oharra" + }, + "header": { + "failure": "Errorea oharra bidaltzerakoan" + }, + "placeholder": { + "summary": "Deskribatu zer ekintza egin diren edo horiekin lotutako beste edozein eguneraketa…" + } + }, "NotesThread": { "button": { "delete": "Ezabatu" }, "modal": { "delete": { - "header": "Ohar hau ezabatu nahi duzu?", "content": { "warning": "Oharra ezabatuko da. Ekintza hau ezin da desegin." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Kontua", - "albums": "Albumak", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izena", - "tracks": "Pistak" + }, + "header": "Ohar hau ezabatu nahi duzu?" } } }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" + "ReportCard": { + "button": { + "confirmDelete": "Ezabatu", + "delete": "Ezabatu salatutako objektua", + "resolve": "Ebatzi", + "unresolve": "Konpondu gabe" }, - "label": "Ordena" + "header": { + "actions": "Akzioak", + "message": "Mezua", + "notes": "Barne oharrak", + "reportedObject": "Salatutako objektua" + }, + "link": { + "moderation": "Ireki moderazio interfazean", + "publicPage": "Ikusi orrialde publikoa", + "report": "Salatu { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Honek txostenarekin erlazionatutako objektua ezabatuko du. Ezabaketa ezin da desegin." + }, + "header": "Salatutako objektua ezabatu nahi duzu?" + } + }, + "notApplicable": "Daturik gabe", + "table": { + "object": { + "account": "Kontua", + "domain": "Domeinua", + "local": "Lokala", + "owner": "Jabea", + "type": "Mota" + }, + "report": { + "category": "Kategoria", + "creationDate": "Sortze data", + "submittedBy": "Bidaltzailea" + }, + "status": { + "assignedTo": "Honi esleituta", + "internalNotes": "Barne oharrak", + "resolutionDate": "Ebazpenaren data", + "resolved": "Ebatzita", + "status": "Egoera", + "unresolved": "Konpondu gabea" + } + }, + "warning": { + "objectDeleted": "Txosten honekin lotutako objektua ezabatu da." + } }, - "label": { - "category": "Kategoria", - "search": "Bilatu" - }, - "link": { - "local": "Lokala", - "moderation": "Ireki moderazio interfazean" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenaren, kontuaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + "UserRequestCard": { + "button": { + "approve": "Onartu", + "reject": "Ukatu" + }, + "header": { + "actions": "Akzioak", + "notes": "Barne oharrak", + "signup": "Mezua" + }, + "link": { + "request": "Eskatu { id }" + }, + "message": { + "signup": "Erabiltzaile honek zure instantzian erregistratu nahi du." + }, + "notApplicable": "Daturik gabe", + "table": { + "request": { + "creationDate": "Sortze data", + "submittedBy": "Bidaltzailea" + }, + "status": { + "approved": "Onartuta", + "assignedTo": "Honi esleituta", + "internalNotes": "Barne oharrak", + "pending": "Zain", + "refused": "Ukatuta", + "resolutionDate": "Ebazpen-data", + "status": "Egoera" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Kontuaren egoera", - "email": "Eposta", - "lastActivity": "Azken jarduera", - "permissions": "Baimenak", - "signup": "Erregistratu", - "status": "Egoera", - "username": "Erabiltzaile-izena" - }, - "accountStatus": { - "active": "Aktibo", - "inactive": "Ez-aktiboa" - }, - "status": { - "admin": "Admin", - "regular": "Erabiltzaile arrunta", - "staff": "Taldeko kidea" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "permission": { - "library": "Liburutegia", - "moderation": "Moderazioa", - "settings": "Ezarpenak" - }, - "notApplicable": "Daturik gabe", - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, izenaren… arabera" - }, - "pagination": { - "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Dena", - "expired": "Iraungita/erabilita", - "open": "Ireki" - }, - "table": { - "invitation": { - "header": { - "code": "Kodea", - "creationDate": "Sortze data", - "expirationDate": "Iraungitze data", - "owner": "Jabea", - "status": "Egoera" - } - } - }, - "action": { - "delete": "Ezabatu" - }, - "label": { - "expired": "Iraungita", - "unused": "Ez da erabiltzen", - "search": "Bilatu", - "status": "Egoera", - "used": "Erabilita" - }, - "ordering": { - "label": "Ordena" - }, - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, kodearen… arabera" - }, - "pagination": { - "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" - } - }, "InvitationForm": { "button": { "clear": "Garbitu", "new": "Lortu gonbidapen berria" }, - "table": { - "invitation": { - "header": { - "code": "Kodea", - "link": "Partekatu esteka" - } - } - }, "header": { "failure": "Errorea gonbidapena sortzerakoan" }, @@ -2533,523 +2632,59 @@ }, "placeholder": { "invitation": "Utzi hutsik ausazko kode batentzat" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Ekintzak", - "label": "Eremuaren etiketa", - "type": "Eremu mota", - "required": "Beharrezkoa" - }, - "type": { - "long": "Testu luzea", - "short": "Testu laburra" - }, - "required": { - "false": "Ez", - "true": "Bai" - } - } - }, - "button": { - "add": "Gehitu eremu berri bat", - "edit": "Editatu formularioa", - "preview": "Formularioaren aurrebista" - }, - "label": { - "additionalField": "Eremu gehigarria", - "additionalFields": "Eremu gehigarriak", - "delete": "Ezabatu", - "helpText": "Laguntza testua", - "moveDown": "Eraman behera", - "moveUp": "Eraman gora" - }, - "help": { - "additionalFields": "Formularioan erakusteko eremu gehigarriak. Soili eskuzko izen-emate baliozkotzea gaituta badago erakutsiko da.", - "helpText": "Izena emateko formularioaren hasieran bistaratuko den aukerako testua." - } - }, - "SettingsGroup": { - "header": { - "image": "Uneko irudia", - "error": "Errorea ezarpenak gordetzerakoan" - }, - "button": { - "save": "Gorde" - }, - "message": { - "success": "Ezarpenak arrakastaz eguneratuta." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Dena" - }, - "label": { - "category": "Kategoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Salaketa anonimoak desgaituta daude. Hasi saioa salaketa bidaltzeko.", - "modal": "Objektu hau salatu nahi al duzu?", - "submissionFailure": "Errorea salaketa bidaltzerakoan" - }, - "button": { - "cancel": "Ezeztatu", - "submit": "Bidali txostena" - }, - "label": { - "email": "Eposta", - "forwardToDomain": "Bidali { domain} domeinura", - "message": "Mezua" - }, - "description": { - "forwardToDomain": "Bidali zure txostenaren kopia anonimatua elementu hau hartzen duen zerbitzarira.", - "message": "Erabili eremu hau moderatzaileari zure txostenari buruzko informazio gehigarria emateko.", - "modal": "Erabili formulario hau moderazio taldeari txosten bat bidaltzeko.", - "email": "Eposta helbide hau erabiliko dugu salaketa hau dela eta zurekin harremanetan jarri behar badugu." - }, - "message": { - "submissionSuccess": "Salaketa arrakastaz bidali da, esker aunitz" - } - }, - "FilterModal": { - "button": { - "cancel": "Ezeztatu", - "hide": "Ezkutatu edukia" - }, - "message": { - "success": "Edukien iragazkia behar bezala gehitu da" - }, - "header": { - "modal": "\"{ name }\" artistaren edukia ezkutatu nahi duzu?", - "failure": "Errorea iragazkia sortzerakoan" - }, - "warning": { - "createFilter": { - "listItem2": "\"Azken aldian gehituta\" widget-ean", - "listItem3": "Artista eta albumen zerrendetan", - "listItem1": "Beste erabiltzaileen gogokoetan eta entzundakoen historian", - "listItem4": "Irratien iradokizunetan", - "listIntro": "Artista honen pista, album eta erabiltzaile aktibitatea ez dituzu ikusiko hemendik aurrera:" - } - }, - "help": { - "createFilter": "Zure iragazkiak nahi duzunean kudeatu eta eguneratu ditzakezu kontuaren ezarpenetan." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Errore bat gertatu da datuak freskatzen saiatzean:", - "success": "Datuak behar bezala freskatu dira urruneko zerbitzaritik.", - "pending": "Freskatze eskaera ez da garaiz prozesatu gure zerbitzarian. Beranduago prozesatuko da.", - "skipped": "Urruneko zerbitzariak erantzun du, baina Funkwhalek ez du itzulitako datuen euskarririk." - }, - "table": { - "error": { - "value": { - "httpError": "HTTP errorea gertatu da urruneko zerbitzariarekin harremanetan jartzean", - "invalidAttributesError": "Urruneko zerbitzariak itzulitako datuek atributu baliogabeak edo faltan ditu", - "connectionError": "Ezin izan da urruneko zerbitzarira konektatu", - "httpStatus": "Urruneko zerbitzariak HTTP { status } egoerarekin erantzun du", - "timeoutError": "Urruneko zerbitzariak ez du behar bezain azkar erantzun", - "invalidJsonError": "Urruneko zerbitzariak baliogabeko JSON edo JSON-LD datuak itzuli ditu", - "unknownError": "Errore ezezaguna" - }, - "label": { - "detail": "Errorearen xehetasuna", - "type": "Errore mota" - } - } - }, - "button": { - "close": "Itxi", - "reload": "Itxi eta freskatu orria" - }, - "header": { - "saveFailure": "Errorea ezarpenak gordetzerakoan", - "failure": "Freskatu errorea", - "pending": "Freskatu zain daudenak", - "success": "Arrakastaz freskatua", - "skipped": "Freskatzea saltatu da", - "refresh": "Objektua freskatzen urruneko zerbitzaritik…" - }, - "loader": { - "fetchRequest": "Bilaketa eskatzen…", - "awaitingResult": "Erantzunen zain…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Ez da bat datorren liburutegirik aurkitu." - }, - "button": { - "showMore": "Erakutsi gehiago" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Audio erreproduzigailuaren laster-teklak", - "clearQueue": "Garbitu ilara", - "decreaseVolume": "Jaitsi bolumena", - "expandQueue": "Zabaldu ilara/erreproduzigailu ikuspegia", - "increaseVolume": "Igo bolumena", - "playPause": "Pausatu/erreproduzitu uneko pista", - "playNext": "Erreproduzitu hurrengo pista", - "playPrevious": "Erreproduzitu aurreko pista", - "seekBack30": "Bilatu atzeraka 30s", - "seekBack5": "Bilatu atzeraka 5s", - "seekForward30": "Bilatu aurreraka 30s", - "seekForward5": "Bilatu aurreraka 5s", - "shuffleQueue": "Nahasi ilara", - "toggleFavorite": "Txandakatu gogokoa", - "toggleMute": "Txandakatu mututzea", - "toggleLoop": "Txandakatu ilararen begizta" - }, - "general": { - "focus": "Fokuratu bilaketa-barra", - "label": "Lasterbide orokorrak", - "show": "Erakutsi erabilgarri dauden laster-tekla guztiak", - "unfocus": "Kendu fokua bilaketa-barrari" - } - }, - "button": { - "close": "Itxi" - }, - "header": { - "modal": "Laster-teklak" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Ezeztatu", - "submit": "Bidali" - }, - "header": { - "chooseInstance": "Zure instantzia hautatu", - "failure": "Ezin da konektatu emandako URLarekin", - "suggestions": "Iradokitako aukerak" - }, - "label": { - "url": "Instantziaren URLa" - }, - "help": { - "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", - "serverDown": "Zerbitzaria erorita egon daiteke", - "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat." - }, - "message": { - "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" - } - }, - "Queue": { - "button": { - "clear": "Garbitu", - "close": "Itxi", - "stopRadio": "Gelditu irratia" - }, - "label": { - "duration": "Iraupena", - "addArtistContentFilter": "Ezkutatu artista honen edukia…", - "next": "Hurrengo pista", - "pause": "Pausatu", - "play": "Erreproduzitu", - "previous": "Aurreko pista", - "queue": "Ilara", - "remove": "Kendu", - "restart": "Berrasi pista" - }, - "message": { - "radio": "Abesti berriak hemen gehituko dira automatikoki.", - "automaticPlay": "Hurrengo pista automatikoki erreproduzituko da segundo batzuk barru…" - }, - "header": { - "failure": "Pista ezin da kargatu", - "radio": "Irrati bat martxan duzu" - }, - "meta": { - "queuePosition": "Pista { index } / { length }" - }, - "warning": { - "connectivity": "Konexio arazo bat izan dezakezu." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Kopiatu" - }, - "title": "Erakutsi/ezkutatu pasahitza", - "message": { - "copy": "Testua arbelera kopiatu da!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Editatu" - } - }, - "Button": { - "startRadio": "Erreproduzitu irratia", - "stopRadio": "Gelditu irratia" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Errorea objektua eskuratzerakoan" - }, - "button": { - "fediverse": "Fedibertsoa", - "rss": "RSS", - "search": "Bilatu" - }, - "label": { - "fediverse": { - "fieldLabel": "Fedibertsoko objektua", - "title": "Harpidetu Fedibertsoan ostatatutako podcast batera" - }, - "rss": { - "fieldPlaceholder": "https://adibidea.eus/rss.xml", - "fieldLabel": "RSS jarioaren kokapena", - "title": "Harpidetu podcast baten RSS jariora" - } - }, - "warning": { - "unsupported": "Objektu mota hau ez da onartzen oraindik" - }, - "error": { - "fetchFailed": "Objektu hau ezin da berreskuratu" - }, - "description": { - "fediverse": "Erabili formulario hau fedibertsoan ostatatutako kanal batera harpidetzeko.", - "rss": "Erabili formulario hau RSS jario batera bere URLaren bidez harpidetzeko." - } - }, - "PageNotFound": { - "link": { - "home": "Joan hasiera orrira" - }, - "title": "Orrialdea ez da aurkitu", - "header": { - "pageNotFound": "Orrialdea ez da aurkitu!" - }, - "message": { - "pageNotFound": "Sentitzen dugu, eskatu duzun orria ez da existitzen:" - } - }, - "vui": { - "Pagination": { - "next": "Hurrengo orria", - "label": "Orrialdekatzea", - "previous": "Aurreko orria" - } - }, - "tags": { - "List": { - "button": { - "more": "Erakutsi etiketa 1 gehiago | Erakutsi { n } etiketa gehiago" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "listenings": "Entzunaldi { n } | { n } entzunaldi", - "subscribers": "Harpidetu { n } | { n } harpidetu", - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "channelEpisodes": "Saio guztiak", - "mirrored": "{ domain } domeinutik ispilatua", - "moderation": "Ireki moderazio interfazean", - "channelOverview": "Informazio orokorra", - "channelTracks": "Pistak", - "domainView": "Ikusi { domain }(e)n" - }, - "header": { - "artistChannel": "Artistaren kanala", - "podcastChannel": "Podcast kanala" - }, - "button": { - "cancel": "Ezeztatu", - "confirm": "Ezabatu", - "delete": "Ezabatu…", - "edit": "Editatu…", - "embed": "Txertatu", - "play": "Erreproduzitu", - "updateChannel": "Eguneratu kanala", - "upload": "Igo" - }, - "title": "Kanala", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Kopiatu eta itsatsi URL hau zure podcast aplikazio gogokoenean:" - }, - "header": "Harpidetu RSS bidez" - }, - "fediverse": { - "content": { - "help": "Mastodon edo fedibertsoko beste aplikazioren bat erabiltzen ari bazara, kontu honetara harpidetu zaitezke:" - }, - "header": "Harpidetu Fedibertsoan" - }, - "funkwhale": { - "header": "Harpidetu Funkwhalen" - }, - "header": "Harpidetu kanal honetara" }, - "delete": { - "header": "Kanal hau ezabatu nahi duzu?", - "content": { - "warning": "Kanal hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu artista honen lana zure webgunean" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Gehitu berria", - "erroredUploads": "Ikusi huts egindako igoerak", - "skippedUploads": "Ikusi saltatutako igoerak" - }, - "header": { - "albums": "Albumak", - "latestEpisodes": "Azken saioak", - "latestTracks": "Azken abestiak", - "series": "Serieak", - "uploadsFailure": "Igoera batzuk ezin izan dira argitaratu", - "uploadsProcessing": "Igoerak prozesatzen", - "uploadsSuccess": "Igoerak arrakastaz argitaratuta" - }, - "meta": { - "progress": "Prozesatutako igoerak:" - }, - "message": { - "processing": "Funkwhale zure igoerak prozesatzen ari da eta laster izango dira prest." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Gehitu berria" - }, - "button": { - "cancel": "Ezeztatu", - "subscribe": "Harpidetu" - }, - "placeholder": { - "search": "Iragazi izenaren arabera…" - }, - "title": "Harpidetutako kanalak", - "modal": { - "subscription": { - "header": "Harpidetza" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "details": "Liburutegiaren xehetasunak" - }, - "label": { - "size": "Liburutegi honetako fitxategien guztizko tamaina" - }, - "button": { - "upload": "Igo" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } erabilita baimendutako { max }e(ta)tik", - "errored": "Erroredun fitxategiak", - "pending": "Fitxategiak faltan", - "skipped": "Saltatutako fitxategiak" - }, - "header": { - "currentUsage": "Oraingo erabilera" - }, - "loading": { - "currentUsage": "Erabilpen datuak kargatzen…" - }, - "button": { - "purge": "Kendu" - }, - "modal": { - "purgeErrored": { - "header": "Erroreak emandako fitxategiak kendu?", - "content": { - "description": "Igotako baina oraindik zerbitzariak prozesatu ezin izan dituen pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - }, - "purgePending": { - "header": "Zain dauden fitxategiak kendu?", - "content": { - "description": "Igotako baina oraindik prozesatu gabeko pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - }, - "purgeSkipped": { - "header": "Saltatutako fitxategiak kendu?", - "content": { - "description": "Inportazio prozesuan igotako baina saltatutako pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - } - }, - "link": { - "viewFiles": "Ikusi fitxategiak" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Albuma", - "artist": "Artista", - "duration": "Iraupena", - "importStatus": "Inportazioaren egoera", - "size": "Tamaina", - "title": "Izenburua", - "uploadDate": "Igoera data" + "code": "Kodea", + "link": "Partekatu esteka" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Ezabatu" + }, + "label": { + "expired": "Iraungita", + "search": "Bilatu", + "status": "Egoera", + "unused": "Ez da erabiltzen", + "used": "Erabilita" }, "option": { - "status": { - "all": "Dena", - "draft": "Zirriborroa", - "failed": "Huts egin du", - "finished": "Amaituta", - "pending": "Zain", - "skipped": "Saltatuta" - } + "all": "Dena", + "expired": "Iraungita/erabilita", + "open": "Ireki" }, + "ordering": { + "label": "Ordena" + }, + "pagination": { + "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" + }, + "placeholder": { + "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, kodearen arabera" + }, + "table": { + "invitation": { + "header": { + "code": "Kodea", + "creationDate": "Sortze data", + "expirationDate": "Iraungitze data", + "owner": "Jabea", + "status": "Egoera", + "user": "Erabiltzailea" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Bilatu" + }, + "notApplicable": "Daturik gabe", "ordering": { "direction": { "ascending": "Gorantza", @@ -3058,397 +2693,579 @@ }, "label": "Ordena" }, - "action": { - "delete": "Ezabatu", - "restartImport": "Hasi berriro inportazioa" + "pagination": { + "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" }, - "label": { - "importStatus": "Inportazioaren egoera", - "search": "Bilatu" - }, - "notApplicable": "Daturik gabe", - "empty": { - "noTracks": "Ez da pistarik gehitu oraindik liburutegi honetara" + "permission": { + "library": "Liburutegia", + "moderation": "Moderazioa", + "settings": "Ezarpenak" }, "placeholder": { - "search": "Bilatu izenburuaren, artistaren, albumaren… arabera" + "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, izenaren arabera" }, - "button": { - "showStatus": "Erakutsi pista honen igoeraren egoerari buruzko informazioa" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "Home": { - "link": { - "createLibrary": "Liburutegi berria sortu" - }, - "loading": { - "libraries": "Liburutegiak kargatzen…" - }, - "empty": { - "noLibrary": "Badirudi ez duzula liburutegirik oraindik, bada bat sortzeko ordua." - }, - "header": { - "libraries": "Nire liburutegiak" - } - }, - "Form": { - "button": { - "create": "Liburutegia sortu", - "delete": "Ezabatu", - "confirm": "Liburutegia ezabatu", - "update": "Eguneratu liburutegia" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu?", - "content": { - "warning": "Liburutegia eta bere pista guztiak ezabatuko dira. Ekintza hau ezin da desegin." + "table": { + "user": { + "accountStatus": { + "active": "Aktibo", + "inactive": "Ez-aktiboa" + }, + "header": { + "accountStatus": "Kontuaren egoera", + "email": "Eposta", + "lastActivity": "Azken jarduera", + "permissions": "Baimenak", + "signup": "Erregistratu", + "status": "Egoera", + "username": "Erabiltzaile-izena" + }, + "status": { + "admin": "Admin", + "regular": "Erabiltzaile arrunta", + "staff": "Taldeko kidea" } } - }, - "label": { - "description": "Deskribapena", - "name": "Izena", - "visibility": "Ikusgaitasuna" - }, - "header": { - "failure": "Errorea" - }, - "description": { - "library": "Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta lagunekin partekatu.", - "visibility": "Zure liburutegia besteekin partekatu dezakezu, ikusgaitasuna edozein dela ere." - }, - "message": { - "libraryCreated": "Liburutegia sortuta", - "libraryDeleted": "Liburutegia ezabatuta", - "libraryUpdated": "Liburutegia eguneratuta" - }, - "placeholder": { - "name": "Nire liburutegi txundigarria", - "description": "Liburutegi honetan nire musika pertsonala dago, espero dut gustuko izango duzula." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista", - "failedTracks": "Erroredun pistak:", - "lastUpdate": "Azken eguneraketa:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." - }, - "header": "Liburutegi hau jarraitzeari utzi?" - } - }, - "button": { - "cancel": "Utzi jarraitzeko eskaera", - "follow": "Jarraitu", - "pending": "Jarraipen-eskaera onarpenaren zain", - "unfollow": "Utzi jarraitzeari" - }, - "link": { - "scanDetails": "Xehetasunak", - "scan": "Eskaneatu orain" - }, - "label": { - "scanFailure": "Arazoa eskaneatzean", - "scanPending": "Eskaneatzeko zain", - "scanSuccess": "Eskaneatzea amaituta", - "scanPartialSuccess": "Erroreak eskaneatzean", - "scanProgress": "Eskaneatzen… ({ progress }%)", - "sharingLink": "Esteka partekatzen" - }, - "message": { - "scanLaunched": "Eskaneatzea abiarazita", - "scanSkipped": "Eskaneatzea saltatuta (aurreko eskaneatzea oso berria da)" - }, - "tooltip": { - "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", - "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" - } - }, - "ScanForm": { - "header": { - "failure": "Ezin izan da eskuratu urruneko liburutegia" - }, - "placeholder": { - "url": "Idatzi liburutegiaren URLa" - }, - "label": { - "search": "Bilatu urruneko liburutegia" - }, - "button": { - "submit": "Bidali bilaketa" - } - }, - "Home": { - "header": { - "knownLibraries": "Liburutegi ezagunak", - "remoteLibraries": "Urruneko liburutegiak" - }, - "loading": { - "remoteLibraries": "Urruneko liburutegiak kargatzen…" - }, - "button": { - "refresh": "Freskatu" - }, - "description": { - "remoteLibraries": "Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak diren bitartean." - } - } - }, - "Home": { - "title": "Gehitu eta kudeatu edukia", - "description": { - "follow": "Jarraitu beste erabiltzaile batzuen liburutegiak musika berria eskuratzeko. Liburutegi publikoak zuzenean jarraitu daitezke, baina liburutegi pribatu bat jarraitzeko bere sortzailearen onespena behar da.", - "channel": { - "1": "Musikaria edo podcast egilea bazara, kanalak zuretzat diseinatuta daude!", - "2": "Partekatu zure lana publikoki eta lortu harpidetzak Funkwhalen, fedibertsoan edo edozein podcast aplikaziotan." - }, - "upload": "Igo zure musikaren liburutegi pertsonala Funkwhalera edozein lekutatik gozatu eta lagun eta familiarekin partekatzeko." - }, - "header": { - "follow": "Jarraitu urruneko liburutegiak", - "channel": "Argitaratu zure lana kanal batean", - "upload": "Igo hirugarrengoen edukia liburutegi batera" - }, - "button": { - "start": "Hasi erabiltzen" - }, - "help": { - "uploadQuota": "Instantzia honek {quota}eko biltegiratzea eskaintzen dio erabiltzaile bakoitzari." - } - }, - "Base": { - "title": "Edukia sartu", - "link": { - "libraries": "Liburutegiak", - "tracks": "Pistak" - }, - "menu": { - "secondary": "Bigarren mailako menua" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "moderation": "Ireki moderazio interfazean", - "owner": "Jabea { username } da", - "tracks": "Pistak", - "domain": "Ikusi { domain }(e)n" - }, - "button": { - "edit": "Editatu", - "upload": "Igo" - }, - "title": "Liburutegia", - "label": { - "private": "Pribatua", - "public": "Publikoa", - "instance": "Mugatuta", - "sharingLink": "Esteka partekatzen" - }, - "description": { - "sharingLink": "Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea eska dezaten instantziaren bilaketa barran kopiatu eta itsatsiz." - }, - "tooltip": { - "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", - "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu", - "instance": "Liburutegi hau instantzia honetako erabiltzaileetara mugatua dago" - } - }, - "Edit": { - "button": { - "accept": "Onartu", - "reject": "Baztertu" - }, - "table": { - "action": { - "status": { - "accepted": "Onartuta", - "pending": "Onarpenaren zain", - "rejected": "Baztertuta" - }, - "header": { - "action": "Akzioa", - "date": "Data", - "status": "Egoera", - "user": "Erabiltzailea" - } - } - }, - "header": { - "followers": "Jarraitzaileak", - "libraryContents": "Liburutegiaren edukiak" - }, - "loading": { - "followers": "Jarraitzaileak kargatzen…" - }, - "empty": { - "noFollowers": "Inor ez da liburutegi hau jarraitzen ari" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - }, - "DetailOverview": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - }, - "DetailTracks": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - } - }, - "auth": { - "ProfileBase": { - "title": "{ username }-(r)en profila", - "link": { - "activity": "Jarduera", - "moderation": "Ireki moderazio interfazean", - "overview": "Informazio orokorra", - "domainView": "Ikusi { domain }(e)n" - }, - "label": { - "self": "Hau zu zara!" - } - }, - "PasswordReset": { - "label": { - "email": "Kontuaren eposta" - }, - "button": { - "requestReset": "Eskatu pasahitza berrezartzeko" - }, - "link": { - "back": "Itzuli sarrerara" - }, - "placeholder": { - "email": "Idatzi zure kontuarekin lotutako eposta helbidea" - }, - "header": { - "failure": "Errorea pasahitza berrezartzerakoan", - "reset": "Berrezarri pasahitza" - }, - "title": "Berrezarri pasahitza", - "help": { - "form": "Erabili formulario hau pasahitza berrezartzea eskatzeko. Emandako eposta helbidera mezu bat bidaliko dizugu, zure pasahitza berrezartzeko argibideekin." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Gehitu berria" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Artistaren kanala" - }, - "header": "Sortu kanala", - "podcast": { - "header": "Podcast kanala" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Ezeztatu", - "createChannel": "Sortu kanala", - "next": "Hurrengo pausoa", - "previous": "Aurreko pausoa" + "hide": "Ezkutatu edukia" }, "header": { - "channels": "Kanalak", - "sharedLibraries": "Erabiltzaile honek ondorengo liburutegiak partekatu ditu", - "libraries": "Erabiltzaileen liburutegiak" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Itzuli sarrerara", - "login": "Jarraitu saio hasierara" + "failure": "Errorea iragazkia sortzerakoan", + "modal": "\"{ name }\" artistaren edukia ezkutatu nahi duzu?" }, - "title": "Zure pasahitza aldatu", - "header": { - "failure": "Errorea zure pasahitza aldatzerakoan", - "success": "Pasahitza arrakastaz eguneratu da" + "help": { + "createFilter": "Zure iragazkiak nahi duzunean kudeatu eta eguneratu ditzakezu kontuaren ezarpenetan." }, "message": { - "requestSent": "Aurreko pausoan emandako eposta helbidea zuzena bada eta erabiltzaile kontu bati lotuta badago, datozen minututan eposta mezu bat jaso beharko zenuke pasahitza berrezartzeko argibideekin.", - "success": "Pasahitza arrakastaz eguneratu da." + "success": "Edukien iragazkia behar bezala gehitu da" }, + "warning": { + "createFilter": { + "listIntro": "Artista honen pista, album eta erabiltzaile aktibitatea ez dituzu ikusiko hemendik aurrera:", + "listItem1": "Beste erabiltzaileen gogokoetan eta entzundakoen historian", + "listItem2": "\"Azken aldian gehituta\" widget-ean", + "listItem3": "Artista eta albumen zerrendetan", + "listItem4": "Irratien iradokizunetan" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Pasahitz berria" + "category": "Kategoria" }, + "option": { + "all": "Dena" + } + }, + "ReportModal": { "button": { - "update": "Eguneratu zure pasahitza" - } - }, - "EmailConfirm": { - "title": "Egiaztatu zure e-posta helbidea", - "label": { - "confirmationCode": "Berrespen kodea" + "cancel": "Ezeztatu", + "submit": "Bidali txostena" + }, + "description": { + "email": "Eposta helbide hau erabiliko dugu salaketa hau dela eta zurekin harremanetan jarri behar badugu.", + "forwardToDomain": "Bidali zure txostenaren kopia anonimatua elementu hau hartzen duen zerbitzarira.", + "message": "Erabili eremu hau moderatzaileari zure txostenari buruzko informazio gehigarria emateko.", + "modal": "Erabili formulario hau moderazio taldeari txosten bat bidaltzeko" + }, + "error": { + "nodeinfoFetch": "Ezin da lortu nodoaren informazioa: {error}" }, "header": { - "failure": "Ezin izan da berretsi zure helbide elektronikoa", - "success": "E-posta helbidea egiaztatu da" + "disabled": "Salaketa anonimoak desgaituta daude. Hasi saioa salaketa bidaltzeko.", + "modal": "Objektu hau salatu nahi al duzu?", + "submissionFailure": "Errorea salaketa bidaltzerakoan" }, - "link": { - "login": "Jarraitu saio hasierara", - "back": "Itzuli saio hasierara" + "label": { + "email": "Eposta", + "forwardToDomain": "Bidali { domain} domeinura", + "message": "Mezua" }, "message": { - "success": "Zerbitzua mugarik gabe erabil dezakezu orain." - } - }, - "Signup": { - "header": { - "createAccount": "Sortu Funkwhale kontua" - }, - "title": "Erregistratu" - }, - "Login": { - "title": "Hasi saioa", - "header": { - "login": "Sartu zure Funkwhale kontura" - } - }, - "Callback": { - "header": { - "loggingIn": "Saioa hasten…" - } - }, - "Plugins": { - "title": "Kudeatu pluginak" - }, - "ProfileActivity": { - "header": { - "playlists": "Zerrendak", - "recentlyFavorited": "Azken aldian gogokoa", - "recentlyListened": "Azken aldian entzuna" + "submissionSuccess": "Salaketa arrakastaz bidali da, esker aunitz" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Onartu", + "markRead": "Markatu irakurrita", + "markUnread": "Markatu irakurri gabe", + "reject": "Baztertu" + }, + "message": { + "libraryAcceptFollow": "{ username }-(e)k zure jarraipen-eskaera onartu du \"{ library }\" liburutegian", + "libraryFollow": "{ username } zure \"{ library }\" liburutegia jarraitzen hasi da", + "libraryPendingFollow": "{ username }-(e)k zure \"{ library }\" liburutegia jarraitu nahi du", + "libraryReject": "{username} erabiltzailearen \"{liburutegia}\" jarraitzeko eskaera ukatu duzu" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "Editor": { + "button": { + "addDuplicate": "Gehitu halere", + "clear": "Garbitu zerrenda", + "copy": "Kopiatu uneko ilara erreprodukzio-zerrenda honetara", + "insertFromQueue": "Gehitu ilaratik (abesti { n }) | Gehitu ilaratik ({ n } abesti)" + }, + "error": { + "sync": "Errorea gertatu da aldaketak gordetzerakoan" + }, + "header": { + "editor": "Zerrenda editorea" + }, + "help": { + "reorder": "Arrastatu eta jaregin lerroak abestiak zerrendan berrordenatzeko" + }, + "loading": { + "sync": "Aldaketak zerbitzariarekin sinkronizatzen…" + }, + "message": { + "sync": "Aldaketak zerbitzariarekin sinkronizatuta" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Honek zerrenda honetako pista guztiak kenduko ditu eta ezin da desegin." + }, + "header": "Nahi duzu \"{ playlist }\" zerrenda garbitzea?" + } + }, + "warning": { + "duplicate": "Zure ilarako pista batzuk zerrenda honetan daude dagoeneko:" + } + }, + "Form": { + "button": { + "create": "Zerrenda sortu", + "update": "Eguneratu zerrenda" + }, + "header": { + "createFailure": "Ezin izan da zerrenda sortu", + "createPlaylist": "Zerrenda berria sortu", + "createSuccess": "Zerrenda sortuta", + "updateSuccess": "Zerrenda eguneratuta" + }, + "label": { + "name": "Zerrenda izena", + "visibility": "Zerrendaren ikusgaitasuna" + }, + "placeholder": { + "name": "Nire zerrenda txundigarria" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Gehitu halere", + "addToPlaylist": "Gehitu erreprodukzio-zerrenda honetan", + "addTrack": "Abestia sartu", + "cancel": "Ezeztatu", + "edit": "Editatu" + }, + "empty": { + "noPlaylists": "Ez da zerrendarik sortu oraindik" + }, + "header": { + "addFailure": "Pista ezin da zerrenda batera gehitu", + "addToPlaylist": "Gehitu erreprodukzio-zerrendan", + "available": "Zerrendak eskuragarri", + "manage": "Kudeatu zerrendak", + "noResults": "Ez dago zure iragazkiarekin bat datorren emaitzarik", + "track": "{title}, honen eskutik: {artist}" + }, + "label": { + "filter": "Iragazkia" + }, + "placeholder": { + "filterPlaylist": "Idatzi erreprodukzio-zerrendaren izena" + }, + "table": { + "edit": { + "header": { + "edit": "Editatu", + "lastModification": "Azken aldaketa", + "name": "Izena", + "tracks": "Pistak" + } + } + }, + "warning": { + "duplicate": "{ 0 } jada badago { 1 }(e)n." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Gehitu erreprodukzio-zerrendan…" + } + }, + "Widget": { + "button": { + "create": "Sortu erreprodukzio-zerrenda", + "more": "Erakutsi gehiago" + }, + "placeholder": { + "noPlaylists": "Ez da zerrendarik sortu oraindik" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Hasi artisten irratia", + "startPlaylistsRadio": "Hasi zerrenden irratia", + "startRadio": "Erreproduzitu irratia", + "startTagsRadio": "Hasi etiketen irratia", + "stopArtistsRadio": "Gelditu artisten irratia", + "stopPlaylistsRadio": "Gelditu zerrenden irratia", + "stopRadio": "Gelditu irratia", + "stopTagsRadio": "Gelditu etiketen irratia" + }, + "Card": { + "button": { + "edit": "Editatu" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Erakutsi etiketa 1 gehiago | Erakutsi { n } etiketa gehiago" + } + } + }, + "vui": { + "Pagination": { + "label": "Orrialdekatzea", + "next": "Hurrengo orria", + "previous": "Aurreko orria" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Pista { n } gehitu da zure ilaran | { n } pista gehitu dira zure ilaran" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musika", + "other": "Beste bat", + "podcast": "Podcasta" + }, + "label": "Edukien kategoria" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Pista hau igo da, baina ez da prozesatzeko programatu oraindik", + "label": "Zirriborroa" + }, + "errored": { + "help": "Ezin izan da pista hau prozesatu, mesedez ziurtatu behar bezala etiketatuta dagoela", + "label": "Erroreduna" + }, + "finished": { + "help": "Inportatuta", + "label": "Amaituta" + }, + "pending": { + "help": "Pista igo da, baina zerbitzariak ez du prozesatu oraindik", + "label": "Zain" + }, + "skipped": { + "help": "Pista hau zure liburutegietako batean dago jadanik", + "label": "Saltatuta" + } + }, + "label": "Egin klik igoera honen inportazio prozesuari buruzko informazio gehiago bistaratzeko" + }, + "privacyLevel": { + "choices": { + "instance": "Instantzia honetako edonork", + "private": "Soilik ni", + "public": "Edonork, instantzia guztietan zehar" + }, + "help": "Zehaztu zure jardueraren ikusgarritasun maila", + "label": "Jardueraren ikusgarritasuna", + "shortChoices": { + "instance": "Instantzia", + "private": "Pribatua", + "public": "Edonork" + } + }, + "reportType": { + "choices": { + "illegalContent": "Eduki ilegala", + "invalidMetadata": "Metadatu baliogabeak", + "offensiveContent": "Eduki mingarria", + "other": "Beste bat", + "takedownRequest": "Edukia kentzeko eskaera" + }, + "label": "Kategoria" + }, + "summary": { + "label": "Biografia" + } + }, + "filters": { + "accessedDate": "Atzitutako datuak", + "albumTitle": "Albumaren izena", + "appliedDate": "Aplikatu zeneko data", + "artistName": "Artistaren izena", + "bitrate": "Bit-tasa", + "creationDate": "Sortze data", + "dateJoined": "Erregistroaren data", + "domain": "Domeinua", + "duration": "Iraupena", + "expirationDate": "Iraungitze data", + "firstSeen": "Lehen aldiz ikusi zeneko data", + "followers": "Jarraitzaileak", + "handledDate": "Kudeaketa data", + "itemsCount": "Elementuak", + "lastActivity": "Azken jarduera", + "lastSeen": "Azkenekoz ikusi zeneko data", + "modificationDate": "Aldatze data", + "name": "Izena", + "receivedMessages": "Jasotako mezuak", + "releaseDate": "Argitalpen-data", + "size": "Tamaina", + "trackTitle": "Pistaren izena", + "uploads": "Igoerak", + "username": "Erabiltzaile-izena", + "users": "Erabiltzaileak" + }, + "scopes": { + "edits": { + "description": "Edizioetara sarbidea", + "label": "Edizioak" + }, + "favorites": { + "description": "Sartu gogokoenetara", + "label": "Gogokoak" + }, + "filters": { + "description": "Eduki-iragazkietara sarbidea", + "label": "Edukien iragazkiak" + }, + "follows": { + "description": "Jarraitutakoetara sarbidea", + "label": "Jarraitutakoak" + }, + "libraries": { + "description": "Sarbidea audio-fitxategi, liburutegi, artista, album eta pistetara", + "label": "Liburutegiak eta igoerak" + }, + "listenings": { + "description": "Entzunaldi-historiarako sarbidea", + "label": "Entzunaldiak" + }, + "notifications": { + "description": "Jakinarazpenetarako sarbidea", + "label": "Jakinarazpenak" + }, + "playlists": { + "description": "Erreprodukzio-zerrendetarako sarbidea", + "label": "Zerrendak" + }, + "profile": { + "description": "Sarbidea eposta, erabiltzaile-izen eta profil informaziora", + "label": "Profila" + }, + "radios": { + "description": "Irratietarako sarbidea", + "label": "Irratiak" + }, + "reports": { + "description": "Moderazio-salaketetarako sarbidea", + "label": "Salaketak" + }, + "security": { + "description": "Pasahitza eta baimenak bezalako segurtasun ezarpenetarako sarbidea", + "label": "Segurtasuna" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Argitalpen-data", + "title": "Izenburua" + }, + "artist": { + "name": "Izena" + }, + "cover": { + "label": "Azala" + }, + "description": { + "label": "Deskribapena" + }, + "tags": { + "label": "Etiketak" + }, + "track": { + "copyright": "Copyright-a", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + } + }, + "useReport": { + "account": { + "label": "Salatu {'@'}{username}", + "typeLabel": "Kontua" + }, + "album": { + "label": "Salatu album hau…", + "typeLabel": "Albuma" + }, + "artist": { + "label": "Salatu artista hau…", + "typeLabel": "Artista", + "unknownLabel": "Artista ezezaguna" + }, + "channel": { + "label": "Salatu kanal hau…", + "typeLabel": "Kanala" + }, + "library": { + "label": "Salatu liburutegi hau…", + "typeLabel": "Liburutegia" + }, + "playlist": { + "label": "Salatu erreprodukzio-zerrenda hau…", + "typeLabel": "Zerrenda" + }, + "track": { + "label": "Salatu pista hau…", + "typeLabel": "Pista" + } + }, + "useReportConfigs": { + "account": { + "label": "Kontua", + "summary": "Biografia" + }, + "album": { + "label": "Albuma", + "releaseDate": "Argitalpen-data", + "title": "Izenburua" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Kanala" + }, + "creationDate": { + "label": "Sortze data" + }, + "library": { + "description": "Deskribapena", + "label": "Liburutegia" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Izena" + }, + "playlist": { + "label": "Zerrenda" + }, + "tags": { + "label": "Etiketak" + }, + "track": { + "copyright": "Copyright-a", + "label": "Pista", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + }, + "visibility": { + "label": "Ikusgaitasuna" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "Zergatik gertatu den uler dezagun laguntzeko, erantsi errorea abiarazteko egin duzunaren azalpen xehatu bat.", + "errorReportTitle": "Ustekabeko errore bat gertatu da.", + "leaveFeedback": "Eman iritzia", + "unexpectedError": "Ustekabeko errore bat gertatu da." + }, + "useThemeList": { + "browserDefault": "Arakatzaileak lehenetsitakoa", + "darkTheme": "Iluna", + "lightTheme": "Argia" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu { delay } igarotzean", + "rateLimitLater": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu beranduago" + }, + "sentry": { + "allow": "Onartu", + "deny": "Ukatu", + "funkwhaleInstance": "Funkwhale-ren Glitchtip instantzia ofiziala", + "message": "Erroreak nola eta noiz gertatzen diren uler dezagun laguntzeko, piloaren aztarnak honekin partekatuko dira: { 0 }", + "title": "Gure zerbitzuen kalitatea hobetzeko, saioan gerta litezkeen akatsen informazioa biltzea gustatuko litzaiguke." + }, + "serviceWorker": { + "actions": { + "later": "Geroago", + "update": "Eguneratu" + }, + "newAppVersion": "Aplikazioaren bertsio berria eskuragarri dago." + } + }, + "views": { "Notifications": { + "button": { + "read": "Markatu dena irakurrita", + "submit": "Ulertuta!" + }, + "empty": { + "notifications": "Ez dago jakinarazpenik erakusteko" + }, + "header": { + "funkwhaleSupport": "Gustuko al duzu Funkwhale?", + "instanceSupport": "Babestu Funkwhale instantzia hau", + "messages": "Zure mezuak", + "notifications": "Zure jakinarazpenak" + }, + "label": { + "reminder": "Gogorarazi hau barru:", + "showRead": "Erakutsi irakurritako jakinarazpenak" + }, + "link": { + "donate": "Dohaintza egin", + "help": "Ezagutu laguntzeko beste modu batzuk" + }, + "loading": { + "notifications": "Jakinarazpenak kargatzen…" + }, + "message": { + "funkwhaleSupport": "Denbora pixkat daramazu hemen. Funkwhale erabilgarria iruditzen bazaizu, oraindik hobea egiten lagun gaitzakezu!" + }, "option": { "delay": { "30": "30 egun", @@ -3457,584 +3274,63 @@ "never": "Inoiz ez" } }, - "link": { - "help": "Ezagutu laguntzeko beste modu batzuk", - "donate": "Dohaintza egin" + "title": "Jakinarazpenak" + }, + "Search": { + "button": { + "submit": "Bidali bilaketaren kontsulta" }, "header": { - "funkwhaleSupport": "Gustuko al duzu Funkwhale?", - "instanceSupport": "Babestu Funkwhale instantzia hau", - "messages": "Zure mezuak", - "notifications": "Zure jakinarazpenak" + "remote": "Bilatu urruneko objektu bat", + "rss": "Harpidetu podcast baten RSS jariora", + "search": "Bilatu" }, - "button": { - "submit": "Ulertuta!", - "read": "Markatu dena irakurrita" - }, - "loading": { - "notifications": "Jakinarazpenak kargatzen…" - }, - "empty": { - "notifications": "Ez dago jakinarazpenik erakusteko." - }, - "title": "Jakinarazpenak", "label": { - "reminder": "Gogorarazi hau barru:", - "showRead": "Erakutsi irakurritako jakinarazpenak" - }, - "message": { - "funkwhaleSupport": "Denbora pixkat daramazu hemen. Funkwhale erabilgarria iruditzen bazaizu, oraindik hobea egiten lagun gaitzakezu!" + "albums": "Albumak", + "artists": "Artistak", + "playlists": "Zerrendak", + "podcasts": "Podcastak", + "radios": "Irratiak", + "series": "Serieak", + "tags": "Etiketak", + "tracks": "Pistak" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Erabiltzaile-izena", - "loginStatus": { - "disabled": "Desgaituta", - "enabled": "Gaituta", - "label": "Saioaren egoera" - }, - "displayName": "Bistaratzeko izena", - "email": "Eposta helbidea", - "lastActivity": "Azken jarduera", - "lastChecked": "Azken egiaztapena", - "permissions": "Baimenak", - "signupDate": "Erregistroaren data", - "userType": "Mota" - }, - "audioContent": { - "cachedSize": "Cachearen tamaina", - "megabyte": "MB", - "totalSize": "Tamaina guztira", - "uploadQuota": "Igoera muga" - }, - "activity": { - "emittedFollows": "Eskatutako liburutegi-jarraitzeak", - "emittedMessages": "Bidalitako mezuak", - "firstSeen": "Lehen aldiz ikusia", - "receivedFollows": "Jasotako liburutegiaren jarraipenak" - } - }, - "header": { - "accountData": "Kontuaren datuak", - "activity": "Jarduera", - "audioContent": "Audio edukia", - "localAccount": "Kontu lokala", - "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", - "noPolicy": "Ez daukazu araurik kontu honetan oraindik." - }, - "button": { - "addPolicy": "Gehitu moderazio-gidalerroa" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "domain": "Domeinua", - "libraries": "Liburutegiak", - "linkedReports": "Estekatutako txostenak", - "openProfile": "Ireki profila", - "remoteProfile": "Ireki urruneko profila", - "requests": "Eskaerak", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "tooltip": { - "uploadQuota": "Zehaztu erabiltzaileak zenbat eduki igo dezakeen. Utzi hutsik instantziaren balio lehenetsia erabiltzeko." - }, - "option": { - "permission": { - "library": "Liburutegia", - "moderation": "Moderazioa", - "settings": "Ezarpenak" - } - }, - "description": { - "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute." - }, - "notApplicable": "Daturik gabe", - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "Base": { - "link": { - "accounts": "Kontuak", - "domains": "Domeinuak", - "reports": "Salaketak", - "userRequests": "Erabiltzaileen eskaerak" - }, - "title": "Moderazioa", - "menu": { - "secondary": "Bigarren mailako menua" - } - }, - "DomainsDetail": { - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "instanceData": "Instantziaren datuak", - "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", - "noPolicy": "Ez daukazu araurik domeinu honentzat." - }, - "button": { - "addPolicy": "Gehitu moderazio-gidalerroa", - "addToAllowList": "Gehitu baimen-zerrendan", - "refreshNodeInfo": "Freskatu nodoaren informazioa", - "removeFromAllowList": "Kendu baimenendutakoen zerrendatik" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "knownAccounts": "Kontu ezagunak", - "libraries": "Liburutegiak", - "website": "Ireki webgunea", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "activity": { - "emittedFollows": "Eskatutako liburutegi-jarraitzeak", - "emittedMessages": "Bidalitako mezuak", - "firstSeen": "Lehen aldiz ikusia", - "receivedFollows": "Jasotako liburutegiaren jarraipenak" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Errorea nodoaren informazioa eskuratzerakoan", - "label": "Egoera" - }, - "inAllowList": { - "label": "Onartuen zerrendan dago", - "false": "Ez", - "true": "Bai" - }, - "lastChecked": "Azken egiaztapena", - "domainName": "Izena", - "software": { - "label": "Softwarea" - }, - "totalUsers": "Erabiltzaileak guztira" - } - }, - "description": { - "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute." - }, - "notApplicable": "Daturik gabe", - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "DomainsList": { - "button": { - "add": "Gehitu" - }, - "label": { - "addDomain": "Gehitu domeinua", - "addToAllowList": "Gehitu baimen-zerrendan" - }, - "title": "Domeinuak", - "header": { - "domains": "Domeinuak", - "failure": "Errorea domeinua sortzerakoan" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Dena", - "resolved": "Ebatzita", - "unresolved": "Konpondu gabea" - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "title": "Salaketak", - "header": { - "reports": "Salaketak" - }, - "label": { - "search": "Bilatu", - "status": "Egoera" - }, - "placeholder": { - "search": "Bilatu kontuaren, laburpenaren, domeinuaren... arabera" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Dena", - "approved": "Onartuta", - "pending": "Zain", - "refused": "Ukatuta" - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "label": { - "search": "Bilatu", - "status": "Egoera" - }, - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren arabera…" - }, - "title": "Erabiltzaileen eskaerak", - "header": { - "userRequests": "Erabiltzaileen eskaerak" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Sarbide data", - "firstSeen": "Lehen aldiz ikusia" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Cachearen tamaina", - "duration": "Iraupena", - "size": "Tamaina", - "track": "Pista" - }, - "upload": { - "name": "Izena" - } - }, - "link": { - "account": "Kontua", - "domain": "Domeinua", - "importStatus": "Inportazioaren egoera", - "library": "Liburutegia", - "remoteProfile": "Ireki urruneko profila", - "type": "Mota", - "django": "Ikusi Django-ren administrazioan", - "visibility": "Ikusgaitasuna" - }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "local": "Lokala", - "uploadData": "Igoera data" - }, - "button": { - "delete": "Ezabatu", - "download": "Deskargatu" - }, - "modal": { - "delete": { - "header": "Igoera hau ezabatu nahi duzu?", - "content": { - "warning": "Igoera ezabatu egingo da. Ekintza hau ezin da desegin." - } - } - }, - "notApplicable": "Daturik gabe" - }, - "LibraryDetail": { - "link": { - "account": "Kontua", - "albums": "Albumak", - "artists": "Artistak", - "domain": "Domeinua", - "reports": "Estekatutako txostenak", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan", - "visibility": "Ikusgaitasuna" - }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "libraryData": "Liburutegiaren datuak", - "local": "Lokala" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "library": { - "description": "Deskribapena", - "name": "Izena" - }, - "activity": { - "firstSeen": "Lehen aldiz ikusia", - "followers": "Jarraitzaileak" - } - }, - "button": { - "delete": "Ezabatu" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu?", - "content": { - "warning": "Liburutegi hau eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "AlbumDetail": { - "header": { - "activity": "Jarduera", - "albumData": "Albumaren datuak", - "audioContent": "Audio edukia", - "local": "Lokala" - }, - "link": { - "artist": "Artista", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "album": { - "description": "Deskribapena", - "title": "Izenburua" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Album hau ezabatu nahi duzu?", - "content": { - "warning": "Album hau eta erlazionatutako igoerak, pistak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "ArtistDetail": { - "header": { - "activity": "Jarduera", - "artistData": "Artistaren datuak", - "audioContent": "Audio edukia", - "local": "Lokala" - }, - "link": { - "albums": "Albumak", - "category": "Kategoria", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "artist": { - "description": "Deskribapena", - "name": "Izena" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Artista hau ezabatu nahi duzu?", - "content": { - "warning": "Artista hau eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "TagDetail": { - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "tagData": "Etiketaren datuak" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "localProfile": "Ireki profil lokala", - "tracks": "Pistak", - "django": "Ikusi Django-ren administrazioan" - }, - "button": { - "delete": "Ezabatu" - }, - "modal": { - "delete": { - "header": "Etiketa hau ezabatu nahi duzu?", - "content": { - "warning": "Etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." - } - } - }, - "table": { - "activity": { - "firstSeen": "Lehen aldiz ikusia" - }, - "tag": { - "name": "Izena" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Jarduera", - "local": "Lokala", - "trackData": "Pistaren datuak" - }, - "link": { - "album": "Albuma", - "albumArtist": "Artista honen albumak", - "artist": "Artista", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "trackData": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "track": { - "copyright": "Copyright-a", - "description": "Deskribapena", - "discNumber": "Disko zenbakia", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Pista hau ezabatu nahi duzu?", - "content": { - "warning": "Pista eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "Base": { - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "tags": "Etiketak", - "tracks": "Pistak", - "uploads": "Igoerak" - }, - "title": "Kudeatu liburutegia", - "menu": { - "secondary": "Bigarren mailako menua" - } - }, - "EditsList": { - "title": "Edizioak", - "header": { - "edits": "Liburutegiaren edizioak" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Ezabatu", + "openRemote": "Ireki urruneko profila", + "refresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "channelData": "Kanalaren datuak" + }, + "label": { + "local": "Lokala" + }, + "link": { + "django": "Ikusi Django-ren administrazioan", + "localProfile": "Ireki profil lokala" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanal hau eta erlazionatutako igoerak, pistak eta albumak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu nahi duzu?" + } + }, "table": { - "channelData": { - "account": "Kontua", - "category": "Kategoria", - "description": "Deskribapena", - "domain": "Domeinua", - "name": "Izena", - "rss": "RSS jarioa", - "url": "URL" + "activity": { + "edits": "Edizioak", + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "linkedReports": "Estekatutako txostenak", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" }, "audioContent": { "albums": "Albumak", @@ -4043,40 +3339,16 @@ "tracks": "Pistak", "uploads": "Igoerak" }, - "activity": { - "edits": "Edizioak", - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "linkedReports": "Estekatutako txostenak", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" + "channelData": { + "account": "Kontua", + "category": "Kategoria", + "description": "Deskribapena", + "domain": "Domeinua", + "name": "Izena", + "rss": "RSS jarioa", + "url": "URL" } }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "channelData": "Kanalaren datuak" - }, - "button": { - "delete": "Ezabatu", - "openRemote": "Ireki urruneko profila", - "refresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu nahi duzu?", - "content": { - "warning": "Kanal hau eta erlazionatutako igoerak, pistak eta albumak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "label": { - "local": "Lokala" - }, - "link": { - "localProfile": "Ireki profil lokala", - "django": "Ikusi Django-ren administrazioan" - }, "warning": { "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" } @@ -4100,53 +3372,1205 @@ "channels": "Kanalak", "federation": "Federazioa", "instanceInfo": "Instantziaren informazioa", - "settings": "Instantziaren ezarpenak", "moderation": "Moderazioa", "music": "Musika", "playlists": "Zerrendak", "sections": "Atalak", "security": "Segurtasuna", + "settings": "Instantziaren ezarpenak", "signups": "Erregistroak", "stats": "Estatistikak", "subsonic": "Subsonic", "ui": "Erabiltzaile interfazea" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "albumData": "Albumaren datuak", + "audioContent": "Audio edukia", + "local": "Lokala" + }, + "link": { + "artist": "Artista", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Album hau eta erlazionatutako igoerak, pistak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Album hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "album": { + "description": "Deskribapena", + "title": "Izenburua" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "ArtistDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "artistData": "Artistaren datuak", + "audioContent": "Audio edukia", + "local": "Lokala" + }, + "link": { + "albums": "Albumak", + "category": "Kategoria", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Artista hau eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Artista hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "artist": { + "description": "Deskribapena", + "name": "Izena" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "Base": { + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "tags": "Etiketak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Kudeatu liburutegia" + }, + "EditsList": { + "header": { + "edits": "Liburutegiaren edizioak" + }, + "title": "Edizioak" + }, + "LibraryDetail": { + "button": { + "delete": "Ezabatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "libraryData": "Liburutegiaren datuak", + "local": "Lokala" + }, + "link": { + "account": "Kontua", + "albums": "Albumak", + "artists": "Artistak", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak", + "visibility": "Ikusgaitasuna" + }, + "modal": { + "delete": { + "content": { + "warning": "Liburutegi hau eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu?" + } + }, + "table": { + "activity": { + "firstSeen": "Lehen aldiz ikusia", + "followers": "Jarraitzaileak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + }, + "library": { + "description": "Deskribapena", + "name": "Izena" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "TagDetail": { + "button": { + "delete": "Ezabatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "tagData": "Etiketaren datuak" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "django": "Ikusi Django-ren administrazioan", + "localProfile": "Ireki profil lokala", + "tracks": "Pistak" + }, + "modal": { + "delete": { + "content": { + "warning": "Etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." + }, + "header": "Etiketa hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "firstSeen": "Lehen aldiz ikusia" + }, + "tag": { + "name": "Izena" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "local": "Lokala", + "trackData": "Pistaren datuak" + }, + "link": { + "album": "Albuma", + "albumArtist": "Artista honen albumak", + "artist": "Artista", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Pista eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Pista hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "track": { + "copyright": "Copyright-a", + "description": "Deskribapena", + "discNumber": "Disko zenbakia", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + }, + "trackData": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "UploadDetail": { + "button": { + "delete": "Ezabatu", + "download": "Deskargatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "local": "Lokala", + "uploadData": "Igoera data" + }, + "link": { + "account": "Kontua", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "importStatus": "Inportazioaren egoera", + "library": "Liburutegia", + "remoteProfile": "Ireki urruneko profila", + "type": "Mota", + "visibility": "Ikusgaitasuna" + }, + "modal": { + "delete": { + "content": { + "warning": "Igoera ezabatu egingo da. Ekintza hau ezin da desegin." + }, + "header": "Igoera hau ezabatu nahi duzu?" + } + }, + "notApplicable": "Daturik gabe", + "table": { + "activity": { + "accessedDate": "Sarbide data", + "firstSeen": "Lehen aldiz ikusia" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "cachedSize": "Cachearen tamaina", + "duration": "Iraupena", + "size": "Tamaina", + "track": "Pista" + }, + "upload": { + "name": "Izena" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Gehitu moderazio-gidalerroa" + }, + "description": { + "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute" + }, + "header": { + "accountData": "Kontuaren datuak", + "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", + "activity": "Jarduera", + "audioContent": "Audio edukia", + "localAccount": "Kontu lokala", + "noPolicy": "Ez daukazu araurik kontu honetan oraindik." + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "libraries": "Liburutegiak", + "linkedReports": "Estekatutako txostenak", + "openProfile": "Ireki profila", + "remoteProfile": "Ireki urruneko profila", + "requests": "Eskaerak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "notApplicable": "Daturik gabe", + "option": { + "permission": { + "library": "Liburutegia", + "moderation": "Moderazioa", + "settings": "Ezarpenak" + } + }, + "table": { + "accountData": { + "displayName": "Bistaratzeko izena", + "email": "Eposta helbidea", + "lastActivity": "Azken jarduera", + "lastChecked": "Azken egiaztapena", + "loginStatus": { + "disabled": "Desgaituta", + "enabled": "Gaituta", + "label": "Saioaren egoera" + }, + "permissions": "Baimenak", + "signupDate": "Erregistroaren data", + "userType": "Mota", + "username": "Erabiltzaile-izena" + }, + "activity": { + "emittedFollows": "Eskatutako liburutegi-jarraitzeak", + "emittedMessages": "Bidalitako mezuak", + "firstSeen": "Lehen aldiz ikusia", + "receivedFollows": "Jasotako liburutegiaren jarraipenak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "megabyte": "MB", + "totalSize": "Tamaina guztira", + "uploadQuota": "Igoera muga" + } + }, + "tooltip": { + "uploadQuota": "Zehaztu erabiltzaileak zenbat eduki igo dezakeen. Utzi hutsik instantziaren balio lehenetsia erabiltzeko." + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "Base": { + "link": { + "accounts": "Kontuak", + "domains": "Domeinuak", + "reports": "Salaketak", + "userRequests": "Erabiltzaileen eskaerak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Moderazioa" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Gehitu moderazio-gidalerroa", + "addToAllowList": "Gehitu baimen-zerrendan", + "refreshNodeInfo": "Freskatu nodoaren informazioa", + "removeFromAllowList": "Kendu baimenendutakoen zerrendatik" + }, + "description": { + "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute" + }, + "header": { + "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", + "activity": "Jarduera", + "audioContent": "Audio edukia", + "instanceData": "Instantziaren datuak", + "noPolicy": "Ez daukazu araurik domeinu honentzat." + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "django": "Ikusi Django-ren administrazioan", + "knownAccounts": "Kontu ezagunak", + "libraries": "Liburutegiak", + "tracks": "Pistak", + "uploads": "Igoerak", + "website": "Ireki webgunea" + }, + "notApplicable": "Daturik gabe", + "table": { + "activity": { + "emittedFollows": "Eskatutako liburutegi-jarraitzeak", + "emittedMessages": "Bidalitako mezuak", + "firstSeen": "Lehen aldiz ikusia", + "receivedFollows": "Jasotako liburutegiaren jarraipenak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + }, + "instanceData": { + "domainName": "Izena", + "inAllowList": { + "false": "Ez", + "label": "Onartuen zerrendan dago", + "true": "Bai" + }, + "lastChecked": "Azken egiaztapena", + "nodeInfoStatus": { + "label": "Egoera", + "value": "Errorea nodoaren informazioa eskuratzerakoan" + }, + "software": { + "label": "Softwarea", + "value": "{name} ({version})" + }, + "totalUsers": "Erabiltzaileak guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "DomainsList": { + "button": { + "add": "Gehitu" + }, + "header": { + "domains": "Domeinuak", + "failure": "Errorea domeinua sortzerakoan" + }, + "label": { + "addDomain": "Gehitu domeinua", + "addToAllowList": "Gehitu baimen-zerrendan" + }, + "title": "Domeinuak" + }, + "ReportsList": { + "header": { + "reports": "Salaketak" + }, + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "status": { + "all": "Dena", + "resolved": "Ebatzita", + "unresolved": "Konpondu gabea" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "placeholder": { + "search": "Bilatu kontuaren, laburpenaren, domeinuaren arabera" + }, + "title": "Salaketak" + }, + "RequestsList": { + "header": { + "userRequests": "Erabiltzaileen eskaerak" + }, + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "status": { + "all": "Dena", + "approved": "Onartuta", + "pending": "Zain", + "refused": "Ukatuta" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "placeholder": { + "search": "Bilatu erabiltzaile-izenaren arabera" + }, + "title": "Erabiltzaileen eskaerak" + } + }, "users": { "Base": { "link": { "invitations": "Gonbidapenak", "users": "Erabiltzaileak" }, - "title": "Kudeatu erabiltzaileak", "menu": { "secondary": "Bigarren mailako menua" + }, + "title": "Kudeatu erabiltzaileak" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Saioa hasten…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Ezin izan da berretsi zure helbide elektronikoa", + "success": "E-posta helbidea egiaztatu da" + }, + "label": { + "confirmationCode": "Berrespen kodea" + }, + "link": { + "back": "Itzuli saio hasierara", + "login": "Jarraitu saio hasierara" + }, + "message": { + "success": "Zerbitzua mugarik gabe erabil dezakezu orain" + }, + "title": "Egiaztatu zure e-posta helbidea" + }, + "Login": { + "header": { + "login": "Sartu zure Funkwhale kontura" + }, + "title": "Hasi saioa" + }, + "PasswordReset": { + "button": { + "requestReset": "Eskatu pasahitza berrezartzeko" + }, + "header": { + "failure": "Errorea pasahitza berrezartzerakoan", + "reset": "Berrezarri pasahitza" + }, + "help": { + "form": "Erabili formulario hau pasahitza berrezartzea eskatzeko. Emandako eposta helbidera mezu bat bidaliko dizugu, zure pasahitza berrezartzeko argibideekin." + }, + "label": { + "email": "Kontuaren eposta" + }, + "link": { + "back": "Itzuli sarrerara" + }, + "placeholder": { + "email": "Idatzi zure kontuarekin lotutako eposta helbidea" + }, + "title": "Berrezarri pasahitza" + }, + "PasswordResetConfirm": { + "button": { + "update": "Eguneratu zure pasahitza" + }, + "header": { + "failure": "Errorea zure pasahitza aldatzerakoan", + "success": "Pasahitza arrakastaz eguneratu da" + }, + "label": { + "newPassword": "Pasahitz berria" + }, + "link": { + "back": "Itzuli sarrerara", + "login": "Jarraitu saio hasierara" + }, + "message": { + "requestSent": "Aurreko pausoan emandako eposta helbidea zuzena bada eta erabiltzaile kontu bati lotuta badago, datozen minututan eposta mezu bat jaso beharko zenuke pasahitza berrezartzeko argibideekin.", + "success": "Pasahitza arrakastaz eguneratu da." + }, + "title": "Zure pasahitza aldatu" + }, + "Plugins": { + "title": "Kudeatu pluginak" + }, + "ProfileActivity": { + "header": { + "playlists": "Zerrendak", + "recentlyFavorited": "Azken aldian gogokoa", + "recentlyListened": "Azken aldian entzuna" + } + }, + "ProfileBase": { + "label": { + "self": "Hau zu zara!" + }, + "link": { + "activity": "Jarduera", + "domainView": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "overview": "Informazio orokorra" + }, + "title": "{ username }-(r)en profila" + }, + "ProfileOverview": { + "button": { + "cancel": "Ezeztatu", + "createChannel": "Sortu kanala", + "next": "Hurrengo pausoa", + "previous": "Aurreko pausoa" + }, + "header": { + "channels": "Kanalak", + "libraries": "Erabiltzaileen liburutegiak", + "sharedLibraries": "Erabiltzaile honek ondorengo liburutegiak partekatu ditu" + }, + "link": { + "addNew": "Gehitu berria" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Artistaren kanala" + }, + "header": "Sortu kanala", + "podcast": { + "header": "Podcast kanala" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Sortu Funkwhale kontua" + }, + "title": "Erregistratu" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Ezabatu", + "delete": "Ezabatu…", + "edit": "Editatu…", + "embed": "Txertatu", + "play": "Erreproduzitu", + "updateChannel": "Eguneratu kanala", + "upload": "Igo" + }, + "header": { + "artistChannel": "Artistaren kanala", + "podcastChannel": "Podcast kanala" + }, + "link": { + "channelEpisodes": "Saio guztiak", + "channelOverview": "Informazio orokorra", + "channelTracks": "Pistak", + "domainView": "Ikusi { domain }(e)n", + "mirrored": "{ domain } domeinutik ispilatua", + "moderation": "Ireki moderazio interfazean" + }, + "meta": { + "episodes": "Saio { n } | { n } saio", + "listenings": "Entzunaldi { n } | { n } entzunaldi", + "subscribers": "Harpidetu { n } | { n } harpidetu", + "tracks": "Pista { n } | { n } pista" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanal hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Kanal hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu artista honen lana zure webgunean" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Mastodon edo fedibertsoko beste aplikazioren bat erabiltzen ari bazara, kontu honetara harpidetu zaitezke:" + }, + "header": "Harpidetu Fedibertsoan" + }, + "funkwhale": { + "header": "Harpidetu Funkwhalen" + }, + "header": "Harpidetu kanal honetara", + "rss": { + "content": { + "help": "Kopiatu eta itsatsi URL hau zure podcast aplikazio gogokoenean:" + }, + "header": "Harpidetu RSS bidez" + } + } + }, + "title": "Kanala" + }, + "DetailOverview": { + "header": { + "albums": "Albumak", + "latestEpisodes": "Azken saioak", + "latestTracks": "Azken abestiak", + "series": "Serieak", + "uploadsFailure": "Igoera batzuk ezin izan dira argitaratu", + "uploadsProcessing": "Igoerak prozesatzen", + "uploadsSuccess": "Igoerak arrakastaz argitaratuta" + }, + "link": { + "addAlbum": "Gehitu berria", + "erroredUploads": "Ikusi huts egindako igoerak", + "skippedUploads": "Ikusi saltatutako igoerak" + }, + "message": { + "processing": "Funkwhale zure igoerak prozesatzen ari da eta laster izango dira prest." + }, + "meta": { + "progress": "Prozesatutako igoerak: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Ezeztatu", + "subscribe": "Harpidetu" + }, + "link": { + "addNew": "Gehitu berria" + }, + "modal": { + "subscription": { + "header": "Harpidetza" + } + }, + "placeholder": { + "search": "Iragazi izenaren arabera…" + }, + "title": "Harpidetutako kanalak" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Liburutegiak", + "tracks": "Pistak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Edukia sartu" + }, + "Home": { + "button": { + "start": "Hasi erabiltzen" + }, + "description": { + "channel": { + "1": "Musikaria edo podcast egilea bazara, kanalak zuretzat diseinatuta daude!", + "2": "Partekatu zure lana publikoki eta lortu harpidetzak Funkwhalen, fedibertsoan edo edozein podcast aplikaziotan." + }, + "follow": "Jarraitu beste erabiltzaile batzuen liburutegiak musika berria eskuratzeko. Liburutegi publikoak zuzenean jarraitu daitezke, baina liburutegi pribatu bat jarraitzeko bere sortzailearen onespena behar da.", + "upload": "Igo zure musikaren liburutegi pertsonala Funkwhalera edozein lekutatik gozatu eta lagun eta familiarekin partekatzeko." + }, + "header": { + "channel": "Argitaratu zure lana kanal batean", + "follow": "Jarraitu urruneko liburutegiak", + "upload": "Igo hirugarrengoen edukia liburutegi batera" + }, + "help": { + "uploadQuota": "Instantzia honek {quota}eko biltegiratzea eskaintzen dio erabiltzaile bakoitzari." + }, + "title": "Gehitu eta kudeatu edukia" + }, + "libraries": { + "Card": { + "button": { + "upload": "Igo" + }, + "label": { + "size": "Liburutegi honetako fitxategien guztizko tamaina" + }, + "link": { + "details": "Liburutegiaren xehetasunak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "FilesTable": { + "action": { + "delete": "Ezabatu", + "restartImport": "Hasi berriro inportazioa" + }, + "button": { + "showStatus": "Erakutsi pista honen igoeraren egoerari buruzko informazioa" + }, + "empty": { + "noTracks": "Ez da pistarik gehitu oraindik liburutegi honetara" + }, + "label": { + "importStatus": "Inportazioaren egoera", + "search": "Bilatu" + }, + "notApplicable": "Daturik gabe", + "option": { + "status": { + "all": "Dena", + "draft": "Zirriborroa", + "failed": "Huts egin du", + "finished": "Amaituta", + "pending": "Zain", + "skipped": "Saltatuta" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren arabera" + }, + "table": { + "file": { + "header": { + "album": "Albuma", + "artist": "Artista", + "duration": "Iraupena", + "importStatus": "Inportazioaren egoera", + "size": "Tamaina", + "title": "Izenburua", + "uploadDate": "Igoera data" + } + } + } + }, + "Form": { + "button": { + "confirm": "Liburutegia ezabatu", + "create": "Liburutegia sortu", + "delete": "Ezabatu", + "update": "Eguneratu liburutegia" + }, + "description": { + "library": "Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta lagunekin partekatu.", + "visibility": "Zure liburutegia besteekin partekatu dezakezu, ikusgaitasuna edozein dela ere." + }, + "header": { + "failure": "Errorea" + }, + "label": { + "description": "Deskribapena", + "name": "Izena", + "visibility": "Ikusgaitasuna" + }, + "message": { + "libraryCreated": "Liburutegia sortuta", + "libraryDeleted": "Liburutegia ezabatuta", + "libraryUpdated": "Liburutegia eguneratuta" + }, + "modal": { + "delete": { + "content": { + "warning": "Liburutegia eta bere pista guztiak ezabatuko dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu?" + } + }, + "placeholder": { + "description": "Liburutegi honetan nire musika pertsonala dago, espero dut gustuko izango duzula.", + "name": "Nire liburutegi txundigarria" + } + }, + "Home": { + "empty": { + "noLibrary": "Badirudi ez duzula liburutegirik oraindik, bada bat sortzeko ordua." + }, + "header": { + "libraries": "Nire liburutegiak" + }, + "link": { + "createLibrary": "Liburutegi berria sortu" + }, + "loading": { + "libraries": "Liburutegiak kargatzen…" + } + }, + "Quota": { + "button": { + "purge": "Kendu" + }, + "header": { + "currentUsage": "Oraingo erabilera" + }, + "label": { + "currentUsage": "{ current } erabilita baimendutako { max }e(ta)tik", + "errored": "Erroredun fitxategiak", + "pending": "Fitxategiak faltan", + "percentUsed": "% {progress}", + "skipped": "Saltatutako fitxategiak" + }, + "link": { + "viewFiles": "Ikusi fitxategiak" + }, + "loading": { + "currentUsage": "Erabilpen datuak kargatzen…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Igotako baina oraindik zerbitzariak prozesatu ezin izan dituen pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Erroreak emandako fitxategiak kendu?" + }, + "purgePending": { + "content": { + "description": "Igotako baina oraindik prozesatu gabeko pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Zain dauden fitxategiak kendu?" + }, + "purgeSkipped": { + "content": { + "description": "Inportazio prozesuan igotako baina saltatutako pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Saltatutako fitxategiak kendu?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Utzi jarraitzeko eskaera", + "follow": "Jarraitu", + "pending": "Jarraipen-eskaera onarpenaren zain", + "unfollow": "Utzi jarraitzeari" + }, + "error": { + "follow": "Ezin da jarraitu urruneko liburutegia: {error}", + "unfollow": "Ezin da jarraitzeari utzi urruneko liburutegia: {error}" + }, + "label": { + "scanFailure": "Arazoa eskaneatzean", + "scanPartialSuccess": "Erroreak eskaneatzean", + "scanPending": "Eskaneatzeko zain", + "scanProgress": "Eskaneatzen… ({ progress }%)", + "scanSuccess": "Eskaneatzea amaituta", + "sharingLink": "Esteka partekatzen" + }, + "link": { + "scan": "Eskaneatu orain ", + "scanDetails": "Xehetasunak" + }, + "message": { + "scanLaunched": "Eskaneatzea abiarazita", + "scanSkipped": "Eskaneatzea saltatuta (aurreko eskaneatzea oso berria da)" + }, + "meta": { + "failedTracks": "Huts egin duten pistak: {tracks}", + "lastUpdate": "Azken eguneraketa: ", + "tracks": "Pista { n } | { n } pista" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." + }, + "header": "Liburutegi hau jarraitzeari utzi?" + } + }, + "tooltip": { + "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", + "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" + } + }, + "Home": { + "button": { + "refresh": "Freskatu" + }, + "description": { + "remoteLibraries": "Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak diren bitartean." + }, + "header": { + "knownLibraries": "Liburutegi ezagunak", + "remoteLibraries": "Urruneko liburutegiak" + }, + "loading": { + "remoteLibraries": "Urruneko liburutegiak kargatzen…" + } + }, + "ScanForm": { + "button": { + "submit": "Bidali bilaketa" + }, + "header": { + "failure": "Ezin izan da eskuratu urruneko liburutegia" + }, + "label": { + "search": "Bilatu urruneko liburutegia" + }, + "placeholder": { + "url": "Idatzi liburutegiaren URLa" } } } }, - "Search": { - "label": { - "albums": "Albumak", - "artists": "Artistak", - "playlists": "Zerrendak", - "podcasts": "Podcastak", - "radios": "Irratiak", - "series": "Serieak", - "tags": "Etiketak", - "tracks": "Pistak" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } }, - "header": { - "search": "Bilatu", - "remote": "Bilatu urruneko objektu bat", - "rss": "Harpidetu podcast baten RSS jariora" + "DetailOverview": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } }, - "button": { - "submit": "Bidali bilaketaren kontsulta" + "DetailTracks": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } + }, + "Edit": { + "button": { + "accept": "Onartu", + "reject": "Baztertu" + }, + "empty": { + "noFollowers": "Inor ez da liburutegi hau jarraitzen ari" + }, + "header": { + "followers": "Jarraitzaileak", + "libraryContents": "Liburutegiaren edukiak" + }, + "loading": { + "followers": "Jarraitzaileak kargatzen…" + }, + "table": { + "action": { + "header": { + "action": "Akzioa", + "date": "Data", + "status": "Egoera", + "user": "Erabiltzailea" + }, + "status": { + "accepted": "Onartuta", + "pending": "Onarpenaren zain", + "rejected": "Baztertuta" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Editatu", + "upload": "Igo" + }, + "description": { + "sharingLink": "Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea eska dezaten instantziaren bilaketa barran kopiatu eta itsatsiz." + }, + "label": { + "instance": "Mugatuta", + "private": "Pribatua", + "public": "Publikoa", + "sharingLink": "Esteka partekatzen" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "owner": "Jabea { username } da", + "tracks": "Pistak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + }, + "title": "Liburutegia", + "tooltip": { + "instance": "Liburutegi hau instantzia honetako erabiltzaileetara mugatua dago", + "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", + "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Zerrenda ezabatu", + "delete": "Ezabatu", + "edit": "Editatu", + "embed": "Txertatu", + "playAll": "Erreproduzitu dena", + "stopEdit": "Utzi editatzeari" + }, + "empty": { + "noTracks": "Oraindik ez dago pistarik zerrenda honetan" + }, + "header": { + "tracks": "Pistak" + }, + "meta": { + "tracks": "Zerrendak { username }-(r)en pista { n } du | Zerrendak { username }-(r)en { n } pista ditu" + }, + "modal": { + "delete": { + "content": { + "warning": "Honek guztiz ezabatuko du zerrenda hau eta ekintza ezin da desegin." + }, + "header": "Nahi duzu \"{ playlist }\" zerrenda ezabatzea?" + }, + "embed": { + "header": "Txertatu erreprodukzio zerrenda hau zure webgunean" + } + }, + "title": "Zerrenda" + }, "List": { + "button": { + "create": "Sortu erreprodukzio-zerrenda", + "manage": "Kudeatu zure zerrendak", + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Zerrendak arakatzen", + "playlists": "Zerrendak" + }, + "label": { + "search": "Bilatu" + }, "ordering": { "direction": { "ascending": "Gorantza", @@ -4155,58 +4579,11 @@ }, "label": "Ordena" }, - "header": { - "browse": "Zerrendak arakatzen", - "playlists": "Zerrendak" - }, - "button": { - "create": "Sortu erreprodukzio-zerrenda", - "manage": "Kudeatu zure zerrendak", - "search": "Bilatu" - }, - "placeholder": { - "search": "Idatzi erreprodukzio-zerrendaren izena…" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, "pagination": { "results": "Emaitzak orrialdeko" }, - "label": { - "search": "Bilatu" - } - }, - "Detail": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatu", - "confirm": "Zerrenda ezabatu", - "edit": "Editatu", - "embed": "Txertatu", - "playAll": "Erreproduzitu dena", - "stopEdit": "Utzi editatzeari" - }, - "modal": { - "delete": { - "header": "Nahi duzu \"{ playlist }\" zerrenda ezabatzea?", - "content": { - "warning": "Honek guztiz ezabatuko du zerrenda hau eta ekintza ezin da desegin." - } - }, - "embed": { - "header": "Txertatu erreprodukzio zerrenda hau zure webgunean" - } - }, - "title": "Zerrenda", - "meta": { - "tracks": "Zerrendak { username }-(r)en pista { n } du | Zerrendak { username }-(r)en { n } pista ditu" - }, - "empty": { - "noTracks": "Oraindik ez dago pistarik zerrenda honetan" - }, - "header": { - "tracks": "Pistak" + "placeholder": { + "search": "Idatzi erreprodukzio-zerrendaren izena…" } } }, @@ -4214,289 +4591,26 @@ "Detail": { "button": { "confirm": "Irratia ezabatu", + "delete": "Ezabatu", "edit": "Editatu…" }, - "modal": { - "delete": { - "header": "Nahi duzu \"{ radio }\" irratia ezabatzea?", - "content": { - "warning": "Honek guztiz ezabatuko du irrati hau eta ekintza ezin da desegin." - } - } - }, "empty": { "noTracks": "Ez da pistarik gehitu oraindik irrati honetara" }, - "title": "Irratia", "header": { + "radio": "{tracks} pista dituen irratia, honen eskutik: ", "tracks": "Pistak" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Pista { n } gehitu da zure ilaran | { n } pista gehitu dira zure ilaran" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Sarbidea audio-fitxategi, liburutegi, artista, album eta pistetara", - "label": "Liburutegiak eta igoerak" - }, - "filters": { - "description": "Eduki-iragazkietara sarbidea", - "label": "Edukien iragazkiak" - }, - "profile": { - "description": "Sarbidea eposta, erabiltzaile-izen eta profil informaziora", - "label": "Profila" - }, - "edits": { - "description": "Edizioetara sarbidea", - "label": "Edizioak" - }, - "follows": { - "description": "Jarraitutakoetara sarbidea", - "label": "Jarraitutakoak" - }, - "listenings": { - "description": "Entzunaldi-historiarako sarbidea", - "label": "Entzunaldiak" - }, - "reports": { - "description": "Moderazio-salaketetarako sarbidea", - "label": "Salaketak" - }, - "notifications": { - "description": "Jakinarazpenetarako sarbidea", - "label": "Jakinarazpenak" - }, - "playlists": { - "description": "Erreprodukzio-zerrendetarako sarbidea", - "label": "Zerrendak" - }, - "radios": { - "description": "Irratietarako sarbidea", - "label": "Irratiak" - }, - "security": { - "description": "Pasahitza eta baimenak bezalako segurtasun ezarpenetarako sarbidea", - "label": "Segurtasuna" - }, - "favorites": { - "label": "Gogokoak" - } }, - "filters": { - "accessedDate": "Sarbide data", - "albumTitle": "Albumaren izena", - "artistName": "Artistaren izena", - "bitrate": "Bitrate", - "creationDate": "Sortze data", - "domain": "Domeinua", - "duration": "Iraupena", - "expirationDate": "Iraungitze data", - "firstSeen": "Lehen aldiz ikusitako data", - "followers": "Jarraitzaileak", - "itemsCount": "Elementuak", - "lastActivity": "Azken jarduera", - "lastSeen": "Ikusi zen azken aldiaren data", - "modificationDate": "Aldatze data", - "name": "Izena", - "receivedMessages": "Jasotako mezuak", - "releaseDate": "Argitalpen-data", - "dateJoined": "Erregistroaren data", - "size": "Tamaina", - "trackTitle": "Pistaren izena", - "uploads": "Igoerak", - "username": "Erabiltzaile-izena", - "users": "Erabiltzaileak" - }, - "fields": { - "privacyLevel": { - "label": "Jardueraren ikusgarritasuna", - "help": "Zehaztu zure jardueraren ikusgarritasun maila", - "shortChoices": { - "public": "Edonork", - "instance": "Instantzia", - "private": "Pribatua" + "modal": { + "delete": { + "content": { + "warning": "Honek guztiz ezabatuko du irrati hau eta ekintza ezin da desegin." }, - "choices": { - "instance": "Instantzia honetako edonork", - "public": "Edonork, instantzia guztietan zehar", - "private": "Soilik ni" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Kategoria", - "choices": { - "illegalContent": "Eduki ilegala", - "invalidMetadata": "Metadatu baliogabeak", - "offensiveContent": "Eduki mingarria", - "other": "Beste bat", - "takedownRequest": "Edukia kentzeko eskaera" - } - }, - "importStatus": { - "label": "Egin klik igoera honen inportazio prozesuari buruzko informazio gehiago bistaratzeko", - "choices": { - "draft": { - "label": "Zirriborroa", - "help": "Pista hau igo da, baina ez da prozesatzeko programatu oraindik" - }, - "errored": { - "label": "Erroreduna", - "help": "Ezin izan da pista hau prozesatu, mesedez ziurtatu behar bezala etiketatuta dagoela" - }, - "finished": { - "label": "Amaituta", - "help": "Inportatuta" - }, - "pending": { - "label": "Zain", - "help": "Pista igo da, baina zerbitzariak ez du prozesatu oraindik" - }, - "skipped": { - "label": "Saltatuta", - "help": "Pista hau zure liburutegietako batean dago jadanik" - } - } - }, - "contentCategory": { - "label": "Edukien kategoria", - "choices": { - "music": "Musika", - "other": "Beste bat", - "podcast": "Podcasta" - } + "header": "Nahi duzu \"{ radio }\" irratia ezabatzea?" } - } + }, + "title": "Irratia" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Kontua" - }, - "album": { - "typeLabel": "Albuma", - "label": "Salatu album hau…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Salatu artista hau…" - }, - "channel": { - "typeLabel": "Kanala", - "label": "Salatu kanal hau…" - }, - "library": { - "typeLabel": "Liburutegia", - "label": "Salatu liburutegi hau…" - }, - "playlist": { - "typeLabel": "Zerrenda", - "label": "Salatu erreprodukzio-zerrenda hau…" - }, - "track": { - "label": "Salatu pista hau…", - "typeLabel": "Pista" - } - }, - "useReportConfigs": { - "account": { - "label": "Kontua", - "summary": "Bio" - }, - "album": { - "label": "Albuma", - "releaseDate": "Argitalpen-data", - "title": "Izenburua" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Kanala" - }, - "track": { - "copyright": "Copyright-a", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua", - "label": "Pista" - }, - "creationDate": { - "label": "Sortze data" - }, - "library": { - "description": "Deskribapena", - "label": "Liburutegia" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Izena" - }, - "playlist": { - "label": "Zerrenda" - }, - "tags": { - "label": "Etiketak" - }, - "visibility": { - "label": "Ikusgaitasuna" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright-a", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua" - }, - "cover": { - "label": "Azala" - }, - "description": { - "label": "Deskribapena" - }, - "artist": { - "name": "Izena" - }, - "album": { - "releaseDate": "Argitalpen-data", - "title": "Izenburua" - }, - "tags": { - "label": "Etiketak" - } - } - }, - "useThemeList": { - "darkTheme": "Iluna", - "lightTheme": "Argia" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Aplikazioaren bertsio berria eskuragarri dago.", - "actions": { - "later": "Geroago", - "update": "Eguneratu" - } - }, - "axios": { - "rateLimitDelay": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu { delay } igarotzean", - "rateLimitLater": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu beranduago" } } } diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index 18f0fce39..d21766622 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -5,9 +5,9 @@ "components": { "About": { "description": { - "findApp": "Utiliser Funkwhale sur d'autres terminaux avec nos applications.", + "findApp": "Utiliser Funkwhale sur d'autres appareils avec nos applications.", "funkwhale": "Funkwhale est un projet communautaire qui vous permet d'écouter et de partager de la musique et des fichiers audio au sein d'un réseau ouvert et décentralisé.", - "publicContent": "Écouter les albums publics et les listes de lecture partagés sur ce pod.", + "publicContent": "Écouter les albums publics et les playlists disponibles sur ce pod.", "quota": "Les utilisateur·ices de ce pod bénéficient également de { quota } d'espace de stockage pour mettre en ligne leurs propres contenus !", "signup": "Inscrivez-vous maintenant pour conserver une trace de vos favoris, créer vos listes de lectures, découvrir de nouveaux contenus et bien plus encore !" }, @@ -16,7 +16,7 @@ "findApp": "Trouver une application", "funkwhale": "Une plateforme sociale pour apprécier et partager la musique", "publicContent": "Parcourir le contenu public", - "signup": "Inscription" + "signup": "S’inscrire" }, "help": { "closedRegistrations": "Les inscriptions sont closes sur ce pod. Vous pouvez vous inscrire sur un autre pod en utilisant le lien ci-dessous." @@ -27,14 +27,14 @@ }, "message": { "greeting": "Bonjour {username}", - "loggedIn": "Vous êtes déjà connecté !" + "loggedIn": "Vous êtes déjà connecté·e !" }, "placeholder": { "noDescription": "Pas de description disponible" }, "stat": { - "activeUsers": "{ n } compte actif | { n } comptes actifs", - "hoursOfMusic": "heure de musique | heures de musique" + "activeUsers": "Pas d’utilisateurs actifs | { n } utilisateur actif | { n } utilisateurs actifs", + "hoursOfMusic": "0 heure de musique | {n} heure de musique | {n} heures de musique" }, "title": "À propos" }, @@ -59,7 +59,7 @@ "features": "Fonctionnalités", "rules": "Règles", "statistics": "Statistiques", - "terms": "Condititions d'utilisation et politique de respect de la vie privée" + "terms": "Conditions d'utilisation et politique de respect de la vie privée" }, "link": { "about": "À propos de ce pod", @@ -67,15 +67,15 @@ "introduction": "Introduction", "rules": "Règles", "statistics": "Statistiques", - "terms": "Condititions d'utilisation et politique de respect de la vie privée" + "terms": "Conditions d'utilisation et politique de respect de la vie privée" }, "message": { - "contact": "Envoyez-nous un courriel : {'{{'} contactEmail {'}}'}" + "contact": "Envoyez-nous un courriel : { contactEmail }" }, "notApplicable": "ND", "placeholder": { "noDescription": "Pas de description disponible", - "noRules": "Aucune règle disponible", + "noRules": "Aucunes règles disponibles", "noTerms": "Aucune condition disponible" }, "stat": { @@ -183,9 +183,11 @@ }, "message": { "automaticPlay": "La piste suivante va se jouer automatiquement dans quelques secondes…", - "radio": "Les nouvelles pistes seront ajoutées ici automatiquement." + "radio": "Les nouvelles pistes seront ajoutées ici automatiquement.", + "webglUnsupported": "Votre navigateur semble ne pas supporter WebGL2." }, "meta": { + "end": "Fin", "queuePosition": "Piste { index } sur { length }", "startTime": "00:00", "unknownAlbum": "Album Inconnu", @@ -2483,7 +2485,7 @@ } }, "tooltip": { - "blockAll": "Tout bloquer de ce compte ou domaine. Cela empêche toute interaction avec l'entité, et purge le contenu lié (pistes, librairies, suivis, etc.)", + "blockAll": "Tout bloquer de ce compte ou domaine. Cela empêche toute interaction avec, et purge le contenu lié, telles que les pistes, audiothèques, abonnements, etc.", "isActive": "Utilisez ce paramètre pour activer/désactiver temporairement la règle sans la supprimer complètement.", "rejectMedia": "Ne jamais télécharger de médias (audio, album, couverture, avatar de compte…) de ce compte ou domaine. Cela purgera aussi le contenu existant.", "silenceActivity": "Cacher le contenu du compte ou du domaine, sauf aux abonnés.", diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index e76a6d126..dba46186b 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -1,1435 +1,66 @@ { + "App": { + "loading": "Cargando…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } quere acceder a túa conta Funkwhale", - "authorize": "Autorizar app de terceiros", - "authorizeFailure": "Erro ó autorizar a aplicación", - "fetchFailure": "Erro ó obter datos da aplicación", - "allScopes": "Acceso completo", - "readOnly": "Só-lectura", - "writeOnly": "Só-escritura" - }, - "title": "Permitir aplicación", - "button": { - "authorize": "Autorizar { app }" - }, - "help": { - "pasteCode": "Copiar-pegar o seguinte código na aplicación:", - "redirect": "Vas ser redirixida a { 0 }", - "copyCode": "Vaiseche mostrar un código para copiar-pegar na aplicación." - }, - "message": { - "unknownPermissions": "Esta aplicación tamén está solicitando os seguintes permisos descoñecidos:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Acceso desactivado", - "passwordUpdated": "Contrasinal actualizado", - "unavailable": "O API Subsonic non está dispoñible en esta instancia Funkwhale." - }, - "button": { - "confirmDisable": "Desactivar o acceso", - "disable": "Desactivar o acceso Subsonic", - "newPassword": "Solicitar un novo contrasinal", - "confirmNewPassword": "Solicitar un contrasinal" - }, - "modal": { - "disableSubsonic": { - "header": "Desactivar o acceso a API Subsonic?", - "content": { - "warning": "Desactivará o acceso a API Subsonic desde a conta." - } - }, - "newPassword": { - "header": "Solicitar un nonvo contrasinal para o API Subsonic?", - "content": { - "warning": "Esto pechará sesión nos dispositivos existentes que utilicen o contrasinal actual." - } - } - }, - "link": { - "apps": "Aprende como utilizar Funkwhale desde outras apps" - }, - "header": { - "error": "Fallo", - "subsonic": "Contrasinal API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale é compatible con outros reprodutores de música compatibles coa API Subsonic.", - "paragraph3": "Porén, o acceso a Funkwhale desde estos outros clientes precisa dun contrasinal diferente que podes establecer aquí embaixo.", - "paragraph2": "Pode utilizalos para desfrutar da súa lista de reprodución e música en modo fora de liña, no seu dispositivo móbil ou tableta, por exemplo." - } - }, - "label": { - "subsonicField": "O teu contrasinal API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token de acceso", - "appId": "ID da aplicación", - "appSecret": "Chave segreda da aplicación" - }, - "header": { - "appDetails": "Detalles da aplicación", - "editApp": "Editar aplicación" - }, - "help": { - "appDetails": "O ID da aplicación e a clave segreda son valores sensibles que debes tratar como contrasinais. Non os compartas con ninguén." - }, - "link": { - "settings": "Volver ós axustes" - }, - "title": "Editar aplicación", - "button": { - "regenerateToken": "Recrear token" - } - }, - "Settings": { - "title": "Axustes da conta", - "header": { - "accountSettings": "Axustes da conta", - "authorizedApps": "Apps autorizadas", - "avatar": "Avatar", - "changeEmail": "Cambiar o meu enderezo de email", - "changePassword": "Cambiar o contrasinal", - "contentFilters": "Filtros de contido", - "deleteAccount": "Eliminar a miña conta", - "hiddenArtists": "Artistas ocultos", - "plugins": "Plugins", - "settingsUpdated": "Axustes actualizados", - "emailFailure": "Non podemos cambiar o teu enderezo de email", - "accountFailure": "Non podemos eliminar a túa conta", - "noApps": "Non ten ningunha regra activada para esta conta.", - "noPersonalApps": "Non tes ningunha aplicación rexistrada.", - "yourApps": "As súas notificacións", - "avatarFailure": "Non se gardou o avatar", - "passwordFailure": "Non se pode cambiar o contrasinal", - "updateFailure": "Non se actualizaron os axustes" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplicación", - "permissions": "Permisos" - } - }, - "yourApps": { - "header": { - "application": "Aplicación", - "creationDate": "Data de creación", - "scopes": "Ámbitos" - } - }, - "artists": { - "header": { - "creationDate": "Data de creación", - "name": "Nome" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Contrasinal actual", - "newEmail": "Novo enderezo de email", - "newPassword": "Novo contrasinal", - "password": "Contrasinal" - }, - "button": { - "password": "Cambiar contrasinal", - "delete": "Borrar", - "deleteAccountConfirm": "Eliminar a miña conta", - "deleteAccount": "Eliminar a miña conta…", - "disableSubsonic": "Desactivar o acceso", - "edit": "Editar", - "refresh": "Actualizar", - "remove": "Eliminar", - "removeApp": "Eliminar aplicación", - "revoke": "Repudiar", - "revokeAccess": "Retirar acceso", - "update": "Actualizar", - "updateSettings": "Actualizar axustes" - }, - "description": { - "changeEmail": "Cambiar o enderezo de email asociado á túa conta. Enviarémosche un email para confirmar o novo enderezo.", - "changePassword": { - "paragraph1": "Ao cambiar o contrasinal tamén cambias o contrasinal no API Subsonic si é que solicitaches un.", - "paragraph2": "Deberá actualizar o contrasinal nos seus clientes que utilicen este contrasinal." - }, - "contentFilters": "Os filtros de contido axúdanche a ocultar contido que non queres ver neste servizo.", - "authorizedApps": "Esta é unha lista das aplicacións que teñen acceso aos datos da túa conta.", - "yourApps": "Esta é a lista das aplicacións que ti creaches.", - "plugins": "Usa engadidos para extender Funkwhale e ter características adicionais.", - "deleteAccount": "Podes eliminar de xeito irreversible epermanente a túa conta e todos os datos asociados utilizando o formulario inferior. Pedirase confirmación." - }, - "modal": { - "changePassword": { - "header": "Cambiar o contrasinal?", - "content": { - "warning": "Cambiar o contrasinal terá as seguintes consecuencias:", - "logout": "Pecharemos esta sesión e deberás acceder co novo", - "subsonic": "O teu contrasinal Subsonic será cambiado por un novo, aleatorio, desconectando todos os dispositivos que utilicen o contrasinal antigo" - } - }, - "deleteAccount": { - "header": "Desexas eliminar a túa conta?", - "content": { - "warning": "Esto non ten volta e eliminará permanentemente os teus datos dos nosos servidores. Pecharás sesión inmediatamente." - } - }, - "deleteApp": { - "header": "Eliminar a aplicación \"{ application }\"?", - "content": { - "warning": "Esto eliminará completamente a aplicación e tódolos tokens asociados." - } - }, - "revokeApp": { - "header": "Retirar acceso para a aplicación \"{ application }\"?", - "content": { - "warning": "Esto evitará que a aplicación acceda ao servizo no seu nome." - } - } - }, - "help": { - "noApps": "Se autorizas o acceso aos teus datos por aplicacións de terceiros, estas aplicacións aparecerán aquí.", - "changePassword": "Comproba que o contrasinal é correcto", - "noPersonalApps": "Engade unha para integrar Funkwhale con aplicacións de terceiros." - }, - "link": { - "managePlugins": "Xestionar plugins", - "newApp": "Rexistrar unha nova aplicación" - }, - "warning": { - "deleteAccount": "Vaise eliminar a túa conta dos nosos servidores dentro duns minutos. Contactaremos con outros servidores que puidesen ter unha copia dos teus datos para que os borren. Por favor, ten en conta que algún de estos servidores podería estar desconectado ou non poder levar a fin a operación." - }, - "message": { - "currentEmail": "O teu email actual é { email }.", - "confirmDelete": "Enviouse a solicitude de borrado, o contido da conta eliminarase en breve" - } - }, - "Logout": { - "header": { - "confirm": "Tes certeza de querer pechar sesión?", - "unauthenticated": "Non iniciaches sesión" - }, - "link": { - "login": "Accede!" - }, - "title": "Pechar sesión", - "button": { - "logout": "Si, pechade a sesión!" - }, - "message": { - "loggedIn": "Accedeches como { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Volver ós axustes" - }, - "title": "Crear unha nova aplicación" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Marcando \"Lectura\" e \"Escritura\" para o ámbito superior implica dar acceso aos ámbitos inferiores.", - "read": { - "label": "Ler", - "description": "Acceso de só-lectura ao datos de usuario" - }, - "write": { - "label": "Escribir", - "description": "Acceso de só-escritura aos datos de usuario" - } - }, - "name": "Nome", - "redirectUri": "URI de redirección" - }, - "button": { - "create": "Crear aplicación", - "update": "Actualizar lista de reprodución" - }, - "help": { - "redirectUri": "Utilice \"urn:ietf:wg:oauth:2.0:oob\" como unha URI de redirección se as aplicacións non son mostradas na web." - }, - "header": { - "failure": "Non podemos crear a súa conta" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crear unha conta", - "resetPassword": "Restablece o contrasinal" - }, - "placeholder": { - "username": "Escribe o teu nome de usuaria ou email" - }, - "help": { - "approvalRequired": "Se te rexistraches recentemente, poderías ter que agardar un pouco para que se revise a conta ou verifique o teu email.", - "invalidCredentials": "Comproba que as credenciais son correctas e asegúrate de ter verificado o email." - }, - "button": { - "login": "Acceder" - }, - "label": { - "password": "Contrasinal", - "username": "Nome de usuaria ou email" - }, - "header": { - "loginFailure": "Non podemos darche acceso" - } - }, - "SignupForm": { - "button": { - "create": "Crear a miña conta" - }, - "label": { - "email": "Enderezo de email", - "password": "Contrasinal", - "username": "Nome de usuaria" - }, - "placeholder": { - "email": "Escribe o teu email", - "invitation": "Escribe o código de convite (dif. maiúsculas)", - "username": "Escribe o teu nome de usuaria" - }, - "header": { - "login": "Accede coa túa conta Funkwhale", - "signupFailure": "Non se pode crear a conta." - }, - "message": { - "registrationClosed": "O rexistro público non é posible en esta instancia. Precisas un código de convite para rexistrarte.", - "requiresReview": "O rexistro nesta instancia está aberto, pero revisado pola administración para ser aprobado.", - "awaitingReview": "A solicitude da conta enviouse correctamente. Serás notificada por email cando o equipo de administración revise a solicitude.", - "accountCreated": "Creouse correctamente a conta. Verifica o teu email antes de intentar acceder." - } - }, - "Plugin": { - "link": { - "documentation": "Documentación" - }, - "label": { - "pluginEnabled": "Activado", - "library": "Biblioteca" - }, - "header": { - "failure": "Fallo ao gardar o plugin" - }, - "description": { - "library": "A biblioteca onde importar os ficheiros." - }, - "button": { - "save": "Gardar", - "scan": "Escanear" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } usuaria activa | { n } usuarias activas", - "hoursOfMusic": "hora de música | horas de música" + "description": { + "findApp": "Usa Funkwhale noutros dispositivos coas nosas apps.", + "funkwhale": "Funkwhale é un proxecto xestionado pola comunidade que che permite escoitar e compartir música e audio nunha rede descentralizada e aberta.", + "publicContent": "Escoitar álbums públicos e listas compartidas neste servidor.", + "quota": "As usuarias deste servidor teñen { quota } de almacenaxe gratuíta para o seu contido!", + "signup": "Rexístrate para poder gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!" }, "header": { - "funkwhale": "Plataforma social para desfrutar e compartir música", "aboutPod": "Acerca desta instancia", - "publicContent": "Explorar contido público", "findApp": "Usa unha app", + "funkwhale": "Plataforma social para desfrutar e compartir música", + "publicContent": "Explorar contido público", "signup": "Rexistro" }, - "title": "Acerca de", + "help": { + "closedRegistrations": "O rexistro está pechado nesta instancia. Podes crear unha conta noutra instancia usando a ligazón inferior." + }, "link": { "findOtherPod": "Atopa outra instancia", "learnMore": "Saber máis" }, - "description": { - "funkwhale": "Funkwhale é un proxecto xestionado pola comunidade que che permite escoitar e compartir música e audio nunha rede descentralizada e aberta.", - "publicContent": "Escoitar álbums públicos e listas compartidas neste servidor.", - "signup": "Rexístrate para poder gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!", - "findApp": "Usa Funkwhale noutros dispositivos coas nosas apps.", - "quota": "As usuarias deste servidor teñen { quota } de almacenaxe gratuíta para o seu contido!" + "message": { + "greeting": "Ola {username}", + "loggedIn": "Xa iniciaches sesión!" }, "placeholder": { - "noDescription": "Non hai descrición." + "noDescription": "Non hai descrición" }, - "message": { - "loggedIn": "Xa iniciaches sesión!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } usuaria activa | { n } usuarias activas", - "hoursOfMusic": "{ n } hora de música | { n } horas de música" + "hoursOfMusic": "hora de música | horas de música" }, - "header": { - "aboutFunkwhale": "Acerca de Funkwhale", - "about": "Acerca de esta instancia Funkwhale", - "contact": "Contactar", - "login": "Acceder", - "newChannels": "Novas canles", - "newAlbums": "Álbums recén engadidos", - "signup": "Rexistro", - "statistics": "Estatísticas", - "links": "Ligazóns útiles", - "welcome": "Benvida a { podName }!" - }, - "link": { - "publicContent": { - "label": "Explorar contido público", - "description": "Escoitar álbums públicos e listas compartidas neste servidor" - }, - "userGuides": { - "description": "Descubre todo o que precisas saber sobre Funkwhale e as súas características", - "label": "Guías para a usuaria" - }, - "findOtherPod": "Atopar outra instancia", - "learnMore": "Saber máis", - "mobileApps": { - "label": "Apps móbiles", - "description": "Usa Funkwhale noutros dispositivos coas nosas apps" - }, - "rules": "Regras do servidor", - "viewMore": "Ver máis…", - "funkwhale": "Visita funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale é libre e desenvolto por unha amigable comunidade de voluntarias.", - "paragraph1": "Este servidor executa Funkwhale, un proxecto comunitario que che permite escoitar e compartir música e audios nunha rede descentralizada e aberta." - }, - "signup": "Rexístrate agora para gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!", - "quota": "As usuarias deste servidor tamén teñen { quota } de almacenaxe gratuíta para o seu contido!" - }, - "title": "Inicio", - "placeholder": { - "noDescription": "Non hai descrición." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canción | { n } cancións" - } - }, - "Widget": { - "button": { - "more": "Mostrar máis" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canción | { n } cancións" - }, - "title": "Actualizada o { date }" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodios" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - } - }, - "Widget": { - "button": { - "more": "Mostrar máis" - } - } - }, - "Player": { - "meta": { - "position": "{ index } de { length }" - }, - "header": { - "player": "Reprodutor e controis" - }, - "label": { - "clearQueue": "Baleirar a cola", - "expandQueue": "Despregar cola", - "addArtistContentFilter": "Ocultar contido deste artista…", - "loopingDisabled": "Bucle desactivado. Pulse para cambiar ao bucle de unha soa canción.", - "loopingSingle": "Bucle de unha canción. Pulse para cambiar a bucle de toda a cola.", - "loopingWholeQueue": "Bucle de toda a cola. Pulse para desactivar o bucle.", - "audioPlayer": "Reprodutor", - "mute": "Acalar", - "nextTrack": "Seguinte canción", - "pause": "Pausar", - "play": "Reproducir", - "previousTrack": "Canción anterior", - "shuffleQueue": "Barallar a cola", - "unmute": "Dar voz" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Engadir a cola actual", - "addToPlaylist": "Engadir a lista de reprodución…", - "episodeDetails": "Detalles do episodio", - "hideArtist": "Ocultar contido deste artista", - "discretePlay": "Reproducir", - "playAlbum": "Reproducir álbum", - "playArtist": "Reproducir artista", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "playPlaylist": "Reproducir lista", - "startRadio": "Reproducir cancións similares", - "playTrack": "Reproducir canción", - "playTracks": "Reproducir cancións", - "report": "Denunciar…", - "trackDetails": "Detalles da pista" - }, - "title": { - "more": "Máis…", - "unavailable": "Esta canción non está dispoñible en ningunha biblioteca a que teña acceso" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Engadir a favoritas", - "addToPlaylist": "Engadir a lista de reprodución…", - "addToQueue": "Engadir á cola", - "episodeDetails": "Detalles do episodio", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "startRadio": "Reproducir radio", - "removeFromFavorites": "Eliminar das favoritas", - "trackDetails": "Detalles da pista", - "albumDetails": "Ver álbum", - "artistDetails": "Ver artista", - "channelDetails": "Ver canle", - "seriesDetails": "Ver serie" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar accións da pista" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Engadir a favoritas", - "addToPlaylist": "Engadir a lista de reprodución…", - "addToQueue": "Engadir á cola", - "episodeDetails": "Detalles do episodio", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "startRadio": "Reproducir radio", - "removeFromFavorites": "Eliminar das favoritas", - "trackDetails": "Detalles da pista", - "albumDetails": "Ver álbum", - "artistDetails": "Ver artista", - "channelDetails": "Ver canle", - "seriesDetails": "Ver serie" - } - }, - "Table": { - "table": { - "header": { - "album": "Álbum", - "artist": "Artista", - "title": "Título" - } - } - }, - "Widget": { - "empty": { - "noResults": "Non se atopou nada" - }, - "button": { - "more": "Mostrar máis" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar accións da pista" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Axustar volume" - }, - "button": { - "mute": "Acalar", - "unmute": "Dar voz" - } - }, - "SearchBar": { - "label": { - "album": "Álbum", - "artist": "Artista", - "category": { - "federation": "Federación", - "podcasts": "Podcasts" - }, - "search": "Buscar contido", - "tag": "Etiqueta", - "track": "Canción" - }, - "link": { - "more": "Máis resultados 🡒", - "fediverse": "Buscar no fediverso", - "rss": "Subscribirse ao podcast vía RSS" - }, - "header": { - "noResults": "Non hai coincidencias" - }, - "placeholder": { - "search": "Buscar por artistas, álbums, pistas…" - }, - "empty": { - "noResults": "Lamentámolo, no hai resultados para a busca" - } - }, - "Search": { - "header": { - "albums": "Álbums", - "artists": "Artistas", - "search": "Buscar por algo de música" - }, - "placeholder": { - "search": "Artista, álbum, pista…" - }, - "empty": { - "noAlbums": "Ningún álbum coincide coa busca", - "noArtists": "Ningún artista coincide coa busca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografía da artista", - "category": "Categoría", - "image": "Imaxe da canle", - "description": "Descrición", - "username": "Identificador no Fediverso", - "language": "Idioma", - "name": "Nome", - "email": "Enderezo de email da dona", - "owner": "Nome da dona", - "podcast": "Podcasts", - "subcategory": "Subcategoría", - "tags": "Etiquetas" - }, - "placeholder": { - "name": "Un nome molón para a canle", - "username": "tremendonomedacanle" - }, - "header": { - "error": "Fallo ao gardar a canle" - }, - "help": { - "podcast": "Hospeda os teus episodios e ten a comunidade ao día.", - "discography": "Publica a túa música para crear a túa discografía con álbums e sinxelos.", - "podcastFields": "Utilizado para os campos itunes:email e itunes:name requeridos por certas plataformas como Spotify ou iTunes.", - "username": "Utilizado en URLs e para seguir esta canle no Fediverso. Non poderás cambialo posteriormente." - }, - "loader": { - "loading": "Cargando" - }, - "legend": { - "purpose": "Para que se vai usar esta canle?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Cancelar solicitude de seguimento", - "follow": "Seguir", - "unfollow": "Deixar de seguir" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copiar" - }, - "help": { - "embed": "Copiar/pegar este código no HTML da túa web", - "width": "Deixar baleiro para un widget interactivo", - "anonymous": "Por favor, contacta coa administración e pídelle que actualicen o axuste correspondente." - }, - "label": { - "embed": "Código incrustado", - "height": "Alto do trebello", - "width": "Ancho do trebello" - }, - "header": { - "preview": "Vista previa" - }, - "warning": { - "anonymous": "A compartición non funcionará, porque este servidor non permite a usuarias anónimas acceder ao contido." - }, - "message": { - "copy": "Texto copiado ao portapapeis!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Mostrar máis" - }, - "help": { - "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Mostrar máis" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "addDescription": "Engade unha descrición…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } pista en | { n } pista en", - "albums": "{ n } álbum | { n } álbums" - }, - "title": "Artista", - "button": { - "cancel": "Cancelar", - "edit": "Editar", - "embed": "Incrustar", - "more": "Máis…", - "play": "Reproducir tódolos álbums" - }, - "modal": { - "embed": { - "header": "Inclúe esta canción no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderación", - "discogs": "Buscar en Discogs", - "wikipedia": "Buscar en Wikipedia", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }", - "musicbrainz": "Ver en MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } canción coicidente cos filtros combinados | { n } cancións coincidentes cos filtros combinados", - "builder": "Construtor", - "created": "Radio creada", - "updated": "Radio actualizada" - }, - "table": { - "filter": { - "header": { - "actions": "Accións", - "candidates": "Candidatas", - "config": "Configurar", - "exclude": "Excluír", - "name": "Nome do filtro" - } - } - }, - "button": { - "filter": "Engadir filtro", - "save": "Gardar" - }, - "label": { - "filter": "Engade filtros para personalizar a túa radio", - "description": "Descrición", - "public": "Mostrar públicamente", - "name": "Nome da Radio" - }, - "placeholder": { - "description": "A miña abraiante descrición", - "name": "A miña increíble radio" - }, - "title": "Constructor de Radio", - "option": { - "filter": "Escolla un filtro" - }, - "description": { - "builder": "Pode utilizar esta interface para construír a súa propia radio, que reproducirá cancións segundo o seu criterio." - } - }, - "Filter": { - "cancelButton": "Cancelar", - "excludeLabel": "Excluír", - "removeButton": "Eliminar", - "matchingTracksModalHeader": "Filtro coincidente da canción" - } - }, - "FileUpload": { - "tooltip": { - "network": "Fallou a rede mentras se subía o ficheiro", - "size": "Fallou a subida, mira que non sexa demasiado grande", - "extension": "Tipo de ficheiro non válido, asegúrate de que subes un ficheiro de audio. Extensións de ficheiros soportadas { extensions }", - "retry": "Reintentar", - "denied": "Subida denegada, asegúrese de que o ficheiro non é demasiado grande e que non acadou o límite de cuota", - "timeout": "Caducou a subida, inténteo de novo" - }, - "table": { - "upload": { - "header": { - "actions": "Accións", - "filename": "Nome do ficheiro", - "size": "Tamaño", - "status": "Estado" - }, - "status": { - "pending": "Pendente", - "uploaded": "Subida", - "uploading": "Subindo…" - } - } - }, - "button": { - "cancel": "Cancelar", - "retry": "Voltar a intentar as subidas" - }, - "label": { - "uploadWidget": "Preme para escoller os ficheiros a subir ou arrastra e solta ficheiros ou directorios", - "remainingSpace": "Almacenaxe restante", - "extensions": "Extensións soportadas: { extensions }" - }, - "header": { - "failure": "Fallo ó iniciar a importación", - "server": "Estado da importación", - "status": "Estado da importación", - "local": "Importa música desde a almacenaxe local" - }, - "link": { - "processing": "Procesando", - "uploading": "Subindo", - "picard": "Recomendámoslle utilizar Picard para ese propósito." - }, - "description": { - "import": "Resultados da importación:", - "previousImport": "Resultados da importación anterior:" - }, - "message": { - "local": { - "format": "Os ficheiros de música que estás a subir están en formato OGG, Flac, MP3 ou AIFF", - "tag": "Os ficheiros de música que está a subir están correctamente etiquetados.", - "message": "Vai subir música a súa biblioteca. Antes de seguir, asegúrese de que:", - "copyright": "Non estás a subir contido con copyright a unha biblioteca pública, de outro xeito poderías faltarlle a lei" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Un breve resumen describindo os cambios." - }, - "button": { - "cancel": "Cancelar", - "clear": "Baleirar", - "reset": "Restablecer ao valor inicial", - "showUnreviewed": "Restrinxir a edicións non revisadas", - "showAll": "Mostrar todas as edicións", - "submit": "Enviar e aplicar a edición", - "new": "Enviar outra edición", - "suggest": "Enviar suxestión" - }, - "header": { - "failure": "Erro ó gardar o axuste", - "recentEdits": "Recentemente engadida", - "unreviewed": "Edicións recentes agardando revisión", - "success": "Enviouse correctamente a edición." - }, - "notApplicable": "N/A", - "empty": { - "suggestEdit": "Suxerir un cambio utilizando o formulario inferior." - }, - "label": { - "summary": "Resumen (optativo)" - }, - "message": { - "noPermission": "Non tes permiso para editar este obxeto, pero podes suxerir cambios. Unha vez enviados serán revisados antes da súa aprobación." - } - }, - "Albums": { - "link": { - "addMusic": "Engade algo de música" - }, - "title": "Álbums", - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Ollando álbums" - }, - "placeholder": { - "search": "Escribir título do álbum…" - }, - "empty": { - "noResults": "Sen resultados para a túa consulta" - }, - "pagination": { - "results": "Resultados por páxina" - }, - "label": { - "search": "Buscar", - "tags": "Etiquetas" - }, - "button": { - "search": "Buscar" - } - }, - "Artists": { - "button": { - "upload": "Engade algo de música", - "search": "Buscar" - }, - "label": { - "search": "Nome do artista", - "excludeCompilation": "Excluír Artistas da Compilación", - "tags": "Etiquetas" - }, - "title": "Artistas", - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando artistas" - }, - "empty": { - "noResults": "Sen resultados para a túa consulta" - }, - "pagination": { - "results": "Resultados por páxina" - }, - "placeholder": { - "search": "Buscar…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Álbum", - "artist": "Artista", - "copyright": "Copyright", - "license": "Licenza", - "series": "Serie", - "url": "URL", - "year": "Ano" - }, - "track": { - "bitrate": { - "label": "Taxa de bits" - }, - "codec": "Códec", - "downloads": "Descargas", - "duration": "Duración", - "size": "Tamaño" - } - }, - "header": { - "episode": "Detalles do episodio", - "library": "Bibliotecas relacionadas", - "playlists": "Listas relacionadas", - "release": "Detalles da publicación", - "track": "Detalles" - }, - "notApplicable": "N/A", - "description": { - "library": "Esta canción está presente nas seguintes bibliotecas:" - }, - "link": { - "musicbrainz": "Ver en MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Álbums", - "artists": "Artistas", - "moderation": "Actualizar regra de moderación" - }, - "header": { - "channels": "Canles", - "tracks": "Cancións" - } - }, - "ArtistDetail": { - "header": { - "album": "Álbums deste artista", - "track": "Novas pistas deste artista", - "library": "Bibliotecas da usuaria" - }, - "button": { - "more": "Cargando seguidoras…", - "filter": "Eliminar avatar" - }, - "link": { - "filter": "Ver ficheiros" - }, - "description": { - "library": "Este artista está presente nas seguintes bibliotecas:" - }, - "message": { - "filter": "Actualmente estás a ocultar contido relacionado con este artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Algo fallou no proceso de subida. Aquí embaixo atoparás máis información.", - "unknownError": { - "message": "Aconteceu un fallo descoñecido", - "label": "Fallo descoñecido" - }, - "invalidMetadata": { - "label": "Metadatos non válidos", - "message": "Os metadatos incluídos no ficheiro non son válidos ou faltan algúns campos requeridos." - } - }, - "button": { - "close": "Pechar" - }, - "table": { - "error": { - "debug": "Información de depuración", - "errorDetail": "Detalles do fallo", - "errorType": "Tipo de fallo", - "help": "Obter axuda" - } - }, - "header": { - "importDetail": "Estado da importación" - }, - "link": { - "support": "Abrir un fío de axuda (incluír información de depuración abaixo na túa mensaxe)", - "documentation": "Lea a documentación para este fallo" - }, - "message": { - "importDetail": "A subida está pendente e axiña será procesada polo servidor.", - "importSuccess": "A subida non se procesou correctamente polo servidor." - }, - "warning": { - "importSkipped": "A subida non se realizou porque xa ten unha semellante dispoñible nunha das súas bibliotecas." - } - }, - "EditCard": { - "button": { - "approve": "Aprobar", - "delete": "Borrar", - "reject": "Rexeitar" - }, - "status": { - "approved": "Aprobada", - "applied": "Aprobada e aplicada", - "pending": "Ficheiros pendentes", - "rejected": "Rexeitado" - }, - "modal": { - "delete": { - "header": "Eliminar esta suxestión?" - }, - "content": { - "warning": "Vaise eliminar completamente a suxestión, a acción é irreversible." - } - }, - "table": { - "update": { - "header": { - "field": "Campo", - "newValue": "Novo valor", - "oldValue": "Valor anterior" - }, - "notApplicable": "N/A" - } - }, - "header": { - "modification": "Data de modificación" - }, - "link": { - "track": "Canción #{ id } - % { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando Podcast" - }, - "button": { - "cancel": "Cancelar", - "channel": "Crear Canle", - "search": "Buscar", - "subscribe": "Subscribir", - "feed": "Subscribirse a fonte" - }, - "empty": { - "noResults": "Sen resultados para a túa consulta" - }, - "label": { - "search": "Título do podcast", - "tags": "Etiquetas" - }, - "title": "Podcasts", - "pagination": { - "results": "Resultados por páxina" - }, - "placeholder": { - "search": "Buscar…" - }, - "modal": { - "subscription": { - "header": "Subscrición" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando radios", - "instance": "Radios da instancia", - "user": "Radios da usuaria" - }, - "button": { - "add": "Crea unha radio", - "create": "Crea a túa propia radio" - }, - "placeholder": { - "search": "Escribe un nome de radio…" - }, - "empty": { - "noResults": "Sen resultados para a túa busca" - }, - "title": "Radios", - "pagination": { - "results": "Resultados por páxina" - }, - "label": { - "search": "Buscar" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Cancelar", - "delete": "Eliminar…", - "edit": "Editar", - "embed": "Incrustar", - "more": "Máis…" - }, - "modal": { - "delete": { - "header": "Eliminar este álbum?", - "content": { - "warning": "Vaise eliminar o álbum, asi como tódolos ficheiros asociados. Esta acción non ten volta." - } - }, - "embed": { - "header": "Inclúe este álbum no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderación", - "discogs": "Buscar en Discogs", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }", - "musicbrainz": "Ver en MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Cancelar", - "delete": "Eliminar…", - "download": "Descargar", - "edit": "Editar", - "embed": "Incrustar", - "more": "Máis…", - "play": "Reproducir" - }, - "modal": { - "delete": { - "header": "Eliminar esta canción?", - "content": { - "warning": "Vaise eliminar a canción xunto cos datos e ficheiros relacionados, esta acción non ten volta." - } - }, - "embed": { - "header": "Inclúe esta canción no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderación", - "discogs": "Buscar en Discogs", - "wikipedia": "Buscar en Wikipedia", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }" - }, - "title": "Canción" - }, - "AlbumEdit": { - "header": { - "edit": "Editar este álbum", - "suggest": "Suxire unha edición para este álbum" - }, - "message": { - "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." - } - }, - "ArtistEdit": { - "header": { - "edit": "Editar este artista", - "suggest": "Non podemos cargar a canción" - }, - "message": { - "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." - } - }, - "TrackEdit": { - "header": { - "edit": "Editar esta canción", - "suggest": "Non podemos cargar a canción" - }, - "message": { - "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodios", - "tracks": "Cancións", - "libraries": "Bibliotecas da usuaria" - }, - "description": { - "libraries": "Este álbum está presente nas seguintes bibliotecas:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importar" - } - }, - "FsLogs": { - "empty": { - "notStarted": "A importación non comezou" - } - }, - "Home": { - "title": "Biblioteca", - "header": { - "newChannels": "Novas canles", - "playlists": "Listas de reprodución", - "recentlyAdded": "Recentemente engadida", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" - } - }, - "TagSelector": { - "placeholder": { - "search": "Buscar…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favorita | { n } favoritas" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "link": { - "library": "Buscar na biblioteca" - }, - "loader": { - "loading": "Cargando as favoritas…" - }, - "empty": { - "noFavorites": "Aínda non engadiches cancións as favoritas" - }, - "pagination": { - "results": "Resultados por páxina" - }, - "title": "As súas Favoritas" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Engadir a favoritas", - "remove": "Eliminar das favoritas" - }, - "label": { - "inFavorites": "Nas favoritas" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } ficheiro | { n } ficheiros", - "quota": "Almacenaxe dispoñible:" - }, - "button": { - "cancel": "Cancelar", - "close": "Pechar", - "finishLater": "Rematar máis tarde", - "next": "Seguinte paso", - "previous": "Paso anterior", - "publish": "Publicar", - "update": "Actualizar" - }, - "header": { - "uploadFiles": "Ficheiros a subir", - "processing": "Procesando subidas", - "publish": "Publicar audio", - "uploadDetails": "Detalles da subida" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - }, - "label": { - "album": "Álbum", - "series": "Series" - }, - "option": { - "none": "Nada" - } - }, - "LicenseSelect": { - "link": { - "license": "Acerca desta licenza" - }, - "label": { - "license": "Licenza" - }, - "option": { - "none": "Nada" - } - }, - "UploadForm": { - "help": { - "license": "Engade unha licenza ao subido para darlle liberdade ao teu público." - }, - "label": { - "openBrowser": "Buscar…", - "channel": "Canle" - }, - "message": { - "dragAndDrop": "Arrastra e solta aquí os ficheiros ou abre o navegador para subilos", - "pending": "Tes borradores pendentes de publicar." - }, - "button": { - "edit": "Editar", - "ignore": "Ignorar", - "remove": "Eliminar", - "resume": "Retomar", - "retry": "Volta a intentar" - }, - "header": { - "error": "Fallou a publicación" - }, - "status": { - "errored": "Con fallos", - "pending": "Pendente", - "uploading": "Subindo" - }, - "description": { - "extensions": "Extensións soportadas: { extensions }" - }, - "warning": { - "quota": "Non tes espazo suficiente para subir máis ficheiros. Contacta coa administración." - } - }, - "AlbumModal": { - "button": { - "cancel": "Cancelar", - "create": "Crear" - }, - "header": { - "newAlbum": "Novo álbum", - "newSeries": "Nova serie" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descrición", - "position": "Paxinación", - "tags": "Etiquetas", - "title": "Título", - "image": "Imaxe da canción" - } - }, - "AlbumForm": { - "header": { - "error": "Fallou a creación" - }, - "label": { - "albumTitle": "Título" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Subscribir", - "unsubscribe": "Desubscribir" - }, - "help": { - "auth": "Tes que iniciar sesión para subscribirte a esta canle" - } - } + "title": "Acerca de" }, "AboutPod": { - "stat": { - "hoursOfMusic": "hora de música | horas de música", - "activeUsers": "usuaria activa | usuarias activas", - "albumsCount": "álbum | álbums", - "artistsCount": "artista | artistas", - "listeningsCount": "escoita | escoitas", - "tracksCount": "pista | pistas" + "feature": { + "allowList": "Lista de permitidos", + "anonymousAccess": "Acceso anónimo", + "federation": "Federación", + "quota": "Cota de subida", + "registrations": "Rexistros", + "status": { + "closed": "Pechado", + "disabled": "Desactivado", + "enabled": "Activado", + "open": "Abrir" + }, + "version": "Versión de Funkwhale" + }, + "header": { + "about": "Acerca desta instancia", + "contact": "Contactar", + "features": "Características", + "rules": "Regras", + "statistics": "Estatísticas", + "terms": "Termos e política de privacidade" }, - "title": "Acerca de", "link": { "about": "Acerca desta instancia", "features": "Características", @@ -1438,360 +69,242 @@ "statistics": "Estatísticas", "terms": "Termos e política de privacidade" }, - "header": { - "about": "Acerca desta instancia", - "contact": "Contactar", - "features": "Características", - "rules": "Regras", - "statistics": "Estatísticas", - "terms": "Termos e política de privacidade" - }, - "feature": { - "allowList": "Lista de permitidos", - "anonymousAccess": "Acceso anónimo", - "status": { - "closed": "Pechado", - "disabled": "Desactivado", - "enabled": "Activado", - "open": "Abrir" - }, - "federation": "Federación", - "version": "Versión de Funkwhale", - "registrations": "Rexistros", - "quota": "Cota de subida" + "message": { + "contact": "Envíanos un email: {'{{'} contactEmail {'}}'}" }, "notApplicable": "N/A", "placeholder": { - "noDescription": "Non hai descrición.", - "noRules": "Sen regras dispoñibles.", - "noTerms": "Non hai termos dispoñibles." + "noDescription": "Non hai descrición", + "noRules": "Sen regras dispoñibles", + "noTerms": "Non hai termos dispoñibles" + }, + "stat": { + "activeUsers": "usuaria activa | usuarias activas", + "albumsCount": "álbum | álbums", + "artistsCount": "artista | artistas", + "hoursOfMusic": "hora de música | horas de música", + "listeningsCount": "escoita | escoitas", + "tracksCount": "pista | pistas" + }, + "title": "Acerca de" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Este servidor executa Funkwhale, un proxecto comunitario que che permite escoitar e compartir música e audios nunha rede descentralizada e aberta.", + "paragraph2": "Funkwhale é libre e desenvolto por unha amigable comunidade de voluntarias." + }, + "quota": "As usuarias deste servidor tamén teñen { quota } de almacenaxe gratuíta para o seu contido!", + "signup": "Rexístrate agora para gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!" + }, + "header": { + "about": "Acerca de esta instancia Funkwhale", + "aboutFunkwhale": "Acerca de Funkwhale", + "contact": "Contactar", + "links": "Ligazóns útiles", + "login": "Acceder", + "newAlbums": "Álbums recén engadidos", + "newChannels": "Novas canles", + "signup": "Rexistro", + "statistics": "Estatísticas", + "welcome": "Benvida a { podName }!" + }, + "help": { + "registrationsClosed": "O rexistro está pechado nesta instancia. Podes crear unha conta noutra instancia usando a ligazón inferior." + }, + "link": { + "findOtherPod": "Atopar outra instancia", + "funkwhale": "Visita funkwhale.audio", + "learnMore": "Saber máis", + "mobileApps": { + "description": "Usa Funkwhale noutros dispositivos coas nosas apps", + "label": "Apps móbiles" + }, + "publicContent": { + "description": "Escoitar álbums públicos e listas compartidas neste servidor.", + "label": "Explorar contido público" + }, + "rules": "Regras do servidor", + "userGuides": { + "description": "Descubre todo o que precisas saber sobre Funkwhale e as súas características", + "label": "Guías para a usuaria" + }, + "viewMore": "Ver máis…" + }, + "placeholder": { + "noDescription": "Non hai descrición" + }, + "stat": { + "activeUsers": "{ n } usuaria activa | { n } usuarias activas", + "hoursOfMusic": "{ n } hora de música | { n } horas de música" + }, + "title": "Inicio" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Non atopamos a páxina!" + }, + "link": { + "home": "Ir ó inicio" }, "message": { - "contact": "Envíanos un email: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Lamentámolo, a páxina que solicitou non existe:" + }, + "title": "Páxina non atopada" + }, + "Queue": { + "button": { + "clear": "Baleirar", + "close": "Pechar", + "stopRadio": "Deter radio" + }, + "header": { + "failure": "Non se puido cargar a canción", + "noSources": "A canción non ten fontes dispoñibles.", + "radio": "Tes a radio acendida" + }, + "label": { + "addArtistContentFilter": "Ocultar contido deste artista…", + "duration": "Duración", + "enterFullscreen": "Ir a modo pantalla completa", + "exitFullscreen": "Saír do modo pantalla completa", + "favorite": "Engadir a favoritas", + "next": "Seguinte canción", + "pause": "Pausar", + "play": "Reproducir", + "populatingRadio": "Obtendo datos da radio…", + "previous": "Canción anterior", + "queue": "Cola", + "remove": "Eliminar", + "restart": "Reiniciar canción", + "selectTrack": "Elexir canción", + "showCoverArt": "Mostrar Capa", + "showVisualizer": "Mostrar visor MoonDrop" + }, + "message": { + "automaticPlay": "A seguinte canción reproducirase automáticamente en poucos segundos…", + "radio": "As novas cancións engadiranse aquí automáticamente.", + "webglUnsupported": "O teu navegador non semella ter soporte para WebGL2." + }, + "meta": { + "end": "Fin", + "queuePosition": "Canción { index } de { length }", + "startTime": "00:00", + "unknownAlbum": "Álbum descoñecido", + "unknownArtist": "Artista descoñecido" + }, + "warning": { + "connectivity": "Podería ter problemas de conectividade." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } de { total } seleccionado | { n } de { total } seleccionados", - "allSelected": "{ n } elemento seleccionado | Todos os { n } elementos seleccionados", - "go": "Ir", - "launch": "Lanzar", - "refresh": "Actualizar contido da tabla", - "select": "Seleccionar", - "selectAll": "Escolle todos os elementos", - "selectElement": "Elixe un elemento | Elixe todos os { n } elementos", - "selectCurrentPage": "Seleccionar só páxina actual" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverso", + "rss": "RSS", + "search": "Buscar" + }, + "description": { + "fediverse": "Utiliza este formulario para subscribirte a unha canle aloxada noutro lugar do Fediverso.", + "rss": "Usa este formulario para subscribirte a unha fonte RSS co seu URL." + }, + "error": { + "fetchFailed": "Non se puido obter o obxeto" + }, + "header": { + "fetchFailed": "Fallou a obtención do obxecto" + }, + "label": { + "fediverse": { + "fieldLabel": "Obxecto no Fediverso", + "fieldPlaceholder": "{'@'}usuaria{'@'}exemplo.com", + "title": "Subscribirse a un podcast aloxado no Fediverso" }, - "message": { - "success": "A acción { action } foi lanzada correctamente sobre { n } elemento | A acción { action } foi lanzada correctamente sobre { n } elementos", - "needsRefresh": "Actualizouse o contido, preme en actualizar para ver o contido actualizado" - }, - "label": { - "actions": "Accións", - "performAction": "Executar accións" - }, - "modal": { - "performAction": { - "header": "Quere executar { action } sobre { n } elemento? | Quere executar { action } sobre { n } elementos?", - "content": { - "warning": "Esto podería afectar a moitos elementos ou ter consecuencias irreversibles, por favor comprobe si realmente é o que quere." - } - } - }, - "header": { - "error": "Fallo ó aplicar a acción" + "rss": { + "fieldLabel": "Localización da fonte RSS", + "fieldPlaceholder": "https://web.exemplo.com/rss.xml", + "title": "Subscribirse a fonte RSS do podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "Acerca de", - "chat": "Sala de conversa", - "docs": "Documentación", - "forum": "Foro", - "support": "Axuda", - "git": "Incidencias", - "login": "Acceder", - "logout": "Pechar sesión", - "notifications": "Notificacións", - "profile": "Perfil", - "settings": "Axustes", - "signup": "Inscrición" - }, - "label": { - "shortcuts": "Atallos de teclado", - "language": "Idioma", - "theme": "Decorado" - } - }, - "UserModal": { - "link": { - "about": "Acerca de", - "chat": "Sala de conversa", - "forum": "Foro", - "support": "Axuda", - "git": "Incidencias", - "login": "Acceder", - "logout": "Pechar sesión", - "notifications": "Notificacións", - "profile": "Perfil", - "settings": "Axustes", - "signup": "Inscrición" - }, - "label": { - "shortcuts": "Atallos de teclado", - "language": "Idioma", - "theme": "Decorado" - }, - "header": { - "options": "Opcións" - }, - "button": { - "switchInstance": "Utilizar outra instancia" - } - }, - "DangerousButton": { - "button": { - "cancel": "Cancelar", - "confirm": "Confirmar" - }, - "header": { - "confirm": "Queres confirmar esta acción?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Cancelar", - "edit": "Editar", - "less": "Mostrar menos", - "more": "Mostrar máis", - "update": "Actualizar descrición" - }, - "header": { - "failure": "Fallo ao actualizar a descrición" - }, - "empty": { - "noDescription": "Non hai descrición" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Baleirar" - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Pregar", - "expand": "Despregar" - } - }, - "CopyInput": { - "button": { - "copy": "Copiar" - }, - "message": { - "success": "Texto copiado ao portapapeis!" - } - }, - "LoginModal": { - "link": { - "login": "Acceder", - "signup": "Inscrición" - }, - "header": { - "unauthenticated": "Non está autenticado" - }, - "description": { - "noAccess": "Non tes acceso!" - } - }, - "ContentForm": { - "help": { - "markdown": "Está permitido o Markdown." - }, - "empty": { - "noContent": "Sen vista previa." - }, - "button": { - "preview": "Vista previa", - "write": "Escribir" - }, - "placeholder": { - "input": "Escribe aquí unhas palabras…" - } - }, - "EmptyState": { - "header": { - "noResults": "Non se atoparon resultados." - }, - "button": { - "refresh": "Actualizar" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG ou JPG. As dimensión deben estar entre 1400x1400px e 3000x3000px. Tamaño máximo 5MB." - }, - "button": { - "remove": "Eliminar" - }, - "label": { - "upload": "Subir nova imaxe…" - }, - "loader": { - "uploading": "Subindo ficheiro…" - }, - "header": { - "failure": "Non se gardou o anexo" - } - }, - "ExpandableDiv": { - "button": { - "less": "Mostrar menos", - "more": "Mostrar máis" - } + "warning": { + "unsupported": "Aínda non está soportado este obxeto" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - } + "SetInstanceModal": { + "button": { + "cancel": "Cancelar", + "submit": "Enviar" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } xa está en { 1 }." - }, - "button": { - "addDuplicate": "Engadir igualmente", - "addToPlaylist": "Engadir a esta lista de reprodución", - "addTrack": "Engadir canción", - "cancel": "Cancelar", - "edit": "Editar" - }, - "header": { - "addToPlaylist": "Engadir a lista de reprodución", - "available": "Listaxes dispoñibles", - "manage": "Xestionar listas de reprodución", - "noResults": "Sen resultados co teu filtro", - "addFailure": "Non podemos engadir a canción a lista de reprodución" - }, - "table": { - "edit": { - "header": { - "edit": "Editar", - "lastModification": "Última modificación", - "name": "Nome", - "tracks": "Cancións" - } - } - }, - "placeholder": { - "filterPlaylist": "Nome da lista de reprodución" - }, - "label": { - "filter": "Filtro" - }, - "empty": { - "noPlaylists": "Aínda non se creou unha lista de reprodución" - } + "header": { + "chooseInstance": "Elixe a túa instancia", + "failure": "Non se puido conectar ao URL proporcionado", + "suggestions": "Opcións suxeridas" }, - "Editor": { - "button": { - "addDuplicate": "Engadir igualmente", - "clear": "Baleirar lista reprodución", - "copy": "Copiar cancións da cola a lista de reprodución", - "insertFromQueue": "Introducir desde a cola ({ n } canción) | Introducir desde a cola ({ n } cancións)" - }, - "error": { - "sync": "Algo fallou ao gardar os cambios" - }, - "message": { - "sync": "Cambios sincronizados co servidor" - }, - "modal": { - "clearPlaylist": { - "header": "Queres baleirar a lista de reprodución \"{ playlist }\"?", - "content": { - "warning": "Esto eliminará todas as cancións da lista de reprodución e non hai volta." - } - } - }, - "help": { - "reorder": "Arrastra e solta filas para reordenar as cancións na lista" - }, - "header": { - "editor": "Editora da lista" - }, - "warning": { - "duplicate": "Algunhas cancións na cola xa están nesta lista de reprodución:" - }, - "loading": { - "sync": "Sincronizando cambios co servidor…" - } + "help": { + "notFunkwhaleServer": "O enderezo proporcionado non é un servidor Funkwhale", + "selectPod": "Para continuar, elixe a instancia de Funkwhale á que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opcións suxeridas.", + "serverDown": "Igoal non está a funcionar o servidor" }, - "TrackPlaylistIcon": { - "button": { - "add": "Engadir a lista de reprodución…" - } + "label": { + "url": "URL da instancia" }, - "Form": { - "header": { - "createPlaylist": "Crear nova lista de reprodución", - "createSuccess": "Lista creada", - "updateSuccess": "Lista de reprodución actualizada", - "createFailure": "Lista creada" - }, - "button": { - "create": "Crear lista reprodución", - "update": "Actualizar lista de reprodución" - }, - "placeholder": { - "name": "A miña fantástica lista" - }, - "label": { - "name": "Nome da lista", - "visibility": "Visibilidade da lista de reprodución" - } - }, - "Widget": { - "button": { - "create": "Crear lista de reprodución", - "more": "Mostrar máis" - }, - "placeholder": { - "noPlaylists": "Aínda non se creou unha lista de reprodución" - } + "message": { + "currentConnection": "Neste intre tes conexión con { 0 }. Se continúas desconectarémoste da instancia actual e os datos locais serán eliminados.", + "newUrl": "Estás utilizando a instancia Funkwhale en { url }" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } aceptou o teu seguimento da biblioteca \"{ library }\"", - "libraryFollow": "{ username } segue a túa biblioteca \"{ library }\"", - "libraryPendingFollow": "{ username } quere seguir a túa biblioteca \"{ library }\"" + "ShortcutsModal": { + "button": { + "close": "Pechar" + }, + "header": { + "modal": "Atallos de teclado" + }, + "shortcut": { + "audio": { + "clearQueue": "Limpar cola", + "decreaseVolume": "Baixar volume", + "expandQueue": "Despregar vista da cola/reprodutor", + "increaseVolume": "Aumentar volume", + "label": "Atallos do reprodutor de audio", + "playNext": "Reproducir canción seguinte", + "playPause": "Pausar/reproducir pista actual", + "playPrevious": "Reproducir canción anterior", + "seekBack30": "Buscar atrás 30s", + "seekBack5": "Adiantar 5s", + "seekForward30": "Adiantar 30s", + "seekForward5": "Adiantar 5s", + "shuffleQueue": "Barallar a cola", + "toggleFavorite": "Marca de favorito", + "toggleLoop": "Activar a repetición da cola", + "toggleMute": "Activar silencio" }, - "button": { - "approve": "Aprobar", - "markRead": "Marcar como lido", - "markUnread": "Marcar como non lido", - "reject": "Rexeitar" + "general": { + "focus": "Foco na caixa de busca", + "label": "Atallos xerais", + "show": "Mostrar atallos de teclado dispoñibles", + "unfocus": "Saír da barra de busca" } } }, "Sidebar": { + "header": { + "administration": "Administración", + "explore": "Explorar", + "library": "Biblioteca", + "main": "Menú principal", + "more": "Máis" + }, + "label": { + "add": "Engadir contido", + "administration": "Administración", + "edits": "Ficheiros pendentes", + "follows": "Peticións de seguimento pendentes", + "language": "Idioma", + "main": "Menú principal", + "play": "Reproducir esta canción", + "reports": "Denuncias pendentes de revisar", + "theme": "Decorado" + }, "link": { "about": "Acerca desta instancia", "albums": "Álbums", @@ -1809,44 +322,1985 @@ "radios": "Radios", "search": "Buscar", "settings": "Axustes", + "switchInstance": "Cambiar de instancia", "users": "Usuarias" - }, - "label": { - "add": "Engadir contido", - "administration": "Administración", - "language": "Idioma", - "main": "Menú principal", - "follows": "Peticións de seguimento pendentes", - "edits": "Ficheiros pendentes", - "play": "Reproducir esta canción", - "theme": "Decorado" - }, - "header": { - "administration": "Administración", - "explore": "Explorar", - "main": "Menú principal", - "more": "Máis", - "library": "Biblioteca" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Gardar" + }, + "header": { + "error": "Erro ó gardar os axustes.", + "image": "Imaxe actual" + }, + "message": { + "success": "Axustes actualizados correctamente." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Engade un novo campo", + "edit": "Formulario de edición", + "preview": "Formulario vista previa" + }, + "help": { + "additionalFields": "Campos de formulario adicionais para mostrar. Só se mostran se se activa a validación manual do rexistro.", + "helpText": "Un texto optativo para mostrar ó inicio do formulario de rexistro." + }, + "label": { + "additionalField": "Campo adicional", + "additionalFields": "Campos adicionais", + "delete": "Borrar", + "helpText": "Texto de axuda", + "moveDown": "Baixar", + "moveUp": "Subir" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Accións", + "label": "Etiqueta do campo", + "required": "Requerido", + "type": "Tipo de campo" + }, + "required": { + "false": "Non", + "true": "Si" + }, + "type": { + "long": "Texto longo", + "short": "Texto curto" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canción | { n } cancións" + }, + "title": "Actualizada o { date }" + }, + "ChannelEntries": { + "help": { + "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." + } + }, + "ChannelForm": { + "header": { + "error": "Fallo ao gardar a canle." + }, + "help": { + "discography": "Publica a túa música para crear a túa discografía con álbums e sinxelos.", + "podcast": "Hospeda os teus episodios e ten a comunidade ao día.", + "podcastFields": "Utilizado para os campos itunes:email e itunes:name requeridos por certas plataformas como Spotify ou iTunes.", + "username": "Utilizado en URLs e para seguir esta canle no Fediverso. Non poderás cambialo posteriormente." + }, + "label": { + "category": "Categoría", + "description": "Descrición", + "discography": "Discografía da artista", + "email": "Enderezo de email da dona", + "image": "Imaxe da canle", + "language": "Idioma", + "name": "Nome", + "owner": "Nome da dona", + "podcast": "Podcasts", + "subcategory": "Subcategoría", + "tags": "Etiquetas", + "username": "Identificador no Fediverso" + }, + "legend": { + "purpose": "Para que se vai usar esta canle?" + }, + "loader": { + "loading": "Cargando" + }, + "placeholder": { + "name": "Un nome molón para a canle", + "username": "tremendonomedacanle" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodios" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Mostrar máis" + }, + "help": { + "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Mostrar máis" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copiar" + }, + "header": { + "preview": "Vista previa" + }, + "help": { + "anonymous": "Por favor, contacta coa administración e pídelle que actualicen o axuste correspondente.", + "embed": "Copiar/pegar este código no HTML da túa web", + "width": "Deixar baleiro para un widget interactivo" + }, + "label": { + "embed": "Código incrustado", + "height": "Alto do trebello", + "width": "Ancho do trebello" + }, + "message": { + "copy": "Texto copiado ao portapapeis!" + }, + "warning": { + "anonymous": "A compartición non funcionará, porque este servidor non permite a usuarias anónimas acceder ao contido." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cancelar solicitude de seguimento", + "follow": "Seguir", + "unfollow": "Deixar de seguir" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Engadir a lista de reprodución", + "addToQueue": "Engadir a cola actual", + "discretePlay": "Reproducir", + "episodeDetails": "Detalles do episodio", + "hideArtist": "Ocultar contido deste artista", + "playAlbum": "Reproducir álbum", + "playArtist": "Reproducir artista", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "playPlaylist": "Reproducir lista", + "playTrack": "Reproducir canción", + "playTracks": "Reproducir cancións", + "report": "Denunciar…", + "startRadio": "Reproducir cancións similares", + "trackDetails": "Detalles da pista" + }, + "title": { + "more": "Máis…", + "unavailable": "Esta canción non está dispoñible en ningunha biblioteca a que teña acceso" + } + }, + "Player": { + "header": { + "player": "Reprodutor e controis" + }, + "label": { + "addArtistContentFilter": "Ocultar contido deste artista…", + "audioPlayer": "Reprodutor", + "clearQueue": "Baleirar a cola", + "expandQueue": "Despregar cola", + "loopingDisabled": "Bucle desactivado. Pulse para cambiar ao bucle de unha soa canción.", + "loopingSingle": "Bucle de unha canción. Pulse para cambiar a bucle de toda a cola.", + "loopingWholeQueue": "Bucle de toda a cola. Pulse para desactivar o bucle.", + "mute": "Acalar", + "nextTrack": "Seguinte canción", + "pause": "Pausar", + "play": "Reproducir", + "previousTrack": "Canción anterior", + "shuffleQueue": "Barallar a cola", + "unmute": "Dar voz" + }, + "meta": { + "position": "{ index } de { length }", + "unknownAlbum": "Álbum descoñecido", + "unknownArtist": "Artista descoñecido" + } + }, + "PlayerControls": { + "labels": { + "next": "Canción seguinte", + "pause": "Pausar", + "play": "Reproducir", + "previous": "Canción anterior" + } + }, + "Search": { + "empty": { + "noAlbums": "Ningún álbum coincide coa busca", + "noArtists": "Ningún artista coincide coa busca" + }, + "header": { + "albums": "Álbums", + "artists": "Artistas", + "search": "Buscar por algo de música" + }, + "placeholder": { + "search": "Artista, álbum, pista…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Lamentámolo, no hai resultados para a busca" + }, + "header": { + "noResults": "Non hai coincidencias" + }, + "label": { + "album": "Álbum", + "artist": "Artista", + "category": { + "federation": "Federación", + "podcasts": "Podcasts" + }, + "search": "Buscar contido", + "tag": "Etiqueta", + "track": "Canción" + }, + "link": { + "fediverse": "Buscar no fediverso", + "more": "Máis resultados 🡒", + "rss": "Subscribirse ao podcast vía RSS" + }, + "placeholder": { + "search": "Buscar por artistas, álbums, pistas…" + } + }, + "VolumeControl": { + "button": { + "mute": "Acalar", + "unmute": "Dar voz" + }, + "label": { + "slider": "Axustar volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } canción | { n } cancións" + } + }, + "Widget": { + "button": { + "more": "Mostrar máis" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canción | { n } cancións" + } + }, + "Widget": { + "button": { + "more": "Mostrar máis" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostrar accións da pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Engadir a favoritas", + "addToPlaylist": "Engadir a lista de reprodución", + "addToQueue": "Engadir á cola", + "albumDetails": "Ver álbum", + "artistDetails": "Ver artista", + "channelDetails": "Ver canle", + "episodeDetails": "Detalles do episodio", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "removeFromFavorites": "Eliminar das favoritas", + "seriesDetails": "Ver serie", + "startRadio": "Reproducir radio", + "trackDetails": "Detalles da pista" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostrar accións da pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Engadir a favoritas", + "addToPlaylist": "Engadir a lista de reprodución", + "addToQueue": "Engadir á cola", + "albumDetails": "Ver álbum", + "artistDetails": "Ver artista", + "channelDetails": "Ver canle", + "episodeDetails": "Detalles do episodio", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "removeFromFavorites": "Eliminar das favoritas", + "seriesDetails": "Ver serie", + "startRadio": "Reproducir radio", + "trackDetails": "Detalles da pista" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Álbum", + "artist": "Artista", + "title": "Título" + } + } + }, + "Widget": { + "button": { + "more": "Mostrar máis" + }, + "empty": { + "noResults": "Non se atopou nada" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Recrear token" + }, + "header": { + "appDetails": "Detalles da aplicación", + "appSecretWarning": "Gardar unha copia deste token nun lugar seguro.", + "editApp": "Editar aplicación" + }, + "help": { + "appDetails": "O ID da aplicación e a clave segreda son valores sensibles que debes tratar como contrasinais. Non os compartas con ninguén." + }, + "label": { + "accessToken": "Token de acceso", + "appId": "ID da aplicación", + "appSecret": "Chave segreda da aplicación" + }, + "link": { + "settings": "Volver ós axustes" + }, + "message": { + "appSecretWarning": "Non poderás volver a velo unha vez saias desta pantalla." + }, + "title": "Editar aplicación" + }, + "ApplicationForm": { + "button": { + "create": "Crear aplicación", + "update": "Actualizar lista de reprodución" + }, + "header": { + "failure": "Non podemos crear a súa conta" + }, + "help": { + "redirectUri": "Utilice \"urn:ietf:wg:oauth:2.0:oob\" como unha URI de redirección se as aplicacións non son mostradas na web." + }, + "label": { + "name": "Nome", + "redirectUri": "URI de redirección", + "scopes": { + "description": "Marcando \"Lectura\" e \"Escritura\" para o ámbito superior implica dar acceso aos ámbitos inferiores.", + "label": "Ámbitos", + "read": { + "description": "Acceso de só-lectura ao datos de usuario", + "label": "Ler" + }, + "write": { + "description": "Acceso de só-escritura aos datos de usuario", + "label": "Escribir" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Volver ós axustes" + }, + "title": "Crear unha nova aplicación" + }, + "Authorize": { + "button": { + "authorize": "Autorizar { app }" + }, + "header": { + "access": "{ app } quere acceder a túa conta Funkwhale", + "allScopes": "Acceso completo", + "authorize": "Autorizar app de terceiros", + "authorizeFailure": "Erro ó autorizar a aplicación", + "fetchFailure": "Erro ó obter datos da aplicación", + "readOnly": "Só-lectura", + "writeOnly": "Só-escritura" + }, + "help": { + "copyCode": "Vaiseche mostrar un código para copiar-pegar na aplicación", + "pasteCode": "Copiar-pegar o seguinte código na aplicación:", + "redirect": "Vas ser redirixida a { 0 }" + }, + "message": { + "unknownPermissions": "Esta aplicación tamén está solicitando os seguintes permisos descoñecidos:" + }, + "title": "Permitir aplicación" + }, + "LoginForm": { + "button": { + "login": "Acceder" + }, + "header": { + "loginFailure": "Non podemos darche acceso" + }, + "help": { + "approvalRequired": "Se te rexistraches recentemente, poderías ter que agardar un pouco para que se revise a conta ou verifique o teu enderezo de correo.", + "invalidCredentials": "Comproba que as credenciais son correctas e asegúrate de ter verificado o email." + }, + "label": { + "password": "Contrasinal", + "username": "Nome de usuaria ou email" + }, + "link": { + "createAccount": "Crear unha conta", + "resetPassword": "Restablece o contrasinal" + }, + "message": { + "redirect": "Ímoste redirixir a {domain} para autenticarte" + }, + "placeholder": { + "username": "Escribe o teu nome de usuaria ou email" + } + }, + "Logout": { + "button": { + "logout": "Si, pechade a sesión!" + }, + "header": { + "confirm": "Tes certeza de querer pechar sesión?", + "unauthenticated": "Non iniciaches sesión" + }, + "link": { + "login": "Accede!" + }, + "message": { + "loggedIn": "Accedeches como { username }" + }, + "title": "Pechar sesión" + }, + "Plugin": { + "button": { + "save": "Gardar", + "scan": "Escanear" + }, + "description": { + "library": "A biblioteca onde importar os ficheiros." + }, + "header": { + "failure": "Fallo ao gardar o plugin" + }, + "label": { + "library": "Biblioteca", + "pluginEnabled": "Activado" + }, + "link": { + "documentation": "Documentación" + } + }, + "Settings": { + "button": { + "delete": "Borrar", + "deleteAccount": "Eliminar a miña conta…", + "deleteAccountConfirm": "Eliminar a miña conta", + "disableSubsonic": "Desactivar o acceso", + "edit": "Editar", + "password": "Cambiar contrasinal", + "refresh": "Actualizar", + "remove": "Eliminar", + "removeApp": "Eliminar aplicación", + "revoke": "Repudiar", + "revokeAccess": "Retirar acceso", + "update": "Actualizar", + "updateSettings": "Actualizar axustes" + }, + "description": { + "authorizedApps": "Esta é unha lista das aplicacións que teñen acceso aos datos da túa conta.", + "changeEmail": "Cambiar o enderezo de email asociado á túa conta. Enviarémosche un email para confirmar o novo enderezo.", + "changePassword": { + "paragraph1": "Ao cambiar o contrasinal tamén cambias o contrasinal no API Subsonic si é que solicitaches un.", + "paragraph2": "Deberá actualizar o contrasinal nos seus clientes que utilicen este contrasinal." + }, + "contentFilters": "Os filtros de contido axúdanche a ocultar contido que non queres ver neste servizo.", + "deleteAccount": "Podes eliminar de xeito irreversible epermanente a túa conta e todos os datos asociados utilizando o formulario inferior. Pedirase confirmación.", + "plugins": "Usa engadidos para extender Funkwhale e ter características adicionais.", + "yourApps": "Esta é a lista das aplicacións que ti creaches." + }, + "header": { + "accountFailure": "Non podemos eliminar a túa conta", + "accountSettings": "Axustes da conta", + "authorizedApps": "Apps autorizadas", + "avatar": "Avatar", + "avatarFailure": "Non se gardou o avatar", + "changeEmail": "Cambiar o meu enderezo de email", + "changePassword": "Cambiar o contrasinal", + "contentFilters": "Filtros de contido", + "deleteAccount": "Eliminar a miña conta", + "emailFailure": "Non podemos cambiar o teu enderezo de email", + "hiddenArtists": "Artistas ocultos", + "noApps": "Non ten ningunha regra activada para esta conta.", + "noPersonalApps": "Non tes ningunha aplicación rexistrada.", + "passwordFailure": "Non se pode cambiar o contrasinal", + "plugins": "Plugins", + "settingsUpdated": "Axustes actualizados", + "updateFailure": "Non se actualizaron os axustes", + "yourApps": "As súas notificacións" + }, + "help": { + "changePassword": "Comproba que o contrasinal é correcto", + "noApps": "Se autorizas o acceso aos teus datos por aplicacións de terceiros, estas aplicacións aparecerán aquí.", + "noPersonalApps": "Engade unha para integrar Funkwhale con aplicacións de terceiros." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Contrasinal actual", + "newEmail": "Novo enderezo de email", + "newPassword": "Novo contrasinal", + "password": "Contrasinal" + }, + "link": { + "managePlugins": "Xestionar plugins", + "newApp": "Rexistrar unha nova aplicación" + }, + "message": { + "confirmDelete": "Enviouse a solicitude de borrado, o contido da conta eliminarase en breve", + "currentEmail": "O teu email actual é {email}" + }, + "modal": { + "changePassword": { + "content": { + "logout": "Pecharemos esta sesión e deberás acceder co novo", + "subsonic": "O teu contrasinal Subsonic será cambiado por un novo, aleatorio, desconectando todos os dispositivos que utilicen o contrasinal antigo", + "warning": "Cambiar o contrasinal terá as seguintes consecuencias" + }, + "header": "Cambiar o contrasinal?" + }, + "deleteAccount": { + "content": { + "warning": "Esto non ten volta e eliminará permanentemente os teus datos dos nosos servidores. Pecharás sesión inmediatamente." + }, + "header": "Desexas eliminar a túa conta?" + }, + "deleteApp": { + "content": { + "warning": "Esto eliminará completamente a aplicación e tódolos tokens asociados." + }, + "header": "Eliminar a aplicación \"{ application }\"?" + }, + "revokeApp": { + "content": { + "warning": "Esto evitará que a aplicación acceda ao servizo no seu nome." + }, + "header": "Retirar acceso para a aplicación \"{ application }\"?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data de creación", + "name": "Nome" + } + }, + "authorizedApps": { + "header": { + "application": "Aplicación", + "permissions": "Permisos" + } + }, + "yourApps": { + "header": { + "application": "Aplicación", + "creationDate": "Data de creación", + "scopes": "Ámbitos" + } + } + }, + "title": "Axustes da conta", + "warning": { + "deleteAccount": "Vaise eliminar a túa conta dos nosos servidores dentro duns minutos. Contactaremos con outros servidores que puidesen ter unha copia dos teus datos para que os borren. Por favor, ten en conta que algún de estos servidores podería estar desconectado ou non poder levar a fin a operación." + } + }, + "SignupForm": { + "button": { + "create": "Crear a miña conta" + }, + "header": { + "login": "Accede coa túa conta Funkwhale", + "signupFailure": "Non se pode crear a conta." + }, + "label": { + "email": "Enderezo de email", + "invitation": "Código de convite", + "password": "Contrasinal", + "username": "Nome de usuaria" + }, + "message": { + "accountCreated": "Creouse correctamente a conta. Verifica o teu email antes de intentar acceder.", + "awaitingReview": "A solicitude da conta enviouse correctamente. Serás notificada por email cando o equipo de administración revise a solicitude.", + "registrationClosed": "O rexistro público non é posible en esta instancia. Precisas un código de convite para rexistrarte.", + "requiresReview": "O rexistro nesta instancia está aberto, pero revisado pola administración para ser aprobado." + }, + "placeholder": { + "email": "Escribe o teu email", + "invitation": "Escribe o código de convite (dif. maiúsculas)", + "username": "Escribe o teu nome de usuaria" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Desactivar o acceso", + "confirmNewPassword": "Solicitar un contrasinal", + "disable": "Desactivar o acceso Subsonic", + "newPassword": "Solicitar un novo contrasinal" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale é compatible con outros reprodutores de música compatibles coa API Subsonic.", + "paragraph2": "Pode utilizalos para desfrutar da súa lista de reprodución e música en modo fora de liña, no seu dispositivo móbil ou tableta, por exemplo.", + "paragraph3": "Porén, o acceso a Funkwhale desde estos outros clientes precisa dun contrasinal diferente que podes establecer aquí embaixo." + } + }, + "header": { + "error": "Fallo", + "subsonic": "Contrasinal API Subsonic" + }, + "label": { + "subsonicField": "O teu contrasinal API Subsonic" + }, + "link": { + "apps": "Aprende como utilizar Funkwhale desde outras apps" + }, + "message": { + "accessDisabled": "Acceso desactivado", + "passwordUpdated": "Contrasinal actualizado", + "unavailable": "O API Subsonic non está dispoñible en esta instancia Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Desactivará o acceso a API Subsonic desde a conta." + }, + "header": "Desactivar o acceso a API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "Esto pechará sesión nos dispositivos existentes que utilicen o contrasinal actual." + }, + "header": "Solicitar un nonvo contrasinal para o API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Fallou a creación" + }, + "label": { + "albumTitle": "Título" + } + }, + "AlbumModal": { + "button": { + "cancel": "Cancelar", + "create": "Crear" + }, + "header": { + "newAlbum": "Novo álbum", + "newSeries": "Nova serie" + } + }, + "AlbumSelect": { + "label": { + "album": "Álbum", + "series": "Series" + }, + "meta": { + "tracks": "{ n } canción | { n } cancións" + }, + "option": { + "none": "Nada" + } + }, + "LicenseSelect": { + "label": { + "license": "Licenza" + }, + "link": { + "license": "Acerca desta licenza" + }, + "option": { + "none": "Nada" + } + }, + "SubscribeButton": { + "help": { + "auth": "Tes que iniciar sesión para subscribirte a esta canle" + }, + "title": { + "subscribe": "Subscribir", + "unsubscribe": "Desubscribir" + } + }, + "UploadForm": { + "button": { + "edit": "Editar", + "ignore": "Ignorar", + "remove": "Eliminar", + "resume": "Retomar", + "retry": "Volta a intentar" + }, + "description": { + "extensions": "Extensións soportadas: { extensions }" + }, + "header": { + "error": "Fallou a publicación" + }, + "help": { + "license": "Engade unha licenza ao subido para darlle liberdade ao teu público." + }, + "label": { + "channel": "Canle", + "openBrowser": "Buscar…" + }, + "message": { + "dragAndDrop": "Arrastra e solta aquí os ficheiros ou abre o navegador para subilos", + "pending": "Tes borradores pendentes de publicar." + }, + "status": { + "errored": "Con fallos", + "pending": "Pendente", + "uploading": "Subindo" + }, + "warning": { + "quota": "Non tes espazo suficiente para subir máis ficheiros. Contacta coa administración." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descrición", + "image": "Imaxe da canción", + "position": "Paxinación", + "tags": "Etiquetas", + "title": "Título" + } + }, + "UploadModal": { + "button": { + "cancel": "Cancelar", + "close": "Pechar", + "finishLater": "Rematar máis tarde", + "next": "Seguinte paso", + "previous": "Paso anterior", + "publish": "Publicar", + "update": "Actualizar" + }, + "header": { + "processing": "Procesando subidas", + "publish": "Publicar audio", + "uploadDetails": "Detalles da subida", + "uploadFiles": "Ficheiros a subir" + }, + "meta": { + "files": "{ n } ficheiro | { n } ficheiros", + "quota": "Almacenaxe dispoñible: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{ n } elemento seleccionado | Todos os { n } elementos seleccionados", + "go": "Ir", + "launch": "Lanzar", + "refresh": "Actualizar contido da tabla", + "select": "Seleccionar", + "selectAll": "Escolle todos os elementos", + "selectCurrentPage": "Seleccionar só páxina actual", + "selectElement": "Elixe un elemento | Elixe todos os { n } elementos", + "selected": "{ n } de { total } seleccionado | { n } de { total } seleccionados" + }, + "header": { + "error": "Fallo ó aplicar a acción" + }, + "label": { + "actions": "Accións", + "performAction": "Executar accións" + }, + "message": { + "needsRefresh": "Actualizouse o contido, preme en actualizar para ver o contido actualizado", + "success": "A acción { action } foi lanzada correctamente sobre { n } elemento | A acción { action } foi lanzada correctamente sobre { n } elementos" + }, + "modal": { + "performAction": { + "content": { + "warning": "Esto podería afectar a moitos elementos ou ter consecuencias irreversibles, por favor comprobe si realmente é o que quere." + }, + "header": "Quere executar { action } sobre { n } elemento? | Quere executar { action } sobre { n } elementos?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Eliminar" + }, + "header": { + "failure": "Non se gardou o anexo" + }, + "help": { + "upload": "PNG ou JPG. As dimensión deben estar entre 1400x1400px e 3000x3000px. Tamaño máximo 5MB." + }, + "label": { + "upload": "Subir nova imaxe…" + }, + "loader": { + "uploading": "Subindo ficheiro…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Pregar", + "expand": "Despregar" + } + }, + "ContentForm": { + "button": { + "preview": "Vista previa", + "write": "Escribir" + }, + "empty": { + "noContent": "Nada na vista previa" + }, + "help": { + "markdown": "Está permitido o Markdown" + }, + "placeholder": { + "input": "Escribe aquí unhas palabras…" + } + }, + "CopyInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "success": "Texto copiado ao portapapeis!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Cancelar", + "confirm": "Confirmar" + }, + "header": { + "confirm": "Queres confirmar esta acción?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } h { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Actualizar" + }, + "header": { + "noResults": "Non se atoparon resultados." + } + }, + "ExpandableDiv": { + "button": { + "less": "Mostrar menos", + "more": "Mostrar máis" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Baleirar" + }, + "label": { + "search": "Buscar" + }, + "placeholder": { + "search": "Buscar…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Non tes acceso" + }, + "header": { + "unauthenticated": "Non está autenticado" + }, + "link": { + "login": "Acceder", + "signup": "Inscrición" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Cancelar", + "edit": "Editar", + "less": "Mostrar menos", + "more": "Mostrar máis", + "update": "Actualizar descrición" + }, + "empty": { + "noDescription": "Non hai descrición" + }, + "header": { + "failure": "Fallo ao actualizar a descrición" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Idioma", + "shortcuts": "Atallos de teclado", + "theme": "Cambiar aparencia" + }, + "link": { + "about": "Acerca de", + "chat": "Sala de conversa", + "docs": "Documentación", + "forum": "Foro", + "git": "Incidencias", + "login": "Acceder", + "logout": "Pechar sesión", + "notifications": "Notificacións", + "profile": "Perfil", + "settings": "Axustes", + "signup": "Inscrición", + "support": "Axuda" + } + }, + "UserModal": { + "button": { + "switchInstance": "Utilizar outra instancia" + }, + "header": { + "options": "Opcións" + }, + "label": { + "language": "Idioma", + "shortcuts": "Atallos de teclado", + "theme": "Cambiar aparencia" + }, + "link": { + "about": "Acerca de", + "chat": "Sala de conversa", + "docs": "Documentación", + "forum": "Foro", + "git": "Incidencias", + "login": "Acceder", + "logout": "Pechar sesión", + "notifications": "Notificacións", + "profile": "Perfil", + "settings": "Axustes", + "signup": "Inscrición", + "support": "Axuda" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Aínda non engadiches cancións as favoritas" + }, + "header": { + "favorites": "{ n } favorita | { n } favoritas" + }, + "link": { + "library": "Buscar na biblioteca" + }, + "loader": { + "loading": "Cargando as favoritas…" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "title": "As súas Favoritas" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Engadir a favoritas", + "remove": "Eliminar das favoritas" + }, + "label": { + "inFavorites": "Nas favoritas" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Pechar", + "reload": "Pechar e recargar páxina" + }, + "description": { + "failure": "Algo fallou ao actualizar os datos:", + "pending": "A solicitude de actualización non se realizou a tempo no noso servidor. Procesarase máis tarde.", + "skipped": "O servidor remoto respondeu, pero o tipo de resposta non está soportado por Funkwhale.", + "success": "Actualizáronse os datos desde o servidor remoto." + }, + "header": { + "failure": "Actualizar", + "pending": "Actualizar info da instancia", + "refresh": "Actualizando obxeto desde servidor remoto…", + "saveFailure": "Erro ó gardar os axustes", + "skipped": "Omiteuse a actualización", + "success": "Actualización correcta" + }, + "loader": { + "awaitingResult": "Cargando as favoritas…", + "fetchRequest": "Solicitando a obtención…" + }, + "table": { + "error": { + "label": { + "detail": "Detalles do fallo", + "type": "Tipo de fallo" + }, + "value": { + "connectionError": "Non se puido conectar ao servidor remoto", + "httpError": "Houbo un fallo HTTP ao contactar co servidor remoto", + "httpStatus": "O servidor remoto respondeu con HTTP { status }", + "invalidAttributesError": "Os datos devoltos polo servidor remoto teñen valores non válidos ou faltan atributos", + "invalidJsonError": "O servidor remoto devolveu un datos JSON ou JSON-LD non válidos", + "timeoutError": "O servidor remoto non respondeu rápido abondo", + "unknownError": "Fallo descoñecido" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Mostrar máis" + }, + "empty": { + "noMatch": "Sen biblioteca coincidente." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "copy": "Texto copiado ao portapapeis!" + }, + "title": "Mostrar/ocultar contrasinal" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Engade unha descrición…" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canción | { n } cancións" + }, + "title": "Álbum" + }, + "AlbumDetail": { + "description": { + "libraries": "Este álbum está presente nas seguintes bibliotecas:" + }, + "header": { + "episodes": "Episodios", + "libraries": "Bibliotecas da usuaria", + "tracks": "Cancións" + }, + "meta": { + "volume": "Volume { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Cancelar", + "delete": "Eliminar", + "edit": "Editar", + "embed": "Incrustar", + "more": "Máis…" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "musicbrainz": "Ver en MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar o álbum, asi como tódolos ficheiros asociados. Esta acción non ten volta." + }, + "header": "Eliminar este álbum?" + }, + "embed": { + "header": "Inclúe este álbum no teu sitio web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Editar este álbum", + "suggest": "Suxire unha edición para este álbum" + }, + "message": { + "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." + } + }, + "Albums": { + "button": { + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a túa consulta" + }, + "header": { + "browse": "Ollando álbums" + }, + "label": { + "search": "Buscar", + "tags": "Etiquetas" + }, + "link": { + "addMusic": "Engade algo de música" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Escribir título do álbum…" + }, + "title": "Álbums" + }, + "ArtistBase": { + "button": { + "cancel": "Cancelar", + "edit": "Editar", + "embed": "Incrustar", + "more": "Máis…", + "play": "Reproducir tódolos álbums" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "musicbrainz": "Ver en MusicBrainz", + "wikipedia": "Buscar en Wikipedia" + }, + "meta": { + "albums": "{ n } álbum | { n } álbums", + "tracks": "{ n } pista en | { n } pista en" + }, + "modal": { + "embed": { + "header": "Inclúe o traballo desta autora no teu sitio web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Eliminar avatar", + "more": "Cargando seguidoras…" + }, + "description": { + "library": "Este artista está presente nas seguintes bibliotecas:" + }, + "header": { + "album": "Álbums deste artista", + "library": "Bibliotecas da usuaria", + "track": "Novas pistas deste artista" + }, + "link": { + "filter": "Ver ficheiros" + }, + "message": { + "filter": "Actualmente estás a ocultar contido relacionado con este artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Editar este artista", + "suggest": "Non podemos cargar a canción" + }, + "message": { + "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." + } + }, + "Artists": { + "button": { + "search": "Buscar", + "upload": "Engade algo de música" + }, + "empty": { + "noResults": "Sen resultados para a túa consulta" + }, + "header": { + "browse": "Buscando artistas" + }, + "label": { + "excludeCompilation": "Excluír Artistas da Compilación", + "search": "Nome do artista", + "tags": "Etiquetas" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Buscar…" + }, + "title": "Artistas" + }, + "EditCard": { + "button": { + "approve": "Aprobar", + "delete": "Borrar", + "reject": "Rexeitar" + }, + "header": { + "modification": "Data de modificación" + }, + "link": { + "track": "Canción #{ id } - % { name }" + }, + "modal": { + "content": { + "warning": "Vaise eliminar completamente a suxestión, a acción é irreversible." + }, + "delete": { + "header": "Eliminar esta suxestión?" + } + }, + "status": { + "applied": "Aprobada e aplicada", + "approved": "Aprobada", + "pending": "Ficheiros pendentes", + "rejected": "Rexeitado" + }, + "table": { + "update": { + "header": { + "field": "Campo", + "newValue": "Novo valor", + "oldValue": "Valor anterior" + }, + "notApplicable": "N/A" + } + } + }, + "EditForm": { + "button": { + "cancel": "Cancelar", + "clear": "Baleirar", + "new": "Enviar outra edición", + "reset": "Restablecer ao valor inicial", + "showAll": "Mostrar todas as edicións", + "showUnreviewed": "Restrinxir a edicións non revisadas", + "submit": "Enviar e aplicar a edición", + "suggest": "Enviar suxestión" + }, + "empty": { + "suggestEdit": "Suxire un cambio utilizando o formulario inferior" + }, + "header": { + "failure": "Erro ó gardar o axuste", + "recentEdits": "Edicións recentes", + "success": "Enviouse correctamente a edición.", + "unreviewed": "Edicións recentes agardando revisión" + }, + "label": { + "summary": "Resumen (optativo)" + }, + "message": { + "noPermission": "Non tes permiso para editar este obxeto, pero podes suxerir cambios. Unha vez enviados serán revisados antes da súa aprobación." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "Un breve resumen describindo os cambios." + } + }, + "FileUpload": { + "button": { + "cancel": "Cancelar", + "retry": "Voltar a intentar as subidas" + }, + "description": { + "import": "Estado da importación", + "previousImport": "Resultados da importación anterior:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Fallo ó iniciar a importación", + "local": "Importa música desde a almacenaxe local", + "server": "Estado da importación", + "status": "Estado da importación" + }, + "label": { + "extensions": "Extensións soportadas: { extensions }", + "remainingSpace": "Almacenaxe restante", + "uploadWidget": "Preme para escoller os ficheiros a subir ou arrastra e solta ficheiros ou directorios" + }, + "link": { + "picard": "Recomendámoslle utilizar Picard para ese propósito.", + "processing": "Procesando", + "uploading": "Subindo" + }, + "message": { + "listener": "Esta páxina solicítache que confirmes que queres saír - non se gardarán os datos escritos.", + "local": { + "copyright": "Non estás a subir contido con copyright a unha biblioteca pública, de outro xeito poderías faltarlle a lei", + "format": "Os ficheiros de música que estás a subir están en formato OGG, Flac, MP3 ou AIFF", + "message": "Vai subir música a súa biblioteca. Antes de seguir, asegúrese de que:", + "tag": "Os ficheiros de música que está a subir están correctamente etiquetados." + } + }, + "table": { + "upload": { + "header": { + "actions": "Accións", + "filename": "Nome do ficheiro", + "size": "Tamaño", + "status": "Estado" + }, + "progress": "{percent}%", + "status": { + "pending": "Pendente", + "uploaded": "Subida", + "uploading": "Subindo…" + } + } + }, + "tooltip": { + "denied": "Subida denegada, asegúrese de que o ficheiro non é demasiado grande e que non acadou o límite de cuota", + "extension": "Tipo de ficheiro non válido, asegúrate de que subes un ficheiro de audio. Extensións de ficheiros soportadas { extensions }", + "network": "Fallou a rede mentras se subía o ficheiro", + "retry": "Reintentar", + "size": "Fallou a subida, mira que non sexa demasiado grande", + "timeout": "Caducou a subida, inténteo de novo" + } + }, + "FsBrowser": { + "button": { + "import": "Importar" + } + }, + "FsLogs": { + "empty": { + "notStarted": "A importación non comezou" + } + }, + "Home": { + "header": { + "newChannels": "Novas canles", + "playlists": "Listas de reprodución", + "recentlyAdded": "Últimas engadidas", + "recentlyFavorited": "Últimas favorecidas", + "recentlyListened": "Últimas escoitadas" + }, + "title": "Biblioteca" + }, + "ImportStatusModal": { + "button": { + "close": "Pechar" + }, + "error": { + "importFailure": "Algo fallou no proceso de subida. Aquí embaixo atoparás máis información.", + "invalidMetadata": { + "label": "Metadatos non válidos", + "message": "Os metadatos incluídos no ficheiro non son válidos ou faltan algúns campos requeridos." + }, + "unknownError": { + "label": "Fallo descoñecido", + "message": "Aconteceu un fallo descoñecido" + } + }, + "header": { + "importDetail": "Estado da importación" + }, + "link": { + "documentation": "Lea a documentación para este fallo", + "support": "Abrir un fío de axuda (incluír información de depuración abaixo na túa mensaxe)" + }, + "message": { + "importDetail": "A subida está pendente e axiña será procesada polo servidor.", + "importSuccess": "A subida non se procesou correctamente polo servidor." + }, + "table": { + "error": { + "debug": "Información de depuración", + "errorDetail": "Detalles do fallo", + "errorType": "Tipo de fallo", + "help": "Obter axuda" + } + }, + "warning": { + "importSkipped": "A subida non se realizou porque xa ten unha semellante dispoñible nunha das súas bibliotecas." + } + }, + "Podcasts": { + "button": { + "cancel": "Cancelar", + "channel": "Crear Canle", + "feed": "Subscribirse a fonte", + "search": "Buscar", + "subscribe": "Subscribir" + }, + "empty": { + "noResults": "Sen resultados para a túa consulta" + }, + "header": { + "browse": "Buscando Podcast" + }, + "label": { + "search": "Título do podcast", + "tags": "Etiquetas" + }, + "modal": { + "subscription": { + "header": "Subscrición" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Buscar…" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Crea unha radio", + "create": "Crea a túa propia radio", + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a túa busca" + }, + "header": { + "browse": "Buscando radios", + "instance": "Radios da instancia", + "user": "Radios da usuaria" + }, + "label": { + "search": "Buscar" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Escribe un nome de radio…" + }, + "title": "Radios" + }, + "TagDetail": { + "header": { + "channels": "Canles", + "tracks": "Cancións" + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "moderation": "Actualizar regra de moderación" + } + }, + "TagSelector": { + "placeholder": { + "search": "Buscar…" + } + }, + "TrackBase": { + "button": { + "cancel": "Cancelar", + "delete": "Eliminar", + "download": "Descargar", + "edit": "Editar", + "embed": "Incrustar", + "more": "Máis…", + "play": "Reproducir" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "wikipedia": "Buscar en Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canción xunto cos datos e ficheiros relacionados, esta acción non ten volta." + }, + "header": "Eliminar esta canción?" + }, + "embed": { + "header": "Inclúe esta canción no teu sitio web" + } + }, + "subtitle": { + "with-uploader": "Subida por {0} o {1}", + "without-uploader": "Subida o {0}" + }, + "title": "Canción" + }, + "TrackDetail": { + "description": { + "library": "Esta canción está presente nas seguintes bibliotecas:" + }, + "header": { + "episode": "Detalles do episodio", + "library": "Bibliotecas relacionadas", + "playlists": "Listas relacionadas", + "release": "Detalles da publicación", + "track": "Detalles" + }, + "link": { + "musicbrainz": "Ver en MusicBrainz" + }, + "notApplicable": "N/A", + "table": { + "release": { + "album": "Álbum", + "artist": "Artista", + "copyright": "Copyright", + "license": "Licenza", + "series": "Serie", + "url": "URL", + "year": "Ano" + }, + "track": { + "bitrate": { + "label": "Taxa de bits", + "value": "{bitrate}/s" + }, + "codec": "Códec", + "downloads": "Descargas", + "duration": "Duración", + "size": "Tamaño" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Editar esta canción", + "suggest": "Non podemos cargar a canción" + }, + "message": { + "remote": "Este obxecto está xestionado noutro servidor, non podes editalo." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Engadir filtro", + "save": "Gardar" + }, + "description": { + "builder": "Pode utilizar esta interface para construír a súa propia radio, que reproducirá cancións segundo o seu criterio." + }, + "header": { + "builder": "Construtor", + "created": "Radio creada", + "matches": "{ n } canción coicidente cos filtros combinados | { n } cancións coincidentes cos filtros combinados", + "updated": "Radio actualizada" + }, + "label": { + "description": "Descrición", + "filter": "Engade filtros para personalizar a túa radio", + "name": "Nome da Radio", + "public": "Mostrar públicamente" + }, + "option": { + "filter": "Escolla un filtro" + }, + "placeholder": { + "description": "A miña abraiante descrición", + "name": "A miña increíble radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data de acceso", - "account": "Conta", - "creationDate": "Data de creación", - "domain": "Dominio", - "importStatus": "Estado da importación", - "library": "Biblioteca", - "name": "Nome", - "size": "Tamaño", - "visibility": "Visibilidade" + "actions": "Accións", + "candidates": "Candidatas", + "config": "Configurar", + "exclude": "Excluír", + "name": "Nome do filtro" } } }, + "title": "Constructor de Radio" + }, + "Filter": { + "cancelButton": "Cancelar", + "excludeLabel": "Excluír", + "matchingTracks": "0 cancións cumpren co filtro | {n} canción cumpre co filtro | {n} cancións cumpren co filtro", + "matchingTracksModalHeader": "Filtro coincidente da canción", + "removeButton": "Eliminar" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoría", + "search": "Buscar" + }, + "link": { + "local": "Local", + "moderation": "Abrir na interface de moderación" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome, conta…" + }, + "table": { + "channel": { + "header": { + "account": "Conta", + "albums": "Álbums", + "creationDate": "Data de creación", + "domain": "Dominio", + "name": "Nome", + "tracks": "Cancións" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Os álbums seleccionados vanse eliminar, así como as pistas asociadas, subidas, favoritos e historial de escoita. Esta acción non ten volta." + } + }, + "label": { + "search": "Buscar" + }, + "link": { + "local": "Local", + "moderation": "Abrir na interface de moderación" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por título, artista, álbume…" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data de creación", + "domain": "Dominio", + "name": "Nome", + "releaseDate": "Data da última vista", + "tracks": "Cancións" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vaise eliminar o artista seleccionado, así como as subidas asociadas, cancións, álbums, favoritos e historial de escoita. Esta acción non ten volta." + } + }, + "label": { + "category": "Categoría", + "search": "Buscar" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome de usuaria, bio…" + }, + "table": { + "artist": { + "header": { + "albums": "Álbums", + "creationDate": "Data de creación", + "domain": "Dominio", + "name": "Nome", + "tracks": "Cancións" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "all": "Todos", + "approved": "Aprobada", + "pending": "Ficheiros pendentes", + "rejected": "Rexeitado" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por título, artista, dominio…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vaise eliminar a biblioteca seleccionada, así como as subidas asociadas e seguimentos. Esta acción é irreversible." + } + }, + "label": { + "search": "Buscar", + "visibility": "Visibilidade" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome de usuaria, bio…" + }, + "table": { + "library": { + "header": { + "account": "Conta", + "creationDate": "Data de creación", + "domain": "Dominio", + "followers": "Seguidoras", + "name": "Nome", + "uploads": "Subidas", + "visibility": "Visibilidade" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vas eliminar a etiqueta e desligala do contido existente, se o está. Esta acción non ten volta." + } + }, + "label": { + "search": "Buscar" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por nome" + }, + "table": { + "tag": { + "header": { + "albums": "Álbums", + "artists": "Artistas", + "creationDate": "Data de creación", + "name": "Nome", + "tracks": "Cancións" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "As cancións seleccionadas vanse eliminar, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." + } + }, + "label": { + "search": "Buscar" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, título, artista, álbum, ID MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Álbum", + "artist": "Artista", + "creationDate": "Data de creación", + "domain": "Dominio", + "license": "Licenza", + "title": "Título" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Esta acción non é reversible." + } + }, + "label": { + "search": "Buscar", + "status": "Estado", + "visibility": "Visibilidade" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", "option": { "all": "Todos", "failed": "Fallou", @@ -1862,396 +2316,68 @@ }, "label": "Ordenando" }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Esta acción non é reversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar", - "status": "Estado", - "visibility": "Visibilidade" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { "search": "Buscar por dominio, nome de usuaria, bio…" }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data de acceso", "account": "Conta", "creationDate": "Data de creación", "domain": "Dominio", - "followers": "Seguidoras", + "importStatus": "Estado da importación", + "library": "Biblioteca", "name": "Nome", - "uploads": "Subidas", + "size": "Tamaño", "visibility": "Visibilidade" } } - }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vaise eliminar a biblioteca seleccionada, así como as subidas asociadas e seguimentos. Esta acción é irreversible." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Buscar", - "visibility": "Visibilidade" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Álbum", - "artist": "Artista", - "creationDate": "Data de creación", - "domain": "Dominio", - "license": "Licenza", - "title": "Título" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "As cancións seleccionadas vanse eliminar, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por dominio, título, artista, álbum, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Álbums", - "creationDate": "Data de creación", - "domain": "Dominio", - "name": "Nome", - "tracks": "Cancións" - } - } - }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "label": { - "category": "Categoría", - "search": "Buscar" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vaise eliminar o artista seleccionado, así como as subidas asociadas, cancións, álbums, favoritos e historial de escoita. Esta acción non ten volta." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Álbums", - "artists": "Artistas", - "creationDate": "Data de creación", - "name": "Nome", - "tracks": "Cancións" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vas eliminar a etiqueta e desligala do contido existente, se o está. Esta acción non ten volta." - } - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por nome" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Todos", - "approved": "Aprobada", - "pending": "Ficheiros pendentes", - "rejected": "Rexeitado" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "placeholder": { - "search": "Buscar por título, artista, dominio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - }, - "label": { - "status": "Estado" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data de creación", - "domain": "Dominio", - "name": "Título", - "releaseDate": "Data da última vista", - "tracks": "Cancións" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Os álbums seleccionados vanse eliminar, así como as pistas asociadas, subidas, favoritos e historial de escoita. Esta acción non ten volta." - } - }, - "link": { - "local": "Local", - "moderation": "Abrir na interface de moderación" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por título, artista, álbume…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Conta", - "domain": "Dominio", - "local": "Local", - "owner": "Dona", - "type": "Tipo" - }, - "status": { - "assignedTo": "Asignada a", - "internalNotes": "Notas internas", - "resolutionDate": "Data da resolución", - "resolved": "Resolto", - "status": "Estado", - "unresolved": "Non resolto" - }, - "report": { - "category": "Categoría", - "creationDate": "Data de creación", - "submittedBy": "Enviado por" + "AccountsTable": { + "action": { + "purge": { + "label": "Limpar" } }, - "header": { - "actions": "Accións", - "notes": "Notas internas", - "message": "Mensaxe", - "reportedObject": "Elemento denunciado" - }, - "button": { - "confirmDelete": "Borrar", - "delete": "Eliminar obxeto denunciado", - "resolve": "Resolver", - "unresolve": "Non resolto" - }, - "modal": { - "delete": { - "header": "Eliminar obxeto denunciado?", - "content": { - "warning": "Esto vai eliminar o elemento asociado a esta denuncia e marcala como resolta. Esta eliminación é irreversible." - } - } - }, - "notApplicable": "N/A", - "link": { - "moderation": "Actualizar regra de moderación", - "report": "Denunciar { id }", - "publicPage": "Ver páxina pública" - }, - "warning": { - "objectDeleted": "Eliminouse o elemento asociado a esta denuncia." - } - }, - "UserRequestCard": { - "header": { - "actions": "Accións", - "notes": "Notas internas", - "signup": "Mensaxe" - }, - "button": { - "approve": "Aprobar", - "reject": "Rexeitar" - }, - "table": { - "status": { - "approved": "Aprobada", - "assignedTo": "Asignada a", - "internalNotes": "Notas internas", - "pending": "Pendente", - "refused": "Rexeitada", - "status": "Estado" - }, - "request": { - "creationDate": "Data de creación", - "submittedBy": "Enviado por" - } - }, - "notApplicable": "N/A", - "link": { - "request": "Solicitar { id }" - }, - "message": { - "signup": "Esta usuaria quere rexistrarse na túa instancia." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Engadir nova regra de moderación", - "editRule": "Editar regra de moderación", - "failure": "Erro ó crear a regra" - }, "label": { - "blockAll": "Bloquear todo", - "policyDisabled": "Desactivado", - "policyEnabled": "Activado", - "silenceActivity": "Acalar actividade", - "silenceNotifications": "Acalar notificacións", - "customizeRule": "Ou personalice a súa regra", - "policyReason": "Razón", - "rejectMedia": "Rexeitar medios" + "search": "Buscar" }, - "tooltip": { - "blockAll": "Bloquear todo desta conta ou dominio. Esto evitará calquera interacción coa entidade, e eliminará o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", - "rejectMedia": "Non baixar ningún ficheiro de medios (audio, portada, avatar da conta…) desta conta ou dominio. Esto eliminará tamén o contido existente.", - "summary": "Explica por que aplicas esta política. Dependendo da configuración da túa instancia esto axudarache a lembrar por que actuaches sobre esta conta ou dominio, e pode ser mostrado públicamente para que as usuarias entendan cales son as regras de moderación que se aplican.", - "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", - "silenceNotifications": "Evitar que o dominio ou conta mostre notificacións, excepto das seguidoras.", - "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condición sen eliminala completamente." + "link": { + "local": "Conta local" }, - "button": { - "cancel": "Cancelar", - "create": "Crear", - "delete": "Borrar", - "confirm": "Borrar regra de moderación", - "update": "Actualizar" + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" }, - "modal": { - "delete": { - "header": "Eliminar esta regra de moderación?", - "content": { - "warning": "Esta acción non é reversible." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Engadir nota" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { - "summary": "Describe qué accións se tomaron, ou calquera outra actualización…" + "search": "Buscar por dominio, nome de usuaria, bio…" }, - "header": { - "failure": "Fallo ao enviar a nota" + "table": { + "account": { + "header": { + "domain": "Dominio", + "firstSeen": "Primeira visualización", + "lastSeen": "Última vista", + "moderationRule": "Baixo regra de moderación", + "name": "Nome", + "uploads": "Subidas" + }, + "moderationRule": "Si" + } } }, "DomainsTable": { @@ -2266,6 +2392,16 @@ "label": "Eliminar da lista-permitir" } }, + "empty": { + "noPods": "Non se atoparon outras instancias" + }, + "label": { + "inList": "Está presente na lista de permitidos", + "search": "Buscar" + }, + "link": { + "list": "Este dominio está presente na túa lista-permitido" + }, "option": { "all": "Todos", "no": "Non", @@ -2279,76 +2415,32 @@ }, "label": "Ordenando" }, - "table": { - "domain": { - "header": { - "firstSeen": "Primeira visualización", - "name": "Nome", - "receivedMessages": "Mensaxes recibidas", - "moderationRule": "Baixo regra de moderación", - "users": "Usuarias" - }, - "moderationRule": "Si" - } - }, - "label": { - "inList": "Está presente na lista de permitidos", - "search": "Buscar" - }, - "empty": { - "noPods": "Non se atoparon outras instancias" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { "search": "Buscar por nome…" }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - }, - "link": { - "list": "Este dominio está presente na túa lista-permitido" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Dominio", "firstSeen": "Primeira visualización", - "lastSeen": "Última vista", - "name": "Nome", "moderationRule": "Baixo regra de moderación", - "uploads": "Subidas" + "name": "Nome", + "receivedMessages": "Mensaxes recibidas", + "users": "Usuarias" }, "moderationRule": "Si" } - }, - "link": { - "local": "Conta local" - }, - "action": { - "purge": { - "label": "Limpar" - } - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Editar" + }, + "header": { + "rule": "Regra" + }, "label": { "blockAll": "Bloquear todo", "muteActivity": "Acalar actividade", @@ -2356,15 +2448,49 @@ "reason": "Razón", "rejectMedia": "Rexeitar medios" }, - "button": { - "edit": "Editar" - }, "status": { "enabled": "Activado", "paused": "Pausada" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Cancelar", + "confirm": "Borrar regra de moderación", + "create": "Crear", + "delete": "Borrar", + "update": "Actualizar" }, "header": { - "rule": "Regra" + "addRule": "Engadir nova regra de moderación", + "editRule": "Editar regra de moderación", + "failure": "Erro ó crear a regra" + }, + "label": { + "blockAll": "Bloquear todo", + "customizeRule": "Ou personalice a súa regra", + "policyDisabled": "Desactivado", + "policyEnabled": "Activado", + "policyReason": "Razón", + "rejectMedia": "Rexeitar medios", + "silenceActivity": "Acalar actividade", + "silenceNotifications": "Acalar notificacións" + }, + "modal": { + "delete": { + "content": { + "warning": "Esta acción non é reversible" + }, + "header": "Eliminar esta regra de moderación?" + } + }, + "tooltip": { + "blockAll": "Bloquear todo desta conta ou dominio. Isto evitará calquera interacción coa entidade, e eliminará o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", + "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condición sen eliminala completamente.", + "rejectMedia": "Non baixar ningún ficheiro de medios (audio, portada, avatar da conta…) desta conta ou dominio. Esto eliminará tamén o contido existente.", + "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", + "silenceNotifications": "Evitar que o dominio ou conta mostre notificacións, excepto das seguidoras.", + "summary": "Explica por que aplicas esta política. Dependendo da configuración da túa instancia esto axudarache a lembrar por que actuaches sobre esta conta ou dominio, e pode ser mostrado públicamente para que as usuarias entendan cales son as regras de moderación que se aplican." } }, "InstancePolicyModal": { @@ -2374,161 +2500,130 @@ }, "modal": { "manage": { - "header": "Xestionar as regras de moderación para { obj }", "content": { "warning": "Esta entidade está suxeita a regras específicas de moderación" - } + }, + "header": "Xestionar as regras de moderación para { obj }" } } }, + "NoteForm": { + "button": { + "add": "Engadir nota" + }, + "header": { + "failure": "Fallo ao enviar a nota" + }, + "placeholder": { + "summary": "Describe qué accións se tomaron, ou calquera outra actualización…" + } + }, "NotesThread": { "button": { "delete": "Borrar" }, "modal": { "delete": { - "header": "Eliminar esta nota?", "content": { "warning": "Vai eliminar a nota. Esta acción non ten volta." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Conta", - "albums": "Álbums", - "creationDate": "Data de creación", - "domain": "Dominio", - "name": "Nome", - "tracks": "Cancións" + }, + "header": "Eliminar esta nota?" } } }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" + "ReportCard": { + "button": { + "confirmDelete": "Borrar", + "delete": "Eliminar obxeto denunciado", + "resolve": "Resolver", + "unresolve": "Non resolto" }, - "label": "Ordenando" + "header": { + "actions": "Accións", + "message": "Mensaxe", + "notes": "Notas internas", + "reportedObject": "Elemento denunciado" + }, + "link": { + "moderation": "Actualizar regra de moderación", + "publicPage": "Ver páxina pública", + "report": "Denunciar { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Esto vai eliminar o elemento asociado a esta denuncia e marcala como resolta. Esta eliminación é irreversible." + }, + "header": "Eliminar obxeto denunciado?" + } + }, + "notApplicable": "N/A", + "table": { + "object": { + "account": "Conta", + "domain": "Dominio", + "local": "Local", + "owner": "Dona", + "type": "Tipo" + }, + "report": { + "category": "Categoría", + "creationDate": "Data de creación", + "submittedBy": "Enviado por" + }, + "status": { + "assignedTo": "Asignada a", + "internalNotes": "Notas internas", + "resolutionDate": "Data da resolución", + "resolved": "Resolto", + "status": "Estado", + "unresolved": "Non resolto" + } + }, + "warning": { + "objectDeleted": "Eliminouse o elemento asociado a esta denuncia." + } }, - "label": { - "category": "Categoría", - "search": "Buscar" - }, - "link": { - "local": "Local", - "moderation": "Abrir na interface de moderación" - }, - "placeholder": { - "search": "Buscar por dominio, nome, conta…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" + "UserRequestCard": { + "button": { + "approve": "Aprobar", + "reject": "Rexeitar" + }, + "header": { + "actions": "Accións", + "notes": "Notas internas", + "signup": "Mensaxe" + }, + "link": { + "request": "Solicitar { id }" + }, + "message": { + "signup": "Esta usuaria quere rexistrarse na túa instancia." + }, + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Data de creación", + "submittedBy": "Enviado por" + }, + "status": { + "approved": "Aprobada", + "assignedTo": "Asignada a", + "internalNotes": "Notas internas", + "pending": "Pendente", + "refused": "Rexeitada", + "resolutionDate": "Data da resolución", + "status": "Estado" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Estado da conta", - "email": "Email", - "lastActivity": "Última actividade", - "permissions": "Permisos", - "signup": "Rexistrarse", - "status": "Estado", - "username": "Nome de usuaria" - }, - "accountStatus": { - "active": "Activo", - "inactive": "Non activo" - }, - "status": { - "admin": "Admin", - "regular": "usuaria normal", - "staff": "Persoal do equipo" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "permission": { - "library": "Biblioteca", - "moderation": "Moderación", - "settings": "Axustes" - }, - "notApplicable": "N/A", - "placeholder": { - "search": "Buscar por nome de usuaria, correo-e, nome…" - }, - "pagination": { - "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Todos", - "expired": "Caducado/utilizado", - "open": "Abrir" - }, - "table": { - "invitation": { - "header": { - "code": "Código", - "creationDate": "Data de creación", - "expirationDate": "Data de caducidade", - "owner": "Dona", - "status": "Estado" - } - } - }, - "action": { - "delete": "Borrar" - }, - "label": { - "expired": "Caducado", - "unused": "Non utilizado", - "search": "Buscar", - "status": "Estado", - "used": "Utilizado" - }, - "ordering": { - "label": "Ordenando" - }, - "placeholder": { - "search": "Buscar por nome de usuaria, correo-e, código…" - }, - "pagination": { - "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" - } - }, "InvitationForm": { "button": { "clear": "Baleirar", "new": "Obter un novo convite" }, - "table": { - "invitation": { - "header": { - "code": "Código", - "link": "Compartir ligazón" - } - } - }, "header": { "failure": "Erro ó crear o convite" }, @@ -2537,523 +2632,59 @@ }, "placeholder": { "invitation": "Deixar baleiro para un código aleatorio" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Accións", - "label": "Etiqueta do campo", - "type": "Tipo de campo", - "required": "Requerido" - }, - "type": { - "long": "Texto longo", - "short": "Texto curto" - }, - "required": { - "false": "Non", - "true": "Si" - } - } - }, - "button": { - "add": "Engade un novo campo", - "edit": "Formulario de edición", - "preview": "Formulario vista previa" - }, - "label": { - "additionalField": "Campo adicional", - "additionalFields": "Campos adicionais", - "delete": "Borrar", - "helpText": "Texto de axuda", - "moveDown": "Baixar", - "moveUp": "Subir" - }, - "help": { - "additionalFields": "Campos de formulario adicionais para mostrar. Só se mostran se se activa a validación manual do rexistro.", - "helpText": "Un texto optativo para mostrar ó inicio do formulario de rexistro." - } - }, - "SettingsGroup": { - "header": { - "image": "Imaxe actual", - "error": "Erro ó gardar os axustes" - }, - "button": { - "save": "Gardar" - }, - "message": { - "success": "Axustes actualizados correctamente." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Todos" - }, - "label": { - "category": "Categoría" - } - }, - "ReportModal": { - "header": { - "disabled": "Desactiváronse as denuncias anónimas, conéctate para enviar unha denuncia.", - "modal": "Queres denunciar este elemento?", - "submissionFailure": "Erro ó enviar a denuncia" - }, - "button": { - "cancel": "Cancelar", - "submit": "Enviar denuncia" - }, - "label": { - "email": "Email", - "forwardToDomain": "Reenviar a { domain}", - "message": "Mensaxe" - }, - "description": { - "forwardToDomain": "Reenviar unha copia anónima da túa denuncia ó servidor que hospeda este elemento.", - "message": "Utiliza este campo para proporcionar contexto adicional á moderación para xestionar a denuncia.", - "modal": "Utiliza este formulario para enviar unha denuncia ó equipo de moderación.", - "email": "Utilizaremos este correo se precisamos contactar contigo referente a esta denuncia." - }, - "message": { - "submissionSuccess": "Denuncia enviada correctamente, grazas" - } - }, - "FilterModal": { - "button": { - "cancel": "Cancelar", - "hide": "Agochar contido" - }, - "message": { - "success": "Engadeuse o filtro de contido" - }, - "header": { - "modal": "Queres agochar o contido da artista \"{ radio }\"?", - "failure": "Erro ó crear o filtro" - }, - "warning": { - "createFilter": { - "listItem2": "No widget \"Adicións recentes\"", - "listItem3": "En listaxes de artistas e álbums", - "listItem1": "En favoritas e historial de escoita de outras usuarias", - "listItem4": "Nas suxestións de radios", - "listIntro": "Non volverás a ver as pistas, álbums e actividade relacionados con este artista:" - } - }, - "help": { - "createFilter": "Podes xestionar e actualizar os teus filtros desde os axustes da túa conta." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Algo fallou ao actualizar os datos:", - "success": "Actualizáronse os datos desde o servidor remoto.", - "pending": "A solicitude de actualización non se realizou a tempo no noso servidor. Procesarase máis tarde.", - "skipped": "O servidor remoto respondeu, pero o tipo de resposta non está soportado por Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Houbo un fallo HTTP ao contactar co servidor remoto", - "invalidAttributesError": "Os datos devoltos polo servidor remoto teñen valores non válidos ou faltan atributos", - "connectionError": "Non se puido conectar ao servidor remoto", - "httpStatus": "O servidor remoto respondeu con HTTP { status }", - "timeoutError": "O servidor remoto non respondeu rápido abondo", - "invalidJsonError": "O servidor remoto devolveu un datos JSON ou JSON-LD non válidos", - "unknownError": "Fallo descoñecido" - }, - "label": { - "detail": "Detalles do fallo", - "type": "Tipo de fallo" - } - } - }, - "button": { - "close": "Pechar", - "reload": "Pechar e recargar páxina" - }, - "header": { - "saveFailure": "Erro ó gardar os axustes", - "failure": "Actualizar", - "pending": "Actualizar info da instancia", - "success": "Actualización correcta", - "skipped": "Omiteuse a actualización", - "refresh": "Actualizando obxeto desde servidor remoto…" - }, - "loader": { - "fetchRequest": "Solicitando a obtención…", - "awaitingResult": "Cargando as favoritas…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Sen biblioteca coincidente." - }, - "button": { - "showMore": "Mostrar máis" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Atallos do reprodutor de audio", - "clearQueue": "Limpar cola", - "decreaseVolume": "Baixar volume", - "expandQueue": "Despregar vista da cola/reprodutor", - "increaseVolume": "Aumentar volume", - "playPause": "Pausar/reproducir pista actual", - "playNext": "Reproducir canción seguinte", - "playPrevious": "Reproducir canción anterior", - "seekBack30": "Buscar atrás 30s", - "seekBack5": "Adiantar 5s", - "seekForward30": "Adiantar 30s", - "seekForward5": "Adiantar 5s", - "shuffleQueue": "Barallar a cola", - "toggleFavorite": "Marca de favorito", - "toggleMute": "Activar silencio", - "toggleLoop": "Activar a repetición da cola" - }, - "general": { - "focus": "Foco na caixa de busca", - "label": "Atallos xerais", - "show": "Mostrar atallos de teclado dispoñibles", - "unfocus": "Saír da barra de busca" - } - }, - "button": { - "close": "Pechar" - }, - "header": { - "modal": "Atallos de teclado" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Elixe a túa instancia", - "failure": "Non se puido conectar ao URL proporcionado", - "suggestions": "Opcións suxeridas" - }, - "label": { - "url": "URL da instancia" - }, - "help": { - "notFunkwhaleServer": "O enderezo proporcionado non é un servidor Funkwhale", - "serverDown": "Igoal non está a funcionar o servidor", - "selectPod": "Para continuar, elixe a instancia de Funkwhale á que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opcións suxeridas." - }, - "message": { - "newUrl": "Estás utilizando a instancia Funkwhale en { url }" - } - }, - "Queue": { - "button": { - "clear": "Baleirar", - "close": "Pechar", - "stopRadio": "Deter radio" - }, - "label": { - "duration": "Duración", - "addArtistContentFilter": "Ocultar contido deste artista…", - "next": "Seguinte canción", - "pause": "Pausar", - "play": "Reproducir", - "previous": "Canción anterior", - "queue": "Cola", - "remove": "Eliminar", - "restart": "Reiniciar canción" - }, - "message": { - "radio": "As novas cancións engadiranse aquí automáticamente.", - "automaticPlay": "A seguinte canción reproducirase automáticamente en poucos segundos…" - }, - "header": { - "failure": "Non se puido cargar a canción", - "radio": "Tes a radio acendida" - }, - "meta": { - "queuePosition": "Canción { index } de { length }" - }, - "warning": { - "connectivity": "Podería ter problemas de conectividade." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copiar" - }, - "title": "Mostrar/ocultar contrasinal", - "message": { - "copy": "Texto copiado ao portapapeis!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Editar" - } - }, - "Button": { - "startRadio": "Reproducir radio", - "stopRadio": "Deter radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Fallou a obtención do obxecto" - }, - "button": { - "fediverse": "Fediverso", - "rss": "RSS", - "search": "Buscar" - }, - "label": { - "fediverse": { - "fieldLabel": "Obxecto no Fediverso", - "title": "Subscribirse a un podcast aloxado no Fediverso" - }, - "rss": { - "fieldPlaceholder": "https://web.exemplo.com/rss.xml", - "fieldLabel": "Localización da fonte RSS", - "title": "Subscribirse a fonte RSS do podcast" - } - }, - "warning": { - "unsupported": "Aínda non está soportado este obxeto" - }, - "error": { - "fetchFailed": "Non se puido obter o obxeto" - }, - "description": { - "fediverse": "Utiliza este formulario para subscribirte a unha canle aloxada noutro lugar do Fediverso.", - "rss": "Usa este formulario para subscribirte a unha fonte RSS co seu URL." - } - }, - "PageNotFound": { - "link": { - "home": "Ir ó inicio" - }, - "title": "Páxina non atopada", - "header": { - "pageNotFound": "Non atopamos a páxina!" - }, - "message": { - "pageNotFound": "Lamentámolo, a páxina que solicitou non existe:" - } - }, - "vui": { - "Pagination": { - "next": "Páxina seguinte", - "label": "Paxinación", - "previous": "Páxina anterior" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostrar 1 etiqueta máis | Mostrar { n } etiquetas máis" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "listenings": "{ n } escoita | { n } escoitas", - "subscribers": "{ n } subscritora | { n } subscritoras", - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "channelEpisodes": "Tódolos episodios", - "mirrored": "Réplica de { domain }", - "moderation": "Actualizar regra de moderación", - "channelOverview": "Vista xeral", - "channelTracks": "Cancións", - "domainView": "Ver en { domain }" - }, - "header": { - "artistChannel": "Canle da artista", - "podcastChannel": "Canle de podcast" - }, - "button": { - "cancel": "Cancelar", - "confirm": "Borrar", - "delete": "Eliminar…", - "edit": "Editar…", - "embed": "Incrustar", - "play": "Reproducir", - "updateChannel": "Actualizar canle", - "upload": "Subir" - }, - "title": "Canle", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copiar-pegar este URL na túa app de podcasting:" - }, - "header": "Subscribirse vía RSS" - }, - "fediverse": { - "content": { - "help": "Se usas Mastodon ou outro servizo do fediverso, podes subscribirte a esta conta:" - }, - "header": "Subscribirse no Fediverso" - }, - "funkwhale": { - "header": "Subscribirse en Funkwhale" - }, - "header": "Subscribirse a esta canle" }, - "delete": { - "header": "Eliminar esta Canle?", - "content": { - "warning": "Vaise eliminar a canle e todos os ficheiros e datos relacionados. Esta acción non ten volta." - } - }, - "embed": { - "header": "Inclúe esta canción no teu sitio web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Engadir nova", - "erroredUploads": "Ver subidas con fallos", - "skippedUploads": "Ver subidas omitidas" - }, - "header": { - "albums": "Álbums", - "latestEpisodes": "Últimos episodios", - "latestTracks": "Últimas cancións", - "series": "Series", - "uploadsFailure": "Non se publicaron algunha das subidas", - "uploadsProcessing": "Estánse a procesar as subidas", - "uploadsSuccess": "Publicáronse correctamente as subidas" - }, - "meta": { - "progress": "Subidas procesadas:" - }, - "message": { - "processing": "Funkwhale está procesando as subidas e estarán dispoñibles moi pronto." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Engadir nova" - }, - "button": { - "cancel": "Cancelar", - "subscribe": "Subscribir" - }, - "placeholder": { - "search": "Filtrar por nome…" - }, - "title": "Subscricións a canles", - "modal": { - "subscription": { - "header": "Subscrición" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "details": "Detalles da biblioteca" - }, - "label": { - "size": "Tamaño total dos ficheiros de esta biblioteca" - }, - "button": { - "upload": "Subir" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } utilizado de { max } permitido", - "errored": "Ficheiros con fallos", - "pending": "Ficheiros pendentes", - "skipped": "Ficheiros saltados" - }, - "header": { - "currentUsage": "Uso actual" - }, - "loading": { - "currentUsage": "Cargando datos de uso…" - }, - "button": { - "purge": "Limpar" - }, - "modal": { - "purgeErrored": { - "header": "Eliminar ficheiros con fallos?", - "content": { - "description": "Elimina as cancións subidas que non se procesaron completamente no servidor, engadindo o espazo correspondente a súa cuota." - } - }, - "purgePending": { - "header": "Eliminar ficheiros pendentes?", - "content": { - "description": "Elimina completamente as cancións subidas pero aínda non procesadas, engadindo o espazo correspondente a súa cuota." - } - }, - "purgeSkipped": { - "header": "Eliminar ficheiros saltados?", - "content": { - "description": "Elimina as cancións subidas saltadas durante o proceso de importación, engadindo o espazo correspondente a súa cuota." - } - } - }, - "link": { - "viewFiles": "Ver ficheiros" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Álbum", - "artist": "Artista", - "duration": "Duración", - "importStatus": "Estado da importación", - "size": "Tamaño", - "title": "Título", - "uploadDate": "Data de subida" + "code": "Código", + "link": "Compartir ligazón" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Borrar" + }, + "label": { + "expired": "Caducado", + "search": "Buscar", + "status": "Estado", + "unused": "Non utilizado", + "used": "Utilizado" }, "option": { - "status": { - "all": "Todos", - "draft": "Borrador", - "failed": "Fallou", - "finished": "Rematado", - "pending": "Pendente", - "skipped": "Saltado" - } + "all": "Todos", + "expired": "Caducado/utilizado", + "open": "Abrir" }, + "ordering": { + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" + }, + "placeholder": { + "search": "Buscar por nome de usuaria, correo-e, código…" + }, + "table": { + "invitation": { + "header": { + "code": "Código", + "creationDate": "Data de creación", + "expirationDate": "Data de caducidade", + "owner": "Dona", + "status": "Estado", + "user": "Usuaria" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Buscar" + }, + "notApplicable": "N/A", "ordering": { "direction": { "ascending": "Ascendente", @@ -3062,397 +2693,579 @@ }, "label": "Ordenando" }, - "action": { - "delete": "Borrar", - "restartImport": "Volta a lanzar importación" + "pagination": { + "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" }, - "label": { - "importStatus": "Estado da importación", - "search": "Buscar" - }, - "notApplicable": "N/A", - "empty": { - "noTracks": "Aínda non se engadiron cancións a esta biblioteca" + "permission": { + "library": "Biblioteca", + "moderation": "Moderación", + "settings": "Axustes" }, "placeholder": { - "search": "Buscar por título, artista, álbum…" + "search": "Buscar por nome de usuaria, correo-e, nome…" }, - "button": { - "showStatus": "Mostrar información acerca do estado da subida desta canción" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crear nova biblioteca" - }, - "loading": { - "libraries": "Cargando Bibliotecas…" - }, - "empty": { - "noLibrary": "Semella que non ten unha biblioteca, é momento de crear unha." - }, - "header": { - "libraries": "As miñas Bibliotecas" - } - }, - "Form": { - "button": { - "create": "Crear biblioteca", - "delete": "Borrar", - "confirm": "Eliminar biblioteca", - "update": "Actualizar biblioteca" - }, - "modal": { - "delete": { - "header": "Eliminar esta biblioteca?", - "content": { - "warning": "Eliminará completamente a biblioteca e as cancións. Non poderá voltar atrás." + "table": { + "user": { + "accountStatus": { + "active": "Activo", + "inactive": "Non activo" + }, + "header": { + "accountStatus": "Estado da conta", + "email": "Email", + "lastActivity": "Última actividade", + "permissions": "Permisos", + "signup": "Rexistrarse", + "status": "Estado", + "username": "Nome de usuaria" + }, + "status": { + "admin": "Admin", + "regular": "usuaria normal", + "staff": "Persoal do equipo" } } - }, - "label": { - "description": "Descrición", - "name": "Nome", - "visibility": "Visibilidade" - }, - "header": { - "failure": "Fallo" - }, - "description": { - "library": "As bibliotecas axúdanlle a organizar e compartir a súa colección musical. Pode subir a súa propia colección de música a Funkwhale e compartila cos seus amigos e familia.", - "visibility": "Pode compartir a biblioteca con outa xente, independentemente da súa visibilidade." - }, - "message": { - "libraryCreated": "Biblioteca creada", - "libraryDeleted": "Biblioteca eliminada", - "libraryUpdated": "Biblioteca actualizada" - }, - "placeholder": { - "name": "A miña abraiante biblioteca", - "description": "Esta biblioteca contén a miña música persoal, espero que che guste." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións", - "failedTracks": "Cancións con fallo:", - "lastUpdate": "Última actualización:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Ó deixar de seguir esta biblioteca perderás o acceso ó seu contido." - }, - "header": "Deixar de seguir biblioteca?" - } - }, - "button": { - "cancel": "Cancelar solicitude de seguimento", - "follow": "Seguir", - "pending": "Solicitude de seguimento pendente de aprobación", - "unfollow": "Deixar de seguir" - }, - "link": { - "scanDetails": "Detalles", - "scan": "Escanear agora" - }, - "label": { - "scanFailure": "Problema ao escanear", - "scanPending": "Ascendente", - "scanSuccess": "Escaneado", - "scanPartialSuccess": "Escaneado con fallos", - "scanProgress": "Escaneando… ({ progress }%)", - "sharingLink": "Compartir ligazón" - }, - "message": { - "scanLaunched": "Escaneado iniciado", - "scanSkipped": "Escaneado saltado (o escaneado anterior é moi recente)" - }, - "tooltip": { - "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", - "public": "Esta biblioteca é pública e pode acceder ao contido libremente" - } - }, - "ScanForm": { - "header": { - "failure": "Non se obtivo a biblioteca remota" - }, - "placeholder": { - "url": "Escribe o URL dunha biblioteca" - }, - "label": { - "search": "Buscar unha biblioteca remota" - }, - "button": { - "submit": "Enviar busca" - } - }, - "Home": { - "header": { - "knownLibraries": "Bibliotecas coñecidas", - "remoteLibraries": "Bibliotecas remotas" - }, - "loading": { - "remoteLibraries": "Cargando bibliotecas remotas…" - }, - "button": { - "refresh": "Actualizar" - }, - "description": { - "remoteLibraries": "As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a elas se son públicas ou lle outorgan acceso." - } - } - }, - "Home": { - "title": "Engadir e xestionar contido", - "description": { - "follow": "Segue bibliotecas doutras usuarias para ter nova música. As bibliotecas públicas pódense seguir inmediatamente, mentras que as privadas precisan que a usuaria che conceda acceso.", - "channel": { - "1": "Se es músico ou podcaster, as canles están deseñadas para ti!", - "2": "Comparte publicamente o teu traballo para ter subscritoras en Funkwhale, do Fediverso ou calquer aplicación de podcast." - }, - "upload": "Subir a túa biblioteca personal de música a Funkwhale para desfrutala desde onde queiras e compartila coas amizades." - }, - "header": { - "follow": "Seguir bibliotecas remotas", - "channel": "Publica o teu traballo nunha canle", - "upload": "Subir contido de terceiros a biblioteca" - }, - "button": { - "start": "Comezar" - }, - "help": { - "uploadQuota": "Esta instancia ofrece {quota} de almacenamento a cada usuaria." - } - }, - "Base": { - "title": "Engadir contido", - "link": { - "libraries": "Bibliotecas", - "tracks": "Cancións" - }, - "menu": { - "secondary": "Menú secundario" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "moderation": "Actualizar regra de moderación", - "owner": "Propiedade de { username }", - "tracks": "Cancións", - "domain": "Ver en { domain }" - }, - "button": { - "edit": "Editar", - "upload": "Subir" - }, - "title": "Biblioteca", - "label": { - "private": "Privado", - "public": "Público", - "instance": "Restrinxido", - "sharingLink": "Compartir ligazón" - }, - "description": { - "sharingLink": "Comparte esta ligazón para que as usuarias poidan acceder a biblioteca ao pegala na barra de busca da súa instancia." - }, - "tooltip": { - "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", - "public": "Esta biblioteca é pública e pode acceder ao contido libremente", - "instance": "Esta biblioteca está restrinxida as usuarias de esta instancia" - } - }, - "Edit": { - "button": { - "accept": "Aceptar", - "reject": "Rexeitar" - }, - "table": { - "action": { - "status": { - "accepted": "Aceptado", - "pending": "Pendente de aceptación", - "rejected": "Rexeitado" - }, - "header": { - "action": "Acción", - "date": "Data", - "status": "Estado", - "user": "Usuaria" - } - } - }, - "header": { - "followers": "Seguidoras", - "libraryContents": "Contido da biblioteca" - }, - "loading": { - "followers": "Cargando seguidoras…" - }, - "empty": { - "noFollowers": "Ninguén segue esta biblioteca" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Esta biblioteca está baleira, deberías subir algo!", - "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido." - } - }, - "DetailOverview": { - "empty": { - "upload": "Esta biblioteca está baleira, deberías subir algo!", - "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido." - } - }, - "DetailTracks": { - "empty": { - "upload": "Esta biblioteca está baleira, deberías subir algo!", - "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Perfil de { username }", - "link": { - "activity": "Actividade", - "moderation": "Actualizar regra de moderación", - "overview": "Vista xeral", - "domainView": "Ver en { domain }" - }, - "label": { - "self": "Esta es tí!" - } - }, - "PasswordReset": { - "label": { - "email": "Enderezo de email da conta" - }, - "button": { - "requestReset": "Solicita restablecer o contrasinal" - }, - "link": { - "back": "Volve ao acceso" - }, - "placeholder": { - "email": "Escribe o enderezo de correo ligado a túa conta" - }, - "header": { - "failure": "Fallo ó solicitar o restablecemento do contrasinal", - "reset": "Restablece o contrasinal" - }, - "title": "Restablece o contrasinal", - "help": { - "form": "Utiliza este formulario para solicitar o restablecemento do contrasinal. Enviarémosche un email con instrucións para restablecelo." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Engadir nova" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Canle da artista" - }, - "header": "Crea unha canle", - "podcast": { - "header": "Canle de podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Cancelar", - "createChannel": "Crear canle", - "next": "Seguinte paso", - "previous": "Paso anterior" + "hide": "Agochar contido" }, "header": { - "channels": "Canles", - "sharedLibraries": "Esta usuaria compartiu as seguintes bibliotecas", - "libraries": "Bibliotecas da usuaria" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Volve ao acceso", - "login": "Accede" + "failure": "Erro ó crear o filtro", + "modal": "Queres agochar o contido da artista \"{ radio }\"?" }, - "title": "Cambiar o contrasinal", - "header": { - "failure": "Erro ó cambiar o contrasinal", - "success": "Contrasinal actualizado correctamente" + "help": { + "createFilter": "Podes xestionar e actualizar os teus filtros desde os axustes da túa conta." }, "message": { - "requestSent": "Se o enderezo de correo proporcionado no paso anterior é válido e ligado a unha conta de usuaria, deberías recibir un correo coas instrucións de restablecemento nun par de minutos.", - "success": "O contrasinal foi actualizado correctamente." + "success": "Engadeuse o filtro de contido" }, + "warning": { + "createFilter": { + "listIntro": "Non volverás a ver as pistas, álbums e actividade relacionados con este artista:", + "listItem1": "En favoritas e historial de escoita de outras usuarias", + "listItem2": "No widget \"Adicións recentes\"", + "listItem3": "En listaxes de artistas e álbums", + "listItem4": "Nas suxestións de radios" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Novo contrasinal" + "category": "Categoría" }, + "option": { + "all": "Todos" + } + }, + "ReportModal": { "button": { - "update": "Actualizar contrasinal" - } - }, - "EmailConfirm": { - "title": "Confirma o teu email", - "label": { - "confirmationCode": "Código de confirmación" + "cancel": "Cancelar", + "submit": "Enviar denuncia" + }, + "description": { + "email": "Utilizaremos este correo se precisamos contactar contigo referente a esta denuncia.", + "forwardToDomain": "Reenviar unha copia anónima da túa denuncia ó servidor que hospeda este elemento.", + "message": "Utiliza este campo para proporcionar contexto adicional á moderación para xestionar a denuncia.", + "modal": "Utiliza este formulario para enviar unha denuncia ao equipo de moderación" + }, + "error": { + "nodeinfoFetch": "Non se obtivo Info da Instancia: {error}" }, "header": { - "failure": "Non se confirmou o teu email", - "success": "Enderezo de email confirmado" + "disabled": "Desactiváronse as denuncias anónimas, conéctate para enviar unha denuncia.", + "modal": "Queres denunciar este elemento?", + "submissionFailure": "Erro ó enviar a denuncia" }, - "link": { - "login": "Accede", - "back": "Volver ao acceso" + "label": { + "email": "Email", + "forwardToDomain": "Reenviar a { domain}", + "message": "Mensaxe" }, "message": { - "success": "Xa pode utilizar o servizo sen limitacións." - } - }, - "Signup": { - "header": { - "createAccount": "Crear unha conta Funkwhale" - }, - "title": "Rexistro" - }, - "Login": { - "title": "Acceder", - "header": { - "login": "Accede coa túa conta Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Accedendo…" - } - }, - "Plugins": { - "title": "Xestionar plugins" - }, - "ProfileActivity": { - "header": { - "playlists": "Listas de reprodución", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" + "submissionSuccess": "Denuncia enviada correctamente, grazas" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Aprobar", + "markRead": "Marcar como lido", + "markUnread": "Marcar como non lido", + "reject": "Rexeitar" + }, + "message": { + "libraryAcceptFollow": "{ username } aceptou o teu seguimento da biblioteca \"{ library }\"", + "libraryFollow": "{ username } segue a túa biblioteca \"{ library }\"", + "libraryPendingFollow": "{ username } quere seguir a túa biblioteca \"{ library }\"", + "libraryReject": "Rexeitaches a solicitude de {username} para seguir \"{library}\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } canción | { n } cancións" + } + }, + "Editor": { + "button": { + "addDuplicate": "Engadir igualmente", + "clear": "Baleirar lista reprodución", + "copy": "Copiar cancións da cola a lista de reprodución", + "insertFromQueue": "Introducir desde a cola ({ n } canción) | Introducir desde a cola ({ n } cancións)" + }, + "error": { + "sync": "Algo fallou ao gardar os cambios" + }, + "header": { + "editor": "Editora da lista" + }, + "help": { + "reorder": "Arrastra e solta filas para reordenar as cancións na lista" + }, + "loading": { + "sync": "Sincronizando cambios co servidor…" + }, + "message": { + "sync": "Cambios sincronizados co servidor" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Esto eliminará todas as cancións da lista de reprodución e non hai volta." + }, + "header": "Queres baleirar a lista de reprodución \"{ playlist }\"?" + } + }, + "warning": { + "duplicate": "Algunhas cancións na cola xa están nesta lista de reprodución:" + } + }, + "Form": { + "button": { + "create": "Crear lista reprodución", + "update": "Actualizar lista de reprodución" + }, + "header": { + "createFailure": "Lista creada", + "createPlaylist": "Crear nova lista de reprodución", + "createSuccess": "Lista creada", + "updateSuccess": "Lista de reprodución actualizada" + }, + "label": { + "name": "Nome da lista", + "visibility": "Visibilidade da lista de reprodución" + }, + "placeholder": { + "name": "A miña fantástica lista" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Engadir igualmente", + "addToPlaylist": "Engadir a esta lista de reprodución", + "addTrack": "Engadir canción", + "cancel": "Cancelar", + "edit": "Editar" + }, + "empty": { + "noPlaylists": "Aínda non se creou unha lista de reprodución" + }, + "header": { + "addFailure": "Non podemos engadir a canción a lista de reprodución", + "addToPlaylist": "Engadir a lista de reprodución", + "available": "Listaxes dispoñibles", + "manage": "Xestionar listas de reprodución", + "noResults": "Sen resultados co teu filtro", + "track": "{title}, de {artist}" + }, + "label": { + "filter": "Filtro" + }, + "placeholder": { + "filterPlaylist": "Nome da lista de reprodución" + }, + "table": { + "edit": { + "header": { + "edit": "Editar", + "lastModification": "Última modificación", + "name": "Nome", + "tracks": "Cancións" + } + } + }, + "warning": { + "duplicate": "{ 0 } xa está en { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Engadir a lista de reprodución…" + } + }, + "Widget": { + "button": { + "create": "Crear lista de reprodución", + "more": "Mostrar máis" + }, + "placeholder": { + "noPlaylists": "Aínda non se creou unha lista de reprodución" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Iniciar radio dos artistas", + "startPlaylistsRadio": "Iniciar radio das listas de reprodución", + "startRadio": "Reproducir radio", + "startTagsRadio": "Iniciar radio das etiquetas", + "stopArtistsRadio": "Deter radio dos artistas", + "stopPlaylistsRadio": "Deter radio das listas de reprodución", + "stopRadio": "Deter radio", + "stopTagsRadio": "Deter radio da etiquetas" + }, + "Card": { + "button": { + "edit": "Editar" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostrar 1 etiqueta máis | Mostrar { n } etiquetas máis" + } + } + }, + "vui": { + "Pagination": { + "label": "Paxinación", + "next": "Páxina seguinte", + "previous": "Páxina anterior" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Engadeuse { n } canción a cola | Engadíronse { n } cancións a cola" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Música", + "other": "Outro", + "podcast": "Podcast" + }, + "label": "Categoría do contido" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Subeuse a canción, pero aínda non foi programado o procesamento", + "label": "Borrador" + }, + "errored": { + "help": "Non se procesou esta canción, asegúrese que está correctamente etiquetada", + "label": "Con fallo" + }, + "finished": { + "help": "Importado", + "label": "Rematado" + }, + "pending": { + "help": "Canción subida, pero aínda non procesada polo servidor", + "label": "Pendente" + }, + "skipped": { + "help": "A canción xa está presente nunha das súas bibliotecas", + "label": "Saltado" + } + }, + "label": "Preme para mostrar máis información sobre o proceso de importación desta subida" + }, + "privacyLevel": { + "choices": { + "instance": "Todas nesta instancia", + "private": "Ninguén excepto eu", + "public": "Todas, en tódalas instancias" + }, + "help": "Indica o nivel de visibilidade da túa actividade", + "label": "Visibilidade da actividade", + "shortChoices": { + "instance": "Instancia", + "private": "Privado", + "public": "Todo o mundo" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contido ilegal", + "invalidMetadata": "Metadatos non válidos", + "offensiveContent": "Contido ofensivo", + "other": "Outro", + "takedownRequest": "Rexeitar petición" + }, + "label": "Categoría" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data de acceso", + "albumTitle": "Nome do álbum", + "appliedDate": "Data de solicitude", + "artistName": "Nome do artista", + "bitrate": "Taxa de bits", + "creationDate": "Data de creación", + "dateJoined": "Data de rexistro", + "domain": "Dominio", + "duration": "Duración", + "expirationDate": "Data de caducidade", + "firstSeen": "Data do primeiro acceso", + "followers": "Seguidoras", + "handledDate": "Data da concesión", + "itemsCount": "Elementos", + "lastActivity": "Última actividade", + "lastSeen": "Data da última sesión", + "modificationDate": "Data de modificación", + "name": "Nome", + "receivedMessages": "Mensaxes recibidas", + "releaseDate": "Data da última vista", + "size": "Tamaño", + "trackTitle": "Nome da canción", + "uploads": "Subidas", + "username": "Nome de usuaria", + "users": "Usuarias" + }, + "scopes": { + "edits": { + "description": "Editar os contidos", + "label": "Edicións" + }, + "favorites": { + "description": "Acceso a favoritas", + "label": "Favoritas" + }, + "filters": { + "description": "Establecer filtros do contido", + "label": "Filtros de contido" + }, + "follows": { + "description": "Acceso aos seguimentos", + "label": "Segue" + }, + "libraries": { + "description": "Acceso a ficheiros de audio, bibliotecas, artistas e cancións", + "label": "Bibliotecas e subidas" + }, + "listenings": { + "description": "Acceso ao historial de escoita", + "label": "Escoitas" + }, + "notifications": { + "description": "Acceso as notificacións", + "label": "Notificacións" + }, + "playlists": { + "description": "Acceso a listas de reprodución", + "label": "Listas de reprodución" + }, + "profile": { + "description": "Acesso a email, nome de usuaria, e información do perfil", + "label": "Abrir perfil" + }, + "radios": { + "description": "Acceso as radios", + "label": "Radios" + }, + "reports": { + "description": "Acceso ás denuncias a moderar", + "label": "Denuncias" + }, + "security": { + "description": "Acceso ós axustes de seguridade como contrasinal e permisos", + "label": "Seguranza" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data da última vista", + "title": "Título" + }, + "artist": { + "name": "Nome" + }, + "cover": { + "label": "Portada" + }, + "description": { + "label": "Descrición" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "license": "Licenza", + "position": "Paxinación", + "title": "Título" + } + }, + "useReport": { + "account": { + "label": "Denunciar a {'@'}{username}", + "typeLabel": "Conta" + }, + "album": { + "label": "Denunciar este álbum…", + "typeLabel": "Álbum" + }, + "artist": { + "label": "Denunciar este artista…", + "typeLabel": "Artista", + "unknownLabel": "Artista descoñecido" + }, + "channel": { + "label": "Denunciar esta canle…", + "typeLabel": "Canle" + }, + "library": { + "label": "Denunciar esta biblioteca…", + "typeLabel": "Biblioteca" + }, + "playlist": { + "label": "Denunciar esta listaxe…", + "typeLabel": "Lista de reprodución" + }, + "track": { + "label": "Denunciar esta canción…", + "typeLabel": "Canción" + } + }, + "useReportConfigs": { + "account": { + "label": "Conta", + "summary": "Bio" + }, + "album": { + "label": "Álbum", + "releaseDate": "Data da última vista", + "title": "Título" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Canle" + }, + "creationDate": { + "label": "Data de creación" + }, + "library": { + "description": "Descrición", + "label": "Biblioteca" + }, + "musicbrainzId": { + "label": "ID en MusicBrainz" + }, + "name": { + "label": "Nome" + }, + "playlist": { + "label": "Lista de reprodución" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "label": "Canción", + "license": "Licenza", + "position": "Paxinación", + "title": "Título" + }, + "visibility": { + "label": "Visibilidade" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "Para axudarnos a saber que pasou, adxunta unha descrición detallada do que estabas a facer e facilitou o erro.", + "errorReportTitle": "Aconteceu un fallo non agardado.", + "leaveFeedback": "Deixar o comentario", + "unexpectedError": "Aconteceu un fallo non agardado." + }, + "useThemeList": { + "browserDefault": "Por defecto no navegador", + "darkTheme": "Escuro", + "lightTheme": "Claro" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Enviaches demasiadas solicitudes en pouco tempo, inténtao de novo en { delay }", + "rateLimitLater": "Enviaches demasiadas solicitudes en pouco tempo, por favor inténtao máis tarde" + }, + "sentry": { + "allow": "Permitir", + "deny": "Rexeitar", + "funkwhaleInstance": "Instancia oficial de Funkwhale", + "message": "As trazas do problema compartiranse con { 0 } para axudarnos a entender como e cando se produce o erro.", + "title": "Para mellorar a calidade do noso servizo, gustaríanos recoller algunha información acerca dos fallos durante a sesión." + }, + "serviceWorker": { + "actions": { + "later": "Máis tarde", + "update": "Actualizar" + }, + "newAppVersion": "Hai unha nova versión da app." + } + }, + "views": { "Notifications": { + "button": { + "read": "Marcar todo como lido", + "submit": "Listo!" + }, + "empty": { + "notifications": "Sen notificación para mostrar" + }, + "header": { + "funkwhaleSupport": "Gozas de Funkwhale?", + "instanceSupport": "Axuda a este servidor Funkwhale", + "messages": "Mensaxes", + "notifications": "As súas notificacións" + }, + "label": { + "reminder": "Lembrarmo en:", + "showRead": "Mostrar notificacións lidas" + }, + "link": { + "donate": "Doar", + "help": "Descubre outros xeitos de axudar" + }, + "loading": { + "notifications": "Cargando notificacións…" + }, + "message": { + "funkwhaleSupport": "Levas por aquí un anaco. Se Funkwhale che resulta útil, poderiamos utilizar a túa axuda para facelo aínda mellor!" + }, "option": { "delay": { "30": "30 días", @@ -3461,584 +3274,63 @@ "never": "Nunca" } }, - "link": { - "help": "Descubre outros xeitos de axudar", - "donate": "Doar" + "title": "Notificacións" + }, + "Search": { + "button": { + "submit": "Enviar consulta de busca" }, "header": { - "funkwhaleSupport": "Gozas de Funkwhale?", - "instanceSupport": "Axuda a este servidor Funkwhale", - "messages": "Mensaxes", - "notifications": "As súas notificacións" + "remote": "Buscar un obxeto remoto", + "rss": "Subscribirse a fonte RSS do podcast", + "search": "Buscar" }, - "button": { - "submit": "Listo!", - "read": "Marcar todo como lido" - }, - "loading": { - "notifications": "Cargando notificacións…" - }, - "empty": { - "notifications": "Sen notificación para mostrar." - }, - "title": "Notificacións", "label": { - "reminder": "Lembrarmo en:", - "showRead": "Mostrar notificacións lidas" - }, - "message": { - "funkwhaleSupport": "Levas por aquí un anaco. Se Funkwhale che resulta útil, poderiamos utilizar a túa axuda para facelo aínda mellor!" + "albums": "Álbums", + "artists": "Artistas", + "playlists": "Listas de reprodución", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Etiquetas", + "tracks": "Cancións" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nome de usuaria", - "loginStatus": { - "disabled": "Desactivado", - "enabled": "Activado", - "label": "Estado da conexión" - }, - "displayName": "Nome público", - "email": "Enderezo de email", - "lastActivity": "Última actividade", - "lastChecked": "Última comprobación", - "permissions": "Permisos", - "signupDate": "Data de rexistro", - "userType": "Tipo" - }, - "audioContent": { - "cachedSize": "Tamaño da caché", - "megabyte": "MB", - "totalSize": "Tamaño total", - "uploadQuota": "Cota de subida" - }, - "activity": { - "emittedFollows": "Seguimentos da biblioteca emitidos", - "emittedMessages": "Mensaxes emitidas", - "firstSeen": "Primeira visualización", - "receivedFollows": "Seguimentos de biblioteca recibidos" - } - }, - "header": { - "accountData": "Datos da conta", - "activity": "Actividade", - "audioContent": "Contido de audio", - "localAccount": "Conta local", - "activePolicy": "Este dominio está suxeito a regras específicas de moderación", - "noPolicy": "Non ten ningunha regra activada para esta conta." - }, - "button": { - "addPolicy": "Engadir nova regra de moderación" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "channels": "Canles", - "domain": "Dominio", - "libraries": "Bibliotecas", - "linkedReports": "Denuncias ligadas", - "openProfile": "Abrir perfil", - "remoteProfile": "Abrir perfil", - "requests": "Peticións", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "tooltip": { - "uploadQuota": "Indicar canto contido pode subir a usuaria. Deixar baleiro para utilizar o valor por omisión da instancia." - }, - "option": { - "permission": { - "library": "Biblioteca", - "moderation": "Moderación", - "settings": "Axustes" - } - }, - "description": { - "policy": "As políticas de moderación axúdanlle a controlar o xeito en que a súa instancia interactúa con determinado dominio ou conta." - }, - "notApplicable": "N/A", - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "Base": { - "link": { - "accounts": "Contas", - "domains": "Dominios", - "reports": "Denuncias", - "userRequests": "Solicitudes da usuaria" - }, - "title": "Moderación", - "menu": { - "secondary": "Menú secundario" - } - }, - "DomainsDetail": { - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "instanceData": "Datos da instancia", - "activePolicy": "Este dominio está suxeito a regras específicas de moderación", - "noPolicy": "Non ten ningunha regra activada para este dominio." - }, - "button": { - "addPolicy": "Engadir nova regra de moderación", - "addToAllowList": "Engadir a lista-permitir", - "refreshNodeInfo": "Actualizar info da instancia", - "removeFromAllowList": "Eliminar da lista-permitir" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "channels": "Canles", - "knownAccounts": "Contas coñecidas", - "libraries": "Bibliotecas", - "website": "Abrir sitio web", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "activity": { - "emittedFollows": "Seguimentos da biblioteca emitidos", - "emittedMessages": "Mensaxes emitidas", - "firstSeen": "Primeira visualización", - "receivedFollows": "Seguimentos de biblioteca recibidos" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Erro ó obter info do nodo", - "label": "Estado" - }, - "inAllowList": { - "label": "Está presente na lista de permitidos", - "false": "Non", - "true": "Si" - }, - "lastChecked": "Última comprobación", - "domainName": "Nome", - "software": { - "label": "Software" - }, - "totalUsers": "Conta de usuarias" - } - }, - "description": { - "policy": "As políticas de moderación axúdanlle a controlar o xeito en que a súa instancia interactúa con determinado dominio ou conta." - }, - "notApplicable": "N/A", - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "DomainsList": { - "button": { - "add": "Engadir" - }, - "label": { - "addDomain": "Engadir un dominio", - "addToAllowList": "Engadir a lista-permitir" - }, - "title": "Dominios", - "header": { - "domains": "Dominios", - "failure": "Fallou a creación do dominio" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Todos", - "resolved": "Resolto", - "unresolved": "Non resolto" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "title": "Denuncias", - "header": { - "reports": "Denuncias" - }, - "label": { - "search": "Buscar", - "status": "Estado" - }, - "placeholder": { - "search": "Buscar por título, artista, dominio…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Todos", - "approved": "Aprobada", - "pending": "Pendente", - "refused": "Rexeitada" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "label": { - "search": "Buscar", - "status": "Estado" - }, - "placeholder": { - "search": "Buscar por nome de usuaria…" - }, - "title": "Solicitudes da usuaria", - "header": { - "userRequests": "Solicitudes da usuaria" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data de acceso", - "firstSeen": "Primeira visualización" - }, - "audioContent": { - "bitrate": { - "label": "Taxa de bits" - }, - "cachedSize": "Tamaño da caché", - "duration": "Duración", - "size": "Tamaño", - "track": "Canción" - }, - "upload": { - "name": "Nome" - } - }, - "link": { - "account": "Conta", - "domain": "Dominio", - "importStatus": "Estado da importación", - "library": "Biblioteca", - "remoteProfile": "Abrir perfil", - "type": "Tipo", - "django": "Ver na admin de Django", - "visibility": "Visibilidade" - }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "local": "Local", - "uploadData": "Data de subida" - }, - "button": { - "delete": "Borrar", - "download": "Descargar" - }, - "modal": { - "delete": { - "header": "Eliminar esta subida?", - "content": { - "warning": "Esta acción non é reversible." - } - } - }, - "notApplicable": "N/A" - }, - "LibraryDetail": { - "link": { - "account": "Conta", - "albums": "Álbums", - "artists": "Artistas", - "domain": "Dominio", - "reports": "Denuncias ligadas", - "remoteProfile": "Abrir perfil", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django", - "visibility": "Visibilidade" - }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "libraryData": "Biblioteca actualizada", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "library": { - "description": "Descrición", - "name": "Nome" - }, - "activity": { - "firstSeen": "Primeira visualización", - "followers": "Seguidoras" - } - }, - "button": { - "delete": "Borrar" - }, - "modal": { - "delete": { - "header": "Eliminar esta biblioteca?", - "content": { - "warning": "Vaise eliminar a biblioteca, así como as subidas asociadas, e os seguimentos. A acción é irreversible." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "AlbumDetail": { - "header": { - "activity": "Actividade", - "albumData": "Data do álbum", - "audioContent": "Contido de audio", - "local": "Local" - }, - "link": { - "artist": "Artista", - "domain": "Dominio", - "edits": "Edicións", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "album": { - "description": "Descrición", - "title": "Título" - }, - "activity": { - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar este álbum?", - "content": { - "warning": "Vaise a eliminar o álbum, así como todas as subidas asociadas, pistas, favoritos e historial de escoita. Esta acción non ten volta." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "ArtistDetail": { - "header": { - "activity": "Actividade", - "artistData": "Datos do artista", - "audioContent": "Contido de audio", - "local": "Local" - }, - "link": { - "albums": "Álbums", - "category": "Categoría", - "domain": "Dominio", - "edits": "Edicións", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "artist": { - "description": "Descrición", - "name": "Nome" - }, - "activity": { - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar este artista?", - "content": { - "warning": "Vaise eliminar o artista, así como todas as subidas asociadas, pistas, álbums, favoritos e historial de escoita. Esta acción non ten volta." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "TagDetail": { - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "tagData": "Etiquetar datos" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "localProfile": "Abrir perfil", - "tracks": "Cancións", - "django": "Ver na admin de Django" - }, - "button": { - "delete": "Borrar" - }, - "modal": { - "delete": { - "header": "Eliminar esta etiqueta?", - "content": { - "warning": "Vas eliminar a etiqueta e desligala de calquera entidade existente. Esta acción non é reversible." - } - } - }, - "table": { - "activity": { - "firstSeen": "Primeira visualización" - }, - "tag": { - "name": "Nome" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Actividade", - "local": "Local", - "trackData": "Nome da canción" - }, - "link": { - "album": "Álbum", - "albumArtist": "Autora do álbum", - "artist": "Artista", - "domain": "Dominio", - "edits": "Edicións", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "trackData": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "track": { - "copyright": "Copyright", - "description": "Descrición", - "discNumber": "Número de disco", - "license": "Licenza", - "position": "Paxinación", - "title": "Título" - }, - "activity": { - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar esta canción?", - "content": { - "warning": "Vaise eliminar a canción, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "Base": { - "link": { - "albums": "Álbums", - "artists": "Artistas", - "channels": "Canles", - "edits": "Edicións", - "libraries": "Bibliotecas", - "tags": "Etiquetas", - "tracks": "Cancións", - "uploads": "Subidas" - }, - "title": "Xestionar biblioteca", - "menu": { - "secondary": "Menú secundario" - } - }, - "EditsList": { - "title": "Edicións", - "header": { - "edits": "Ficheiros de biblioteca" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Borrar", + "openRemote": "Abrir perfil", + "refresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "channelData": "Datos da canle" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "Ver na admin de Django", + "localProfile": "Abrir perfil" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canle, así como as subidas, pistas e álbumes asociados. Esta acción non ten volta." + }, + "header": "Eliminar esta canle?" + } + }, "table": { - "channelData": { - "account": "Conta", - "category": "Categoría", - "description": "Descrición", - "domain": "Dominio", - "name": "Nome", - "rss": "Fonte RSS", - "url": "URL" + "activity": { + "edits": "Edicións", + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "linkedReports": "Denuncias ligadas", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" }, "audioContent": { "albums": "Álbums", @@ -4047,40 +3339,16 @@ "tracks": "Cancións", "uploads": "Subidas" }, - "activity": { - "edits": "Edicións", - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "linkedReports": "Denuncias ligadas", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" + "channelData": { + "account": "Conta", + "category": "Categoría", + "description": "Descrición", + "domain": "Dominio", + "name": "Nome", + "rss": "Fonte RSS", + "url": "URL" } }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "channelData": "Datos da canle" - }, - "button": { - "delete": "Borrar", - "openRemote": "Abrir perfil", - "refresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar esta canle?", - "content": { - "warning": "Vaise eliminar a canle, así como as subidas, pistas e álbumes asociados. Esta acción non ten volta." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Abrir perfil", - "django": "Ver na admin de Django" - }, "warning": { "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" } @@ -4104,53 +3372,1205 @@ "channels": "Canles", "federation": "Federación", "instanceInfo": "Información da instancia", - "settings": "Axustes da instancia", "moderation": "Moderación", "music": "Música", "playlists": "Listas de reprodución", "sections": "Seccións", "security": "Seguranza", + "settings": "Axustes da instancia", "signups": "Rexistros", "stats": "Estatísticas", "subsonic": "Subsonic", "ui": "Interface de usuaria" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "albumData": "Data do álbum", + "audioContent": "Contido de audio", + "local": "Local" + }, + "link": { + "artist": "Artista", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "Edicións", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise a eliminar o álbum, así como todas as subidas asociadas, pistas, favoritos e historial de escoita. Esta acción non ten volta." + }, + "header": "Eliminar este álbum?" + } + }, + "table": { + "activity": { + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" + }, + "album": { + "description": "Descrición", + "title": "Título" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "ArtistDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "artistData": "Datos do artista", + "audioContent": "Contido de audio", + "local": "Local" + }, + "link": { + "albums": "Álbums", + "category": "Categoría", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "Edicións", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar o artista, así como todas as subidas asociadas, pistas, álbums, favoritos e historial de escoita. Esta acción non ten volta." + }, + "header": "Eliminar este artista?" + } + }, + "table": { + "activity": { + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" + }, + "artist": { + "description": "Descrición", + "name": "Nome" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "Base": { + "link": { + "albums": "Álbums", + "artists": "Artistas", + "channels": "Canles", + "edits": "Edicións", + "libraries": "Bibliotecas", + "tags": "Etiquetas", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "menu": { + "secondary": "Menú secundario" + }, + "title": "Xestionar biblioteca" + }, + "EditsList": { + "header": { + "edits": "Ficheiros de biblioteca" + }, + "title": "Edicións" + }, + "LibraryDetail": { + "button": { + "delete": "Borrar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "libraryData": "Biblioteca actualizada", + "local": "Local" + }, + "link": { + "account": "Conta", + "albums": "Álbums", + "artists": "Artistas", + "django": "Ver na admin de Django", + "domain": "Dominio", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "Cancións", + "uploads": "Subidas", + "visibility": "Visibilidade" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a biblioteca, así como as subidas asociadas, e os seguimentos. A acción é irreversible." + }, + "header": "Eliminar esta biblioteca?" + } + }, + "table": { + "activity": { + "firstSeen": "Primeira visualización", + "followers": "Seguidoras" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + }, + "library": { + "description": "Descrición", + "name": "Nome" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "TagDetail": { + "button": { + "delete": "Borrar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "tagData": "Etiquetar datos" + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "django": "Ver na admin de Django", + "localProfile": "Abrir perfil", + "tracks": "Cancións" + }, + "modal": { + "delete": { + "content": { + "warning": "Vas eliminar a etiqueta e desligala de calquera entidade existente. Esta acción non é reversible." + }, + "header": "Eliminar esta etiqueta?" + } + }, + "table": { + "activity": { + "firstSeen": "Primeira visualización" + }, + "tag": { + "name": "Nome" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "local": "Local", + "trackData": "Nome da canción" + }, + "link": { + "album": "Álbum", + "albumArtist": "Autora do álbum", + "artist": "Artista", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "Edicións", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canción, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." + }, + "header": "Eliminar esta canción?" + } + }, + "table": { + "activity": { + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" + }, + "track": { + "copyright": "Copyright", + "description": "Descrición", + "discNumber": "Número de disco", + "license": "Licenza", + "position": "Paxinación", + "title": "Título" + }, + "trackData": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "UploadDetail": { + "button": { + "delete": "Borrar", + "download": "Descargar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "local": "Local", + "uploadData": "Data de subida" + }, + "link": { + "account": "Conta", + "django": "Ver na admin de Django", + "domain": "Dominio", + "importStatus": "Estado da importación", + "library": "Biblioteca", + "remoteProfile": "Abrir perfil", + "type": "Tipo", + "visibility": "Visibilidade" + }, + "modal": { + "delete": { + "content": { + "warning": "Esta acción non é reversible." + }, + "header": "Eliminar esta subida?" + } + }, + "notApplicable": "N/A", + "table": { + "activity": { + "accessedDate": "Data de acceso", + "firstSeen": "Primeira visualización" + }, + "audioContent": { + "bitrate": { + "label": "Taxa de bits", + "value": "{bitrate}/s" + }, + "cachedSize": "Tamaño da caché", + "duration": "Duración", + "size": "Tamaño", + "track": "Canción" + }, + "upload": { + "name": "Nome" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Engadir nova regra de moderación" + }, + "description": { + "policy": "As políticas de moderación axúdanche a controlar o xeito en que a túa instancia interactúa con determinado dominio ou conta" + }, + "header": { + "accountData": "Datos da conta", + "activePolicy": "Este dominio está suxeito a regras específicas de moderación", + "activity": "Actividade", + "audioContent": "Contido de audio", + "localAccount": "Conta local", + "noPolicy": "Non ten ningunha regra activada para esta conta." + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "channels": "Canles", + "django": "Ver na admin de Django", + "domain": "Dominio", + "libraries": "Bibliotecas", + "linkedReports": "Denuncias ligadas", + "openProfile": "Abrir perfil", + "remoteProfile": "Abrir perfil", + "requests": "Peticións", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "notApplicable": "N/A", + "option": { + "permission": { + "library": "Biblioteca", + "moderation": "Moderación", + "settings": "Axustes" + } + }, + "table": { + "accountData": { + "displayName": "Nome público", + "email": "Enderezo de email", + "lastActivity": "Última actividade", + "lastChecked": "Última comprobación", + "loginStatus": { + "disabled": "Desactivado", + "enabled": "Activado", + "label": "Estado da conexión" + }, + "permissions": "Permisos", + "signupDate": "Data de rexistro", + "userType": "Tipo", + "username": "Nome de usuaria" + }, + "activity": { + "emittedFollows": "Seguimentos da biblioteca emitidos", + "emittedMessages": "Mensaxes emitidas", + "firstSeen": "Primeira visualización", + "receivedFollows": "Seguimentos de biblioteca recibidos" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "megabyte": "MB", + "totalSize": "Tamaño total", + "uploadQuota": "Cota de subida" + } + }, + "tooltip": { + "uploadQuota": "Indicar canto contido pode subir a usuaria. Deixar baleiro para utilizar o valor por omisión da instancia." + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "Base": { + "link": { + "accounts": "Contas", + "domains": "Dominios", + "reports": "Denuncias", + "userRequests": "Solicitudes da usuaria" + }, + "menu": { + "secondary": "Menú secundario" + }, + "title": "Moderación" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Engadir nova regra de moderación", + "addToAllowList": "Engadir a lista-permitir", + "refreshNodeInfo": "Actualizar info da instancia", + "removeFromAllowList": "Eliminar da lista-permitir" + }, + "description": { + "policy": "As políticas de moderación axúdanche a controlar o xeito en que a túa instancia interactúa con determinado dominio ou conta" + }, + "header": { + "activePolicy": "Este dominio está suxeito a regras específicas de moderación", + "activity": "Actividade", + "audioContent": "Contido de audio", + "instanceData": "Datos da instancia", + "noPolicy": "Non ten ningunha regra activada para este dominio." + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "channels": "Canles", + "django": "Ver na admin de Django", + "knownAccounts": "Contas coñecidas", + "libraries": "Bibliotecas", + "tracks": "Cancións", + "uploads": "Subidas", + "website": "Abrir sitio web" + }, + "notApplicable": "N/A", + "table": { + "activity": { + "emittedFollows": "Seguimentos da biblioteca emitidos", + "emittedMessages": "Mensaxes emitidas", + "firstSeen": "Primeira visualización", + "receivedFollows": "Seguimentos de biblioteca recibidos" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + }, + "instanceData": { + "domainName": "Nome", + "inAllowList": { + "false": "Non", + "label": "Está presente na lista de permitidos", + "true": "Si" + }, + "lastChecked": "Última comprobación", + "nodeInfoStatus": { + "label": "Estado", + "value": "Erro ó obter info do nodo" + }, + "software": { + "label": "Software", + "value": "{name} ({version})" + }, + "totalUsers": "Conta de usuarias" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "DomainsList": { + "button": { + "add": "Engadir" + }, + "header": { + "domains": "Dominios", + "failure": "Fallou a creación do dominio" + }, + "label": { + "addDomain": "Engadir un dominio", + "addToAllowList": "Engadir a lista-permitir" + }, + "title": "Dominios" + }, + "ReportsList": { + "header": { + "reports": "Denuncias" + }, + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "status": { + "all": "Todos", + "resolved": "Resolto", + "unresolved": "Non resolto" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "placeholder": { + "search": "Buscar por título, artista, dominio…" + }, + "title": "Denuncias" + }, + "RequestsList": { + "header": { + "userRequests": "Solicitudes da usuaria" + }, + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "status": { + "all": "Todos", + "approved": "Aprobada", + "pending": "Pendente", + "refused": "Rexeitada" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "placeholder": { + "search": "Buscar por identificador" + }, + "title": "Solicitudes da usuaria" + } + }, "users": { "Base": { "link": { "invitations": "Convites", "users": "Usuarias" }, - "title": "Xestionar usuarias", "menu": { "secondary": "Menú secundario" + }, + "title": "Xestionar usuarias" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Accedendo…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Non se confirmou o teu email", + "success": "Enderezo de email confirmado" + }, + "label": { + "confirmationCode": "Código de confirmación" + }, + "link": { + "back": "Volver ao acceso", + "login": "Accede" + }, + "message": { + "success": "Xa podes utilizar o servizo sen limitacións" + }, + "title": "Confirma o teu email" + }, + "Login": { + "header": { + "login": "Accede coa túa conta Funkwhale" + }, + "title": "Acceder" + }, + "PasswordReset": { + "button": { + "requestReset": "Solicita restablecer o contrasinal" + }, + "header": { + "failure": "Fallo ó solicitar o restablecemento do contrasinal", + "reset": "Restablece o contrasinal" + }, + "help": { + "form": "Utiliza este formulario para solicitar o restablecemento do contrasinal. Enviarémosche un email con instrucións para restablecelo." + }, + "label": { + "email": "Enderezo de email da conta" + }, + "link": { + "back": "Volve ao acceso" + }, + "placeholder": { + "email": "Escribe o enderezo de correo ligado a túa conta" + }, + "title": "Restablece o contrasinal" + }, + "PasswordResetConfirm": { + "button": { + "update": "Actualizar contrasinal" + }, + "header": { + "failure": "Erro ó cambiar o contrasinal", + "success": "Contrasinal actualizado correctamente" + }, + "label": { + "newPassword": "Novo contrasinal" + }, + "link": { + "back": "Volve ao acceso", + "login": "Accede" + }, + "message": { + "requestSent": "Se o enderezo de correo proporcionado no paso anterior é válido e ligado a unha conta de usuaria, deberías recibir un correo coas instrucións de restablecemento nun par de minutos.", + "success": "O contrasinal foi actualizado correctamente." + }, + "title": "Cambiar o contrasinal" + }, + "Plugins": { + "title": "Xestionar plugins" + }, + "ProfileActivity": { + "header": { + "playlists": "Listas de reprodución", + "recentlyFavorited": "Últimas favorecidas", + "recentlyListened": "Últimas escoitadas" + } + }, + "ProfileBase": { + "label": { + "self": "Esta es tí!" + }, + "link": { + "activity": "Actividade", + "domainView": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "overview": "Vista xeral" + }, + "title": "Perfil de { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Cancelar", + "createChannel": "Crear canle", + "next": "Seguinte paso", + "previous": "Paso anterior" + }, + "header": { + "channels": "Canles", + "libraries": "Bibliotecas da usuaria", + "sharedLibraries": "Esta usuaria compartiu as seguintes bibliotecas" + }, + "link": { + "addNew": "Engadir nova" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Canle da artista" + }, + "header": "Crea unha canle", + "podcast": { + "header": "Canle de podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crear unha conta Funkwhale" + }, + "title": "Rexistro" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Cancelar", + "confirm": "Borrar", + "delete": "Eliminar…", + "edit": "Editar…", + "embed": "Incrustar", + "play": "Reproducir", + "updateChannel": "Actualizar canle", + "upload": "Subir" + }, + "header": { + "artistChannel": "Canle da artista", + "podcastChannel": "Canle de podcast" + }, + "link": { + "channelEpisodes": "Tódolos episodios", + "channelOverview": "Vista xeral", + "channelTracks": "Cancións", + "domainView": "Ver en { domain }", + "mirrored": "Réplica de { domain }", + "moderation": "Actualizar regra de moderación" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "listenings": "{ n } escoita | { n } escoitas", + "subscribers": "{ n } subscritora | { n } subscritoras", + "tracks": "{ n } canción | { n } cancións" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canle e todos os ficheiros e datos relacionados. Esta acción non ten volta." + }, + "header": "Eliminar esta Canle?" + }, + "embed": { + "header": "Inclúe o traballo desta artista no teu sitio web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Se usas Mastodon ou outro servizo do fediverso, podes subscribirte a esta conta:" + }, + "header": "Subscribirse no Fediverso" + }, + "funkwhale": { + "header": "Subscribirse en Funkwhale" + }, + "header": "Subscribirse a esta canle", + "rss": { + "content": { + "help": "Copiar-pegar este URL na túa app de podcasting:" + }, + "header": "Subscribirse vía RSS" + } + } + }, + "title": "Canle" + }, + "DetailOverview": { + "header": { + "albums": "Álbums", + "latestEpisodes": "Últimos episodios", + "latestTracks": "Últimas cancións", + "series": "Series", + "uploadsFailure": "Non se publicaron algunha das subidas", + "uploadsProcessing": "Estánse a procesar as subidas", + "uploadsSuccess": "Publicáronse correctamente as subidas" + }, + "link": { + "addAlbum": "Engadir nova", + "erroredUploads": "Ver subidas con fallos", + "skippedUploads": "Ver subidas omitidas" + }, + "message": { + "processing": "Funkwhale está procesando as subidas e estarán dispoñibles moi pronto." + }, + "meta": { + "progress": "Subidas procesadas: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Cancelar", + "subscribe": "Subscribir" + }, + "link": { + "addNew": "Engadir nova" + }, + "modal": { + "subscription": { + "header": "Subscrición" + } + }, + "placeholder": { + "search": "Filtrar por nome…" + }, + "title": "Subscricións a canles" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Bibliotecas", + "tracks": "Cancións" + }, + "menu": { + "secondary": "Menú secundario" + }, + "title": "Engadir contido" + }, + "Home": { + "button": { + "start": "Comezar" + }, + "description": { + "channel": { + "1": "Se es músico ou podcaster, as canles están deseñadas para ti!", + "2": "Comparte publicamente o teu traballo para ter subscritoras en Funkwhale, do Fediverso ou calquer aplicación de podcast." + }, + "follow": "Segue bibliotecas doutras usuarias para ter nova música. As bibliotecas públicas pódense seguir inmediatamente, mentras que as privadas precisan que a usuaria che conceda acceso.", + "upload": "Subir a túa biblioteca personal de música a Funkwhale para desfrutala desde onde queiras e compartila coas amizades." + }, + "header": { + "channel": "Publica o teu traballo nunha canle", + "follow": "Seguir bibliotecas remotas", + "upload": "Subir contido de terceiros a biblioteca" + }, + "help": { + "uploadQuota": "Esta instancia ofrece {quota} de almacenamento a cada usuaria." + }, + "title": "Engadir e xestionar contido" + }, + "libraries": { + "Card": { + "button": { + "upload": "Subir" + }, + "label": { + "size": "Tamaño total dos ficheiros de esta biblioteca" + }, + "link": { + "details": "Detalles da biblioteca" + }, + "meta": { + "tracks": "{ n } canción | { n } cancións" + } + }, + "FilesTable": { + "action": { + "delete": "Borrar", + "restartImport": "Volta a lanzar importación" + }, + "button": { + "showStatus": "Mostrar información acerca do estado da subida desta canción" + }, + "empty": { + "noTracks": "Aínda non se engadiron cancións a esta biblioteca" + }, + "label": { + "importStatus": "Estado da importación", + "search": "Buscar" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "Todos", + "draft": "Borrador", + "failed": "Fallou", + "finished": "Rematado", + "pending": "Pendente", + "skipped": "Saltado" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por título, artista, álbum…" + }, + "table": { + "file": { + "header": { + "album": "Álbum", + "artist": "Artista", + "duration": "Duración", + "importStatus": "Estado da importación", + "size": "Tamaño", + "title": "Título", + "uploadDate": "Data de subida" + } + } + } + }, + "Form": { + "button": { + "confirm": "Eliminar biblioteca", + "create": "Crear biblioteca", + "delete": "Borrar", + "update": "Actualizar biblioteca" + }, + "description": { + "library": "As bibliotecas axúdanlle a organizar e compartir a súa colección musical. Pode subir a súa propia colección de música a Funkwhale e compartila cos seus amigos e familia.", + "visibility": "Pode compartir a biblioteca con outa xente, independentemente da súa visibilidade." + }, + "header": { + "failure": "Fallo" + }, + "label": { + "description": "Descrición", + "name": "Nome", + "visibility": "Visibilidade" + }, + "message": { + "libraryCreated": "Biblioteca creada", + "libraryDeleted": "Biblioteca eliminada", + "libraryUpdated": "Biblioteca actualizada" + }, + "modal": { + "delete": { + "content": { + "warning": "Eliminará completamente a biblioteca e as cancións. Non poderá voltar atrás." + }, + "header": "Eliminar esta biblioteca?" + } + }, + "placeholder": { + "description": "Esta biblioteca contén a miña música persoal, espero que che guste.", + "name": "A miña abraiante biblioteca" + } + }, + "Home": { + "empty": { + "noLibrary": "Semella que non ten unha biblioteca, é momento de crear unha." + }, + "header": { + "libraries": "As miñas Bibliotecas" + }, + "link": { + "createLibrary": "Crear nova biblioteca" + }, + "loading": { + "libraries": "Cargando Bibliotecas…" + } + }, + "Quota": { + "button": { + "purge": "Limpar" + }, + "header": { + "currentUsage": "Uso actual" + }, + "label": { + "currentUsage": "{ current } utilizado de { max } permitido", + "errored": "Ficheiros con fallos", + "pending": "Ficheiros pendentes", + "percentUsed": "{progress}%", + "skipped": "Ficheiros saltados" + }, + "link": { + "viewFiles": "Ver ficheiros" + }, + "loading": { + "currentUsage": "Cargando datos de uso…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Elimina as cancións subidas que non se procesaron completamente no servidor, engadindo o espazo correspondente a súa cuota." + }, + "header": "Eliminar ficheiros con fallos?" + }, + "purgePending": { + "content": { + "description": "Elimina completamente as cancións subidas pero aínda non procesadas, engadindo o espazo correspondente a súa cuota." + }, + "header": "Eliminar ficheiros pendentes?" + }, + "purgeSkipped": { + "content": { + "description": "Elimina as cancións subidas saltadas durante o proceso de importación, engadindo o espazo correspondente a súa cuota." + }, + "header": "Eliminar ficheiros saltados?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cancelar solicitude de seguimento", + "follow": "Seguir", + "pending": "Solicitude de seguimento pendente de aprobación", + "unfollow": "Deixar de seguir" + }, + "error": { + "follow": "Non se puido seguir a biblioteca remota: {error}", + "unfollow": "Non se puido retirar seguimento a biblioteca: {error}" + }, + "label": { + "scanFailure": "Problema ao escanear", + "scanPartialSuccess": "Escaneado con fallos", + "scanPending": "Ascendente", + "scanProgress": "Escaneando… ({ progress }%)", + "scanSuccess": "Escaneado", + "sharingLink": "Compartir ligazón" + }, + "link": { + "scan": "Escanear agora ", + "scanDetails": "Detalles" + }, + "message": { + "scanLaunched": "Escaneado iniciado", + "scanSkipped": "Escaneado saltado (o escaneado anterior é moi recente)" + }, + "meta": { + "failedTracks": "Cancións que fallaron: {tracks}", + "lastUpdate": "Última actualización: ", + "tracks": "{ n } canción | { n } cancións" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Ó deixar de seguir esta biblioteca perderás o acceso ó seu contido." + }, + "header": "Deixar de seguir biblioteca?" + } + }, + "tooltip": { + "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", + "public": "Esta biblioteca é pública e pode acceder ao contido libremente" + } + }, + "Home": { + "button": { + "refresh": "Actualizar" + }, + "description": { + "remoteLibraries": "As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a elas se son públicas ou lle outorgan acceso." + }, + "header": { + "knownLibraries": "Bibliotecas coñecidas", + "remoteLibraries": "Bibliotecas remotas" + }, + "loading": { + "remoteLibraries": "Cargando bibliotecas remotas…" + } + }, + "ScanForm": { + "button": { + "submit": "Enviar busca" + }, + "header": { + "failure": "Non se obtivo a biblioteca remota" + }, + "label": { + "search": "Buscar unha biblioteca remota" + }, + "placeholder": { + "url": "Escribe o URL dunha biblioteca" } } } }, - "Search": { - "label": { - "albums": "Álbums", - "artists": "Artistas", - "playlists": "Listas de reprodución", - "podcasts": "Podcasts", - "radios": "Radios", - "series": "Series", - "tags": "Etiquetas", - "tracks": "Cancións" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca está baleira, deberías subir algo!" + } }, - "header": { - "search": "Buscar", - "remote": "Buscar un obxeto remoto", - "rss": "Subscribirse a fonte RSS do podcast" + "DetailOverview": { + "empty": { + "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca está baleira, deberías subir algo!" + } }, - "button": { - "submit": "Enviar consulta de busca" + "DetailTracks": { + "empty": { + "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca está baleira, deberías subir algo!" + } + }, + "Edit": { + "button": { + "accept": "Aceptar", + "reject": "Rexeitar" + }, + "empty": { + "noFollowers": "Ninguén segue esta biblioteca" + }, + "header": { + "followers": "Seguidoras", + "libraryContents": "Contido da biblioteca" + }, + "loading": { + "followers": "Cargando seguidoras…" + }, + "table": { + "action": { + "header": { + "action": "Acción", + "date": "Data", + "status": "Estado", + "user": "Usuaria" + }, + "status": { + "accepted": "Aceptado", + "pending": "Pendente de aceptación", + "rejected": "Rexeitado" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Editar", + "upload": "Subir" + }, + "description": { + "sharingLink": "Comparte esta ligazón para que as usuarias poidan acceder a biblioteca ao pegala na barra de busca da súa instancia." + }, + "label": { + "instance": "Restrinxido", + "private": "Privado", + "public": "Público", + "sharingLink": "Compartir ligazón" + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "owner": "Propiedade de { username }", + "tracks": "Cancións" + }, + "meta": { + "tracks": "{ n } canción | { n } cancións" + }, + "title": "Biblioteca", + "tooltip": { + "instance": "Esta biblioteca está restrinxida as usuarias de esta instancia", + "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", + "public": "Esta biblioteca é pública e pode acceder ao contido libremente" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Cancelar", + "confirm": "Eliminar lista de reprodución", + "delete": "Borrar", + "edit": "Editar", + "embed": "Incrustar", + "playAll": "Reproducir todo", + "stopEdit": "Deter a edición" + }, + "empty": { + "noTracks": "Aínda non tes cancións na lista de reprodución" + }, + "header": { + "tracks": "Cancións" + }, + "meta": { + "tracks": "Lista de reprodución que contén { n } canción, de { username } | Lista de reprodución que contén { n } cancións, de { username }" + }, + "modal": { + "delete": { + "content": { + "warning": "Eliminará completamente a lista de reprodución e non poderá voltar atrás." + }, + "header": "Queres eliminar esta lista de reprodución \"{ playlist }\"?" + }, + "embed": { + "header": "Inclúe esta lista no seu sitio web" + } + }, + "title": "Lista de reprodución" + }, "List": { + "button": { + "create": "Crear lista de reprodución", + "manage": "Xestiona as listas de reprodución", + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a túa busca" + }, + "header": { + "browse": "Buscando nas listaxes", + "playlists": "Listas de reprodución" + }, + "label": { + "search": "Buscar" + }, "ordering": { "direction": { "ascending": "Ascendente", @@ -4159,58 +4579,11 @@ }, "label": "Ordenando" }, - "header": { - "browse": "Buscando nas listaxes", - "playlists": "Listas de reprodución" - }, - "button": { - "create": "Crear lista de reprodución", - "manage": "Xestiona as listas de reprodución", - "search": "Buscar" - }, - "placeholder": { - "search": "Nome da lista de reprodución…" - }, - "empty": { - "noResults": "Sen resultados para a túa busca" - }, "pagination": { "results": "Resultados por páxina" }, - "label": { - "search": "Buscar" - } - }, - "Detail": { - "button": { - "cancel": "Cancelar", - "delete": "Borrar", - "confirm": "Eliminar lista de reprodución", - "edit": "Editar", - "embed": "Incrustar", - "playAll": "Reproducir todo", - "stopEdit": "Deter a edición" - }, - "modal": { - "delete": { - "header": "Queres eliminar esta lista de reprodución \"{ playlist }\"?", - "content": { - "warning": "Eliminará completamente a lista de reprodución e non poderá voltar atrás." - } - }, - "embed": { - "header": "Inclúe esta lista no seu sitio web" - } - }, - "title": "Lista de reprodución", - "meta": { - "tracks": "Lista de reprodución que contén { n } canción, de { username } | Lista de reprodución que contén { n } cancións, de { username }" - }, - "empty": { - "noTracks": "Aínda non tes cancións na lista de reprodución" - }, - "header": { - "tracks": "Cancións" + "placeholder": { + "search": "Nome da lista de reprodución…" } } }, @@ -4218,289 +4591,26 @@ "Detail": { "button": { "confirm": "Eliminar radio", + "delete": "Eliminar", "edit": "Editar…" }, - "modal": { - "delete": { - "header": "Queres eliminar a radio \"{ radio }\"?", - "content": { - "warning": "Eliminará completamente a radio e non ten volta atrás." - } - } - }, "empty": { "noTracks": "Aínda non se engadiron cancións a esta radio" }, - "title": "Radio", "header": { + "radio": "Radio que inclúe {tracks} cancións, de ", "tracks": "Cancións" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Engadeuse { n } canción a cola | Engadíronse { n } cancións a cola" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Acceso a ficheiros de audio, bibliotecas, artistas e cancións", - "label": "Bibliotecas e subidas" - }, - "filters": { - "description": "Establecer filtros do contido", - "label": "Filtros de contido" - }, - "profile": { - "description": "Acesso a email, nome de usuaria, e información do perfil", - "label": "Abrir perfil" - }, - "edits": { - "description": "Editar os contidos", - "label": "Edicións" - }, - "follows": { - "description": "Acceso aos seguimentos", - "label": "Segue" - }, - "listenings": { - "description": "Acceso ao historial de escoita", - "label": "Escoitas" - }, - "reports": { - "description": "Acceso ás denuncias a moderar", - "label": "Denuncias" - }, - "notifications": { - "description": "Acceso as notificacións", - "label": "Notificacións" - }, - "playlists": { - "description": "Acceso a listas de reprodución", - "label": "Listas de reprodución" - }, - "radios": { - "description": "Acceso as radios", - "label": "Radios" - }, - "security": { - "description": "Acceso ós axustes de seguridade como contrasinal e permisos", - "label": "Seguranza" - }, - "favorites": { - "label": "Favoritas" - } }, - "filters": { - "accessedDate": "Data de acceso", - "albumTitle": "Nome do álbum", - "artistName": "Nome do artista", - "bitrate": "Taxa de bits", - "creationDate": "Data de creación", - "domain": "Dominio", - "duration": "Duración", - "expirationDate": "Data de caducidade", - "firstSeen": "Data da primeira visualización", - "followers": "Seguidoras", - "itemsCount": "Elementos", - "lastActivity": "Última actividade", - "lastSeen": "Data da última vista", - "modificationDate": "Data de modificación", - "name": "Nome", - "receivedMessages": "Mensaxes recibidas", - "releaseDate": "Data da última vista", - "dateJoined": "Data de rexistro", - "size": "Tamaño", - "trackTitle": "Nome da canción", - "uploads": "Subidas", - "username": "Nome de usuaria", - "users": "Usuarias" - }, - "fields": { - "privacyLevel": { - "label": "Visibilidade da actividade", - "help": "Indica o nivel de visibilidade da túa actividade", - "shortChoices": { - "public": "Todo o mundo", - "instance": "Instancia", - "private": "Privado" + "modal": { + "delete": { + "content": { + "warning": "Eliminará completamente a radio e non ten volta atrás." }, - "choices": { - "instance": "Todas nesta instancia", - "public": "Todas, en tódalas instancias", - "private": "Ninguén excepto eu" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoría", - "choices": { - "illegalContent": "Contido ilegal", - "invalidMetadata": "Metadatos non válidos", - "offensiveContent": "Contido ofensivo", - "other": "Outro", - "takedownRequest": "Rexeitar petición" - } - }, - "importStatus": { - "label": "Preme para mostrar máis información sobre o proceso de importación desta subida", - "choices": { - "draft": { - "label": "Borrador", - "help": "Subeuse a canción, pero aínda non foi programado o procesamento" - }, - "errored": { - "label": "Con fallo", - "help": "Non se procesou esta canción, asegúrese que está correctamente etiquetada" - }, - "finished": { - "label": "Rematado", - "help": "Importado" - }, - "pending": { - "label": "Pendente", - "help": "Canción subida, pero aínda non procesada polo servidor" - }, - "skipped": { - "label": "Saltado", - "help": "A canción xa está presente nunha das súas bibliotecas" - } - } - }, - "contentCategory": { - "label": "Categoría do contido", - "choices": { - "music": "Música", - "other": "Outro", - "podcast": "Podcast" - } + "header": "Queres eliminar a radio {radio}?" } - } + }, + "title": "Radio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Conta" - }, - "album": { - "typeLabel": "Álbum", - "label": "Denunciar este álbum…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Denunciar este artista…" - }, - "channel": { - "typeLabel": "Canle", - "label": "Denunciar esta canle…" - }, - "library": { - "typeLabel": "Biblioteca", - "label": "Denunciar esta biblioteca…" - }, - "playlist": { - "typeLabel": "Lista de reprodución", - "label": "Denunciar esta listaxe…" - }, - "track": { - "label": "Denunciar esta canción…", - "typeLabel": "Canción" - } - }, - "useReportConfigs": { - "account": { - "label": "Conta", - "summary": "Bio" - }, - "album": { - "label": "Álbum", - "releaseDate": "Data da última vista", - "title": "Título" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Canle" - }, - "track": { - "copyright": "Copyright", - "license": "Licenza", - "position": "Paxinación", - "title": "Título", - "label": "Canción" - }, - "creationDate": { - "label": "Data de creación" - }, - "library": { - "description": "Descrición", - "label": "Biblioteca" - }, - "musicbrainzId": { - "label": "ID en MusicBrainz" - }, - "name": { - "label": "Nome" - }, - "playlist": { - "label": "Lista de reprodución" - }, - "tags": { - "label": "Etiquetas" - }, - "visibility": { - "label": "Visibilidade" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "Licenza", - "position": "Paxinación", - "title": "Título" - }, - "cover": { - "label": "Portada" - }, - "description": { - "label": "Descrición" - }, - "artist": { - "name": "Nome" - }, - "album": { - "releaseDate": "Data da última vista", - "title": "Título" - }, - "tags": { - "label": "Etiquetas" - } - } - }, - "useThemeList": { - "darkTheme": "Escuro", - "lightTheme": "Claro" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Hai unha nova versión da app.", - "actions": { - "later": "Máis tarde", - "update": "Actualizar" - } - }, - "axios": { - "rateLimitDelay": "Enviaches demasiadas solicitudes en pouco tempo, inténtao de novo en { delay }", - "rateLimitLater": "Enviaches demasiadas solicitudes en pouco tempo, por favor inténtao máis tarde" } } } diff --git a/front/src/locales/it.json b/front/src/locales/it.json index 39c0b3e4e..8a0064725 100644 --- a/front/src/locales/it.json +++ b/front/src/locales/it.json @@ -1,1435 +1,60 @@ { "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } vuole accedere al tuo account Funkwhale", - "authorize": "Autorizza app di terze parti", - "authorizeFailure": "Errore durante l'autorizzazione dell'applicazione", - "fetchFailure": "Errore durante il recupero dei dati dell'applicazione", - "allScopes": "Accesso completo", - "readOnly": "Sola lettura", - "writeOnly": "Sola-scrittura" - }, - "title": "Permetti applicazione", - "button": { - "authorize": "Autorizza { app }" - }, - "help": { - "pasteCode": "Copia-incolla il codice seguente in questa applicazione:", - "redirect": "Sarai reindirizzato su { 0 }", - "copyCode": "Ti sarà mostrato un codice da copiare-incollare nell'applicazione." - }, - "message": { - "unknownPermissions": "L'applicazione sta anche richiedendo i seguenti permessi sconosciuti:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Accesso disabilitato", - "passwordUpdated": "Password aggiornata", - "unavailable": "L'API Subsonic non è disponibile su questa istanza Funkwhale." - }, - "button": { - "confirmDisable": "Disabilita accesso", - "disable": "Disabilita accesso Subsonic", - "newPassword": "Richiedi una nuova password", - "confirmNewPassword": "Richiedi una password" - }, - "modal": { - "disableSubsonic": { - "header": "Disabilitare l'accesso alle API Subsonic?", - "content": { - "warning": "Questo disabiliterà completamente l'accesso alla API Subsonic dagli account." - } - }, - "newPassword": { - "header": "Richiedere una nuova password API Subsonic?", - "content": { - "warning": "Questo ti disconnetterà dai dispositivi esistenti che utilizzano la password attuale." - } - } - }, - "link": { - "apps": "Scopri come utilizzare Funkwhale attraverso altre app" - }, - "header": { - "error": "Errore", - "subsonic": "Password API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale è compatibile con altri lettori musicali che supportano le Subsonic API.", - "paragraph3": "Tuttavia, accedere a Funkwhale da quelle applicazioni richiede un'altra password che puoi impostare qui sotto.", - "paragraph2": "Puoi usarli per ascoltare le tue playlist e musica anche quando non collegato, dal tuo cellulare o tablet, per esempio." - } - }, - "label": { - "subsonicField": "La tua password per le API subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token di accesso", - "appId": "ID Applicazione", - "appSecret": "Secret dell'applicazione" - }, - "header": { - "appDetails": "Dettagli dell'applicazione", - "editApp": "Modifica applicazione" - }, - "help": { - "appDetails": "L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono essere trattati come password. Non condividerli con nessun altro." - }, - "link": { - "settings": "Torna alle impostazioni" - }, - "title": "Modifica applicazione", - "button": { - "regenerateToken": "Rigenera token" - } - }, - "Settings": { - "title": "Impostazioni dell'account", - "header": { - "accountSettings": "Impostazioni dell'account", - "authorizedApps": "App autorizzate", - "avatar": "Avatar", - "changeEmail": "Cambia il mio indirizzo email", - "changePassword": "Cambia la mia password", - "contentFilters": "Filtri di contenuto", - "deleteAccount": "Elimina il mio account", - "hiddenArtists": "Artisti nascosti", - "plugins": "Plugin", - "settingsUpdated": "Impostazioni aggiornate", - "emailFailure": "Non possiamo cambiare il tuo indirizzo email", - "accountFailure": "Non possiamo eliminare il tuo account", - "noApps": "Non hai nessuna applicazione connessa al tuo account.", - "noPersonalApps": "Non hai ancora registrato nessuna applicazione.", - "yourApps": "Le tue applicazioni", - "avatarFailure": "La tua immagine di profilo non può essere salvata", - "passwordFailure": "La tua password non può essere cambiata", - "updateFailure": "Le tue impostazioni non possono essere aggiornate" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Applicazione", - "permissions": "Permessi" - } - }, - "yourApps": { - "header": { - "application": "Applicazione", - "creationDate": "Data di creazione", - "scopes": "Visibilità" - } - }, - "artists": { - "header": { - "creationDate": "Data di creazione", - "name": "Nome" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Password corrente", - "newEmail": "Nuovo indirizzo email", - "newPassword": "Nuova password", - "password": "Password" - }, - "button": { - "password": "Cambia password", - "delete": "Elimina", - "deleteAccountConfirm": "Elimina il mio account", - "deleteAccount": "Elimina il mio account…", - "disableSubsonic": "Disabilita accesso", - "edit": "Modifica", - "refresh": "Aggiorna", - "remove": "Rimuovi", - "removeApp": "Rimuovi applicazione", - "revoke": "Revoca", - "revokeAccess": "Revoca accesso", - "update": "Aggiorna", - "updateSettings": "Aggiorna impostazioni" - }, - "description": { - "changeEmail": "Cambia l'indirizzo email associato al tuo account. Ti invieremo una conferma al nuovo indirizzo.", - "changePassword": { - "paragraph1": "Cambiando la tua password cambierà anche la password della API Subsonic se ne hai richiesta una.", - "paragraph2": "Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa password." - }, - "contentFilters": "I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su questo servizio.", - "authorizedApps": "Questa è la lista di applicazioni che hanno accesso ai dati del tuo account.", - "yourApps": "Questa è la lista di applicazioni che hai registrato.", - "plugins": "Usa i plugin per estendere Funkwhale ed ottenere funzionalità aggiuntive.", - "deleteAccount": "Puoi eliminare permanentemente e irreversibilmente il tuo account e tutti i dati ad esso associati tramite il modulo qui sotto. Ti verrà richiesta una conferma." - }, - "modal": { - "changePassword": { - "header": "Cambiare la tua password?", - "content": { - "warning": "Cambiare la tua password avrà queste conseguenze:", - "logout": "Sarai disconnesso da questa sessione e dovrai accedere con una nuova", - "subsonic": "La tua password Subsonic sarà cambiata con una nuova e casuale, e sarai disconnesso dai dispositivi che utilizzano ancora la vecchia password Subsonic" - } - }, - "deleteAccount": { - "header": "Vuoi eliminare il tuo account?", - "content": { - "warning": "Questo è irreversibile e rimuoverà permanentemente i tuoi dati dai nostri server. Sarai immediatamente disconnesso." - } - }, - "deleteApp": { - "header": "Rimuovere l'applicazione \"{ application }\"?", - "content": { - "warning": "Questo cancellerà permanentemente l'applicazione e tutti i token associati." - } - }, - "revokeApp": { - "header": "Revoca accesso per l'applicazione \"{ application }\"?", - "content": { - "warning": "Questo eviterà a questa applicazione di accedere al servizio a tuo nome." - } - } - }, - "help": { - "noApps": "Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste applicazioni verranno elencate qui.", - "changePassword": "Per favore controlla se la tua password è corretta", - "noPersonalApps": "Creane una per integrare Funkwhale con applicazioni di terze parti." - }, - "link": { - "managePlugins": "Gestisci i plugin", - "newApp": "Registra una nuova applicazione" - }, - "warning": { - "deleteAccount": "Il tuo account sarà eliminato dai nostri servers in pochi minuti. Notificheremo anche gli altri server che potrebbero avere una copia di alcuni dei tuoi dati in modo che possano procedere all'eliminazione. Nota però che alcuni di questi server potrebbero essere offline o potrebbero rifiutarsi di procedere." - }, - "message": { - "currentEmail": "Il tuo indirizzo email corrente è { email }.", - "confirmDelete": "La tua richiesta di eliminazione è stata inviata, il tuo account e il suo contenuto saranno eliminati a breve" - } - }, - "Logout": { - "header": { - "confirm": "Sei sicuro di volerti disconnettere?", - "unauthenticated": "Non hai ancora effettuato l'accesso" - }, - "link": { - "login": "Accedi!" - }, - "title": "Disconnetti", - "button": { - "logout": "Si, disconnettimi!" - }, - "message": { - "loggedIn": "Sei attualmente connesso come { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Torna alle impostazioni" - }, - "title": "Crea una nuova applicazione" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori.", - "read": { - "label": "Lettura", - "description": "Accesso in sola lettura ai dati utente" - }, - "write": { - "label": "Scrivi", - "description": "Accesso in sola-scrittura ai dati utente" - } - }, - "name": "Nome", - "redirectUri": "URI di redirezione" - }, - "button": { - "create": "Crea applicazione", - "update": "Aggiorna applicazione" - }, - "help": { - "redirectUri": "Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua applicazione non è servita sul web." - }, - "header": { - "failure": "Non è stato possibile salvare le tue modifiche" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crea un account", - "resetPassword": "Resetta la tua password" - }, - "placeholder": { - "username": "Inserisci il tuo nome utente o indirizzo email" - }, - "help": { - "approvalRequired": "Se ti sei registrato di recente potresti dover aspettare che il nostro team di moderazione controlli il tuo account o verificare la tua email.", - "invalidCredentials": "Per favore, controlla che la combinazione username/password sia corretta e assicurati di aver verificato il tuo indirizzo email." - }, - "button": { - "login": "Accedi" - }, - "label": { - "password": "Password", - "username": "Nome utente o indirizzo email" - }, - "header": { - "loginFailure": "Non riusciamo a farti accedere" - } - }, - "SignupForm": { - "button": { - "create": "Crea il mio account" - }, - "label": { - "email": "Indirizzo email", - "password": "Password", - "username": "Nome utente" - }, - "placeholder": { - "email": "Inserisci il tuo indirizzo email", - "invitation": "Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)", - "username": "Inserisci il tuo nome utente" - }, - "header": { - "login": "Accedi al tuo account Funkwhale", - "signupFailure": "Il tuo account non può essere creato." - }, - "message": { - "registrationClosed": "Le registrazioni sono chiuse su questa istanza, è necessario un codice d'invito per registrarsi.", - "requiresReview": "Le iscrizioni su questa istanza sono aperte, ma sono revisionate dai moderatori prima di essere approvate.", - "awaitingReview": "La richiesta di registrazione è stata inviata con successo. Sarai notificato tramite email quando il nostro team di moderazione avrà verificato la tua richiesta.", - "accountCreated": "Il tuo account è stato creato con successo. Verifica la tua email prima di fare il login." - } - }, - "Plugin": { - "link": { - "documentation": "Documentazione" - }, - "label": { - "pluginEnabled": "Abilitato", - "library": "Libreria" - }, - "header": { - "failure": "Errore durante il salvataggio del plugin" - }, - "description": { - "library": "Libreria dove i file dovrebbero essere importati." - }, - "button": { - "save": "Salva", - "scan": "Scansiona" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } utente attivo | { n } utenti attivi", - "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" + "description": { + "findApp": "Usa Funkwhale su altri dispositivi con le nostre app.", + "funkwhale": "Funkwhale è un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", + "publicContent": "Ascolta album e playlist pubbliche condivise su questa istanza.", + "quota": "Gli utenti su questo pod ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!", + "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!" }, "header": { - "funkwhale": "Una piattaforma sociale dove ascoltare e condividere musica", "aboutPod": "A proposito di questa istanza", - "publicContent": "Naviga tra i contenuti pubblici", "findApp": "Trova un'app", + "funkwhale": "Una piattaforma sociale dove ascoltare e condividere musica", + "publicContent": "Naviga tra i contenuti pubblici", "signup": "Registrati" }, - "title": "Informazioni su", "link": { "findOtherPod": "Trova un altro pod", "learnMore": "Scopri di più" }, - "description": { - "funkwhale": "Funkwhale è un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", - "publicContent": "Ascolta album e playlist pubbliche condivise su questa istanza.", - "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!", - "findApp": "Usa Funkwhale su altri dispositivi con le nostre app.", - "quota": "Gli utenti su questo pod ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!" + "message": { + "greeting": "Ciao {username}", + "loggedIn": "Risulti già autenticato!" }, "placeholder": { "noDescription": "Nessuna descrizione disponibile." }, - "message": { - "loggedIn": "Risulti già autenticato!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } utente attivo | { n } utenti attivi", "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" }, - "header": { - "aboutFunkwhale": "A proposito di Funkwhale", - "about": "A proposito di questa istanza Funkwhale", - "contact": "Contatta", - "login": "Accedi", - "newChannels": "Nuovi canali", - "newAlbums": "Album aggiunti di recente", - "signup": "Registrati", - "statistics": "Statistiche", - "links": "Link utili", - "welcome": "Benvenuto a { podName }!" - }, - "link": { - "publicContent": { - "label": "Naviga tra i contenuti pubblici", - "description": "Ascolta album e playlist pubbliche condivise su questa istanza" - }, - "userGuides": { - "description": "Scopri tutto quello che devi sapere su Funkwhale e le sue funzionalità", - "label": "Manuali utente" - }, - "findOtherPod": "Trova un'altra istanza", - "learnMore": "Scopri di più", - "mobileApps": { - "label": "App mobile", - "description": "Usa Funkwhale su altri dispositivi con le nostre app" - }, - "rules": "Regole del server", - "viewMore": "Visualizza altri…", - "funkwhale": "Visita funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale è gratuito e sviluppato da un'amichevole comunità di volontari.", - "paragraph1": "Su questo pod gira Funkwhale, un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata." - }, - "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!", - "quota": "Gli utenti su questa istanza ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!" - }, - "title": "Pagina Iniziale", - "placeholder": { - "noDescription": "Nessuna descrizione disponibile." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - } - }, - "Widget": { - "button": { - "more": "Mostra altri" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - }, - "title": "Aggiornato il { date }" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodi" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - } - }, - "Widget": { - "button": { - "more": "Mostra altri" - } - } - }, - "Player": { - "meta": { - "position": "{ index } su { length }" - }, - "header": { - "player": "Player audio e controlli" - }, - "label": { - "clearQueue": "Pulisci la tua coda", - "expandQueue": "Espandi coda", - "addArtistContentFilter": "Nascondi contenuti di questo artista…", - "loopingDisabled": "Ripetizione disattivata. Clicca per attivare la ripetizione della singola traccia.", - "loopingSingle": "Ripeti una singola traccia. Clicca per ripetere l'intera coda.", - "loopingWholeQueue": "Ripete l'intera coda. Clicca per disattivare la ripetizione.", - "audioPlayer": "Riproduttore musicale", - "mute": "Muto", - "nextTrack": "Prossima traccia", - "pause": "Pausa", - "play": "Riproduci", - "previousTrack": "Traccia precedente", - "shuffleQueue": "Mischia la tua coda", - "unmute": "Non silenziare" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Aggiungi alla coda attuale", - "addToPlaylist": "Aggiungi alla playlist…", - "episodeDetails": "Dettagli dell'episodio", - "hideArtist": "Nascondi contenuti di questo artista", - "discretePlay": "Riproduci", - "playAlbum": "Riproduci album", - "playArtist": "Riproduci artista", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "playPlaylist": "Riproduci playlist", - "startRadio": "Riproduci canzoni simili", - "playTrack": "Riproduci traccia", - "playTracks": "Riproduci tracce", - "report": "Segnala…", - "trackDetails": "Dettagli sulla traccia" - }, - "title": { - "more": "Di più…", - "unavailable": "Questa traccia non è disponibile in nessuna libreria alla quale hai accesso" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Aggiungi ai preferiti", - "addToPlaylist": "Aggiungi alla playlist…", - "addToQueue": "Aggiungi alla coda", - "episodeDetails": "Dettagli dell'episodio", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "startRadio": "Riproduci radio", - "removeFromFavorites": "Rimuovi dai preferiti", - "trackDetails": "Dettagli sulla traccia", - "albumDetails": "Vedi album", - "artistDetails": "Vedi artisti", - "channelDetails": "Vedi canali", - "seriesDetails": "Vedi serie" - } - }, - "MobileRow": { - "button": { - "actions": "Mostra le azioni per la traccia" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Aggiungi ai preferiti", - "addToPlaylist": "Aggiungi alla playlist…", - "addToQueue": "Aggiungi alla coda", - "episodeDetails": "Dettagli dell'episodio", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "startRadio": "Riproduci radio", - "removeFromFavorites": "Rimuovi dai preferiti", - "trackDetails": "Dettagli sulla traccia", - "albumDetails": "Vedi album", - "artistDetails": "Vedi artisti", - "channelDetails": "Vedi canali", - "seriesDetails": "Vedi serie" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artista", - "title": "Titolo" - } - } - }, - "Widget": { - "empty": { - "noResults": "Nessun risultato" - }, - "button": { - "more": "Mostra altri" - } - }, - "MobileRow": { - "button": { - "actions": "Mostra le azioni per la traccia" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Regola volume" - }, - "button": { - "mute": "Muto", - "unmute": "Non silenziare" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artista", - "category": { - "federation": "Federazione", - "podcasts": "Podcast" - }, - "search": "Ricerca contenuti", - "tag": "Etichetta", - "track": "Traccia" - }, - "link": { - "more": "Altri risultati 🡒", - "fediverse": "Cerca sul fediverso", - "rss": "Iscriviti al podcast tramite RSS" - }, - "header": { - "noResults": "Nessun risultato trovato" - }, - "placeholder": { - "search": "Cerca per artisti, album, tracce…" - }, - "empty": { - "noResults": "Spiacente, questa ricerca non ha restituito risultati" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artisti", - "search": "Cerca un po' di musica" - }, - "placeholder": { - "search": "Artista, album, traccia…" - }, - "empty": { - "noAlbums": "Nessun album corrisponde alla tua ricerca", - "noArtists": "Nessun artista corrisponde alla tua ricerca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografia dell'artista", - "category": "Categoria", - "image": "Immagine del canale", - "description": "Descrizione", - "username": "Fediverso", - "language": "Lingua", - "name": "Nome", - "email": "Indirizzo email del proprietario", - "owner": "Nome proprietario", - "podcast": "Podcast", - "subcategory": "Sottocategoria", - "tags": "Tag" - }, - "placeholder": { - "name": "Nome del canale fantastico", - "username": "nomecanalefantastico" - }, - "header": { - "error": "Errore durante il salvataggio del canale" - }, - "help": { - "podcast": "Carica i tuoi episodi e tieni aggiornata la tua community.", - "discography": "Pubblica la musica che fai come una bella discografia di album e singoli.", - "podcastFields": "Utilizzato per itunes:email e itunes:name field richiesto da alcune piattaforme come Spotify o iTunes.", - "username": "Utilizzato negli URL e per seguire questo canale nel Fediverso. Non può essere cambiato una volta impostato." - }, - "loader": { - "loading": "Caricamento" - }, - "legend": { - "purpose": "Per cosa sarà utilizzato questo canale?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Annulla richiesta di follow", - "follow": "Segui", - "unfollow": "Smetti di seguire" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copia" - }, - "help": { - "embed": "Copia/incolla questo codice nel tuo sito HTML", - "width": "Lascia vuoto per un widget adattivo", - "anonymous": "Contatta i tuoi amministratori e chiedigli di cambiare l'impostazione corrispondente." - }, - "label": { - "embed": "Incorpora codice", - "height": "Altezza del widget", - "width": "Larghezza del widget" - }, - "header": { - "preview": "Anteprima" - }, - "warning": { - "anonymous": "La condivisione non funzionerà perchè questa istanza non permette agli utenti anonimi di accedere al contenuto." - }, - "message": { - "copy": "Testo copiato negli appunti!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Mostra altri" - }, - "help": { - "subscribe": "Potresti aver bisogno di seguire questo canale per vedere i suoi contenuti." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Mostra altri" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Potresti aver bisogno di seguire questo canale per vedere il suo contenuto." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "addDescription": "Aggiungi una descrizione…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } traccia in | { n } tracce in", - "albums": "{ n } album | { n } album" - }, - "title": "Artista", - "button": { - "cancel": "Annulla", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di più…", - "play": "Riproduci tutti gli album" - }, - "modal": { - "embed": { - "header": "Incorpora il lavoro di questo artista nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "wikipedia": "Cerca su Wikipedia", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }", - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } traccia corrisponde ai filtri selezionati | { n } tracce corrispondono ai filtri selezionati", - "builder": "Crea", - "created": "Radio creata", - "updated": "Radio aggiornata" - }, - "table": { - "filter": { - "header": { - "actions": "Azioni", - "candidates": "Candidati", - "config": "Configurazione", - "exclude": "Escludi", - "name": "Filtra nome" - } - } - }, - "button": { - "filter": "Aggiungi filtro", - "save": "Salva" - }, - "label": { - "filter": "Aggiungi filtri per personalizzare la tua radio", - "description": "Descrizione", - "public": "Mostra pubblicamente", - "name": "Nome radio" - }, - "placeholder": { - "description": "La mia stupenda descrizione", - "name": "La mia eccezionale radio" - }, - "title": "Creatore Radio", - "option": { - "filter": "Seleziona un filtro" - }, - "description": { - "builder": "Puoi usare questa interfaccia per creare la tua radio personalizzata, che riprodurrà tracce in accordo con i tuoi criteri." - } - }, - "Filter": { - "cancelButton": "Annulla", - "excludeLabel": "Escludi", - "removeButton": "Rimuovi", - "matchingTracksModalHeader": "Tracce che corrispondono al filtro" - } - }, - "FileUpload": { - "tooltip": { - "network": "Si è verificato un errore di rete durante il caricamento del file", - "size": "Impossibile caricare questo file, controlla che non sia troppo grande", - "extension": "Tipo di file non valido, assicurati che stai caricando un file audio. Le estensioni di file supportate sono { extensions }", - "retry": "Riprova", - "denied": "Caricamento non riuscito, assicurati che il file non sia troppo grande e di non aver esaurito la tua quota", - "timeout": "Caricamento scaduto, per favore riprova" - }, - "table": { - "upload": { - "header": { - "actions": "Azioni", - "filename": "Nome file", - "size": "Dimensione", - "status": "Stato" - }, - "status": { - "pending": "In sospeso", - "uploaded": "Caricato", - "uploading": "Caricamento…" - } - } - }, - "button": { - "cancel": "Annulla", - "retry": "Riprova upload falliti" - }, - "label": { - "uploadWidget": "Clicca per selezionare i file da caricare o trascina e rilascia file o cartelle", - "remainingSpace": "Spazio di archiviazione rimanente", - "extensions": "Estensioni supportate: { extensions }" - }, - "header": { - "failure": "Errore durante l'avvio dell'importazione", - "server": "Stato dell'importazione", - "status": "Stato dell'importazione", - "local": "Importa musica dalla tua memoria locale" - }, - "link": { - "processing": "Elaborazione", - "uploading": "Caricamento", - "picard": "Ti consigliamo di utilizzare Picard per quello scopo." - }, - "description": { - "import": "Risultati della tua importazione:", - "previousImport": "Risultati della tua precedente importazione:" - }, - "message": { - "local": { - "format": "I file musicali che stai caricando sono in formato OGG, Flac, MP3 o AIFF", - "tag": "I file musicali che stai caricando sono correttamente etichettati.", - "message": "Stai per caricare della musica nella tua libreria. Prima di procedere, per favore assicurati che:", - "copyright": "Non stai caricando contenuti protetti da diritti d'autore in una libreria pubblica, altrimenti potresti infrangere la legge" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Un breve riassunto che descrive le tue modifiche." - }, - "button": { - "cancel": "Annulla", - "clear": "Svuota", - "reset": "Ripristina al valore iniziale", - "showUnreviewed": "Restringi alle modifiche non revisionate", - "showAll": "Mostra tutte le modifiche", - "submit": "Invia e applica modifica", - "new": "Invia un'altra modifica", - "suggest": "Invia suggerimento" - }, - "header": { - "failure": "Errore durante l'invio della modifica", - "recentEdits": "Modifiche recenti", - "unreviewed": "Modifiche recenti in attesa di revisione", - "success": "La tua modifica è stata inviata correttamente." - }, - "notApplicable": "N/D", - "empty": { - "suggestEdit": "Suggerisci una modifica utilizzando il modulo qui sotto." - }, - "label": { - "summary": "Riassunto (opzionale)" - }, - "message": { - "noPermission": "Non hai i permessi per modificare questo oggetto, ma puoi suggerire modifiche. Una volta inviati, i suggerimenti saranno revisionati prima dell'approvazione." - } - }, - "Albums": { - "link": { - "addMusic": "Aggiungi musica" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando gli album" - }, - "placeholder": { - "search": "Inserisci il titolo dell'album…" - }, - "empty": { - "noResults": "Nessun risultato corrispondente alla tua ricerca" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "label": { - "search": "Cerca", - "tags": "Etichette" - }, - "button": { - "search": "Cerca" - } - }, - "Artists": { - "button": { - "upload": "Aggiungi musica", - "search": "Cerca" - }, - "label": { - "search": "Nome dell'artista", - "excludeCompilation": "Escludi gli artisti della compilation", - "tags": "Etichette" - }, - "title": "Artisti", - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando artisti" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "placeholder": { - "search": "Cerca…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artista", - "copyright": "Diritti d'autore", - "license": "Licenza", - "series": "Serie", - "url": "URL", - "year": "Anno" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Download", - "duration": "Durata", - "size": "Dimensione" - } - }, - "header": { - "episode": "Dettagli Episodio", - "library": "Librerie Correlate", - "playlists": "Playlist correlate", - "release": "Dettagli Rilascio", - "track": "Dettagli Traccia" - }, - "notApplicable": "N/D", - "description": { - "library": "Questa traccia è presente nelle seguenti librerie:" - }, - "link": { - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artisti", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "header": { - "channels": "Canali", - "tracks": "Tracce" - } - }, - "ArtistDetail": { - "header": { - "album": "Album di questo artista", - "track": "Nuove tracce di questo artista", - "library": "Librerie dell'utente" - }, - "button": { - "more": "Carica di più…", - "filter": "Rimuovi filtro" - }, - "link": { - "filter": "Revisiona i miei filtri" - }, - "description": { - "library": "Questo artista è presente nelle seguenti librerie:" - }, - "message": { - "filter": "Stai attualmente nascondendo i contenuti di questo artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Si è verificato un errore durante l'elaborazione del file. Sono disponibili dettagli qui sotto.", - "unknownError": { - "message": "Si è verificato un errore sconosciuto", - "label": "Errore sconosciuto" - }, - "invalidMetadata": { - "label": "Metadati non validi", - "message": "I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono mancanti." - } - }, - "button": { - "close": "Chiudi" - }, - "table": { - "error": { - "debug": "Informazioni di debug", - "errorDetail": "Dettaglio dell'errore", - "errorType": "Tipo di errore", - "help": "Chiedi aiuto" - } - }, - "header": { - "importDetail": "Dettaglio dell'importazione" - }, - "link": { - "support": "Apri una conversazione di supporto (includi nel tuo messaggio le informazioni di debug qui sotto)", - "documentation": "Leggi la nostra documentazione per questo errore" - }, - "message": { - "importDetail": "Il caricamento è ancora in corso e presto sarà processato dal server.", - "importSuccess": "Il caricamento è stato processato con successo dal server." - }, - "warning": { - "importSkipped": "Il caricamento è stato saltato perchè uno simile è già disponibile in una delle tue librerie." - } - }, - "EditCard": { - "button": { - "approve": "Approva", - "delete": "Elimina", - "reject": "Rifiuta" - }, - "status": { - "approved": "Approvato", - "applied": "Approvata ed applicata", - "pending": "Revisione in sospeso", - "rejected": "Rifiutato" - }, - "modal": { - "delete": { - "header": "Eliminare questo suggerimento?" - }, - "content": { - "warning": "Il suggerimento sarà completamente rimosso, questa azione è irreversibile." - } - }, - "table": { - "update": { - "header": { - "field": "Campo", - "newValue": "Nuovo valore", - "oldValue": "Vecchio valore" - }, - "notApplicable": "N/D" - } - }, - "header": { - "modification": "Modifica { id }" - }, - "link": { - "track": "Traccia #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Navigare i podcast" - }, - "button": { - "cancel": "Annulla", - "channel": "Crea un Canale", - "search": "Cerca", - "subscribe": "Iscriviti", - "feed": "Iscriviti a un feed" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "label": { - "search": "Titolo del Podcast", - "tags": "Etichette" - }, - "title": "Podcast", - "pagination": { - "results": "Risultati per pagina" - }, - "placeholder": { - "search": "Cerca…" - }, - "modal": { - "subscription": { - "header": "Iscrizione" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando radio", - "instance": "Radio dell'istanza", - "user": "Radio dell'utente" - }, - "button": { - "add": "Crea radio", - "create": "Crea la tua radio" - }, - "placeholder": { - "search": "Inserisci un nome di una radio…" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "title": "Radio", - "pagination": { - "results": "Risultati per pagina" - }, - "label": { - "search": "Cerca" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Annulla", - "delete": "Elimina…", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di più…" - }, - "modal": { - "delete": { - "header": "Eliminare questo album?", - "content": { - "warning": "L'album sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." - } - }, - "embed": { - "header": "Incorpora questo album nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }", - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Annulla", - "delete": "Elimina…", - "download": "Scarica", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di più…", - "play": "Riproduci" - }, - "modal": { - "delete": { - "header": "Eliminare questa traccia?", - "content": { - "warning": "La traccia sarà rimossa, così come i relativi file e dati. Questa azione è irreversibile." - } - }, - "embed": { - "header": "Incorpora questa traccia nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "wikipedia": "Cerca su Wikipedia", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }" - }, - "title": "Traccia" - }, - "AlbumEdit": { - "header": { - "edit": "Modifica questo album", - "suggest": "Suggerisci una modifica su questo album" - }, - "message": { - "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." - } - }, - "ArtistEdit": { - "header": { - "edit": "Modifica questo artista", - "suggest": "Suggerisci una modifica su questo artista" - }, - "message": { - "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." - } - }, - "TrackEdit": { - "header": { - "edit": "Modifica questa traccia", - "suggest": "Suggerisci una modifica su questa traccia" - }, - "message": { - "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodi", - "tracks": "Tracce", - "libraries": "Librerie dell'utente" - }, - "description": { - "libraries": "Questo album è presente nelle seguenti librerie:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importa" - } - }, - "FsLogs": { - "empty": { - "notStarted": "L'importazione non è ancora cominciata" - } - }, - "Home": { - "title": "Libreria", - "header": { - "newChannels": "Nuovi canali", - "playlists": "Playlist", - "recentlyAdded": "Aggiunte recentemente", - "recentlyFavorited": "Preferiti recenti", - "recentlyListened": "Ascoltate recentemente" - } - }, - "TagSelector": { - "placeholder": { - "search": "Cerca…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } preferito | { n } preferiti" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "link": { - "library": "Sfoglia libreria" - }, - "loader": { - "loading": "Caricando i tuoi preferiti…" - }, - "empty": { - "noFavorites": "Non sono ancora state aggiunte tracce ai tuoi preferiti" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "title": "I Tuoi Preferiti" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Aggiungi ai preferiti", - "remove": "Rimuovi dai preferiti" - }, - "label": { - "inFavorites": "Nei preferiti" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } file | { n } file", - "quota": "Spazio di archiviazione rimanente:" - }, - "button": { - "cancel": "Annulla", - "close": "Chiudi", - "finishLater": "Finisci più tardi", - "next": "Prossimo passo", - "previous": "Passo precedente", - "publish": "Pubblica", - "update": "Aggiorna" - }, - "header": { - "uploadFiles": "File da caricare", - "processing": "Elaborazione file", - "publish": "Pubblica audio", - "uploadDetails": "Dettagli di caricamento" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "label": { - "album": "Album", - "series": "Serie" - }, - "option": { - "none": "Nessuno" - } - }, - "LicenseSelect": { - "link": { - "license": "A proposito di questa licenza" - }, - "label": { - "license": "Licenza" - }, - "option": { - "none": "Nessuno" - } - }, - "UploadForm": { - "help": { - "license": "Aggiungi una licenza al file per garantire alcune libertà al tuo pubblico." - }, - "label": { - "openBrowser": "Sfoglia…", - "channel": "Canale" - }, - "message": { - "dragAndDrop": "Trascina qui i file da caricare oppure apri Esplora file", - "pending": "Hai alcune bozze di upload in attesa di pubblicazione." - }, - "button": { - "edit": "Modifica", - "ignore": "Ignora", - "remove": "Rimuovi", - "resume": "Riprendi", - "retry": "Riprova" - }, - "header": { - "error": "Errore durante la pubblicazione" - }, - "status": { - "errored": "Errore", - "pending": "In sospeso", - "uploading": "Caricamento" - }, - "description": { - "extensions": "Estensioni supportate: { extensions }" - }, - "warning": { - "quota": "Non hai più spazio disponibile per caricare i tuoi file. Per piacere contatta i moderatori." - } - }, - "AlbumModal": { - "button": { - "cancel": "Annulla", - "create": "Crea" - }, - "header": { - "newAlbum": "Nuovo album", - "newSeries": "Nuova serie" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descrizione", - "position": "Posizione", - "tags": "Etichette", - "title": "Titolo", - "image": "Immagine Traccia" - } - }, - "AlbumForm": { - "header": { - "error": "Errore durante la creazione" - }, - "label": { - "albumTitle": "Titolo" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Iscriviti", - "unsubscribe": "Disiscriviti" - }, - "help": { - "auth": "Per iscriverti a questo canale devi prima fare l'accesso" - } - } + "title": "Informazioni su" }, "AboutPod": { - "stat": { - "hoursOfMusic": "{ n } ora di musica | { n } ore di musica", - "activeUsers": "{ n } utente attivo | { n } utenti attivi", - "albumsCount": "Album | Album", - "artistsCount": "Artista | Artisti", - "listeningsCount": "ascolti | ascolti", - "tracksCount": "traccia | tracce" + "feature": { + "allowList": "Lista dei consentiti", + "anonymousAccess": "Accesso anonimo", + "federation": "Federazione", + "quota": "Quota di upload", + "registrations": "Iscrizioni", + "status": { + "closed": "Chiuso", + "disabled": "Disabilitato", + "enabled": "Abilitato", + "open": "Aperto" + }, + "version": "Versione Funkwhale" + }, + "header": { + "about": "A proposito di questa istanza", + "contact": "Contatta", + "features": "Funzionalità", + "rules": "Regole", + "statistics": "Statistiche", + "terms": "Termini e regole sulla privacy" }, - "title": "Informazioni su", "link": { "about": "A proposito di questa istanza", "features": "Funzionalità", @@ -1438,27 +63,8 @@ "statistics": "Statistiche", "terms": "Termini e regole sulla privacy" }, - "header": { - "about": "A proposito di questa istanza", - "contact": "Contatta", - "features": "Funzionalità", - "rules": "Regole", - "statistics": "Statistiche", - "terms": "Termini e regole sulla privacy" - }, - "feature": { - "allowList": "Lista dei consentiti", - "anonymousAccess": "Accesso anonimo", - "status": { - "closed": "Chiuso", - "disabled": "Disabilitato", - "enabled": "Abilitato", - "open": "Aperto" - }, - "federation": "Federazione", - "version": "Versione Funkwhale", - "registrations": "Iscrizioni", - "quota": "Quota di upload" + "message": { + "contact": "Scrivici un'email: {'{{'} contactEmail {'}}'}" }, "notApplicable": "N/D", "placeholder": { @@ -1466,332 +72,231 @@ "noRules": "Nessuna regola disponibile.", "noTerms": "Nessun termine disponibile." }, + "stat": { + "activeUsers": "{ n } utente attivo | { n } utenti attivi", + "albumsCount": "Album | Album", + "artistsCount": "Artista | Artisti", + "hoursOfMusic": "{ n } ora di musica | { n } ore di musica", + "listeningsCount": "ascolti | ascolti", + "tracksCount": "traccia | tracce" + }, + "title": "Informazioni su" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Su questo pod gira Funkwhale, un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", + "paragraph2": "Funkwhale è gratuito e sviluppato da un'amichevole comunità di volontari." + }, + "quota": "Gli utenti su questa istanza ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!", + "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!" + }, + "header": { + "about": "A proposito di questa istanza Funkwhale", + "aboutFunkwhale": "A proposito di Funkwhale", + "contact": "Contatta", + "links": "Link utili", + "login": "Accedi", + "newAlbums": "Album aggiunti di recente", + "newChannels": "Nuovi canali", + "signup": "Registrati", + "statistics": "Statistiche", + "welcome": "Benvenuto a { podName }!" + }, + "help": { + "registrationsClosed": "Le iscrizioni sono chiuse su questa istanza. Puoi registrarti su un'altra istanza usando il link sottostante." + }, + "link": { + "findOtherPod": "Trova un'altra istanza", + "funkwhale": "Visita funkwhale.audio", + "learnMore": "Scopri di più", + "mobileApps": { + "description": "Usa Funkwhale su altri dispositivi con le nostre app", + "label": "App mobile" + }, + "publicContent": { + "description": "Ascolta album e playlist pubbliche condivise su questa istanza", + "label": "Naviga tra i contenuti pubblici" + }, + "rules": "Regole del server", + "userGuides": { + "description": "Scopri tutto quello che devi sapere su Funkwhale e le sue funzionalità", + "label": "Manuali utente" + }, + "viewMore": "Visualizza altri…" + }, + "placeholder": { + "noDescription": "Nessuna descrizione disponibile." + }, + "stat": { + "activeUsers": "{ n } utente attivo | { n } utenti attivi", + "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" + }, + "title": "Pagina Iniziale" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Pagina non trovata!" + }, + "link": { + "home": "Vai alla pagina iniziale" + }, "message": { - "contact": "Scrivici un'email: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Ci dispiace, la pagina che hai richiesto non esiste:" + }, + "title": "Pagina Non Trovata" + }, + "Queue": { + "button": { + "clear": "Svuota", + "close": "Chiudi", + "stopRadio": "Ferma radio" + }, + "header": { + "failure": "La traccia non può essere caricata", + "noSources": "La traccia non ha sorgenti disponibili.", + "radio": "Hai una radio in riproduzione" + }, + "label": { + "addArtistContentFilter": "Nascondi contenuti di questo artista…", + "duration": "Durata", + "enterFullscreen": "Entra la modalità a schermo intero", + "exitFullscreen": "Esci dalla modalità a schermo intero", + "favorite": "Traccia preferita", + "next": "Prossima traccia", + "pause": "Pausa", + "play": "Riproduci", + "populatingRadio": "Recupero traccia radio…", + "previous": "Traccia precedente", + "queue": "Coda", + "remove": "Rimuovi", + "restart": "Riavvia traccia", + "selectTrack": "Seleziona traccia", + "showCoverArt": "Mostra Copertina" + }, + "message": { + "automaticPlay": "La traccia seguente verrà riprodotta automaticamente tra pochi secondi…", + "radio": "Le nuove tracce saranno allegate qui automaticamente.", + "webglUnsupported": "Il tuo browser non sembra supportare WebGL2." + }, + "meta": { + "end": "Fine", + "queuePosition": "Traccia { index } su { length }", + "startTime": "00:00", + "unknownAlbum": "Album Sconosciuto", + "unknownArtist": "Artista Sconosciuto" + }, + "warning": { + "connectivity": "Potresti avere un problema di connettività." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } su { total } selezionato | { n } su { total } selezionati", - "allSelected": "Tutto, { n } elemento, selezionato | Tutti gli { n } elementi selezionati", - "go": "Vai", - "launch": "Inizia", - "refresh": "Aggiorna tabella dei contenuti", - "select": "Seleziona", - "selectAll": "Seleziona tutti gli elementi", - "selectElement": "Seleziona un elemento | Seleziona tutti e { n } gli elementi", - "selectCurrentPage": "Seleziona solo la pagina attuale" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverso", + "rss": "RSS", + "search": "Cerca" + }, + "description": { + "fediverse": "Usa questo modulo per recuperare un oggetto ospitato da qualche altra parte nel Fediverso.", + "rss": "Usa questo modulo per iscriverti a un feed RSS dall'URL relativo." + }, + "error": { + "fetchFailed": "Questo oggetto non può essere recuperato" + }, + "header": { + "fetchFailed": "Errore durante il recupero dell'oggetto" + }, + "label": { + "fediverse": { + "fieldLabel": "Fediverso", + "fieldPlaceholder": "{'@'}username{'@'}esempio.com", + "title": "Iscriviti ad un podcast condiviso sul Fediverso" }, - "message": { - "success": "L'azione { action } è stata lanciata con successo su { n } elemento | L'azione { action } è stata lanciata con successo su { n } elementi", - "needsRefresh": "Il contenuto è stato aggiornato, clicca aggiorna per visualizzare il contenuto aggiornato" - }, - "label": { - "actions": "Azioni", - "performAction": "Esegui azioni" - }, - "modal": { - "performAction": { - "header": "Vuoi eseguire { action } su { n } elemento? | Vuoi eseguire { action } su { n } elementi?", - "content": { - "warning": "Questo può coinvolgere molti elementi o avere conseguenze irreversibili, per favore ricontrolla se è proprio quello che vuoi." - } - } - }, - "header": { - "error": "Errore durante l'esecuzione dell'azione" + "rss": { + "fieldLabel": "Indirizzo del feed RSS", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Iscriviti al feed RSS di un podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "Informazioni", - "chat": "Chat", - "docs": "Documentazione", - "forum": "Forum", - "support": "Aiuto", - "git": "Elenco problemi", - "login": "Accedi", - "logout": "Disconnetti", - "notifications": "Notifiche", - "profile": "Profilo", - "settings": "Impostazioni", - "signup": "Registrati" - }, - "label": { - "shortcuts": "Scorciatoie da tastiera", - "language": "Lingua", - "theme": "Tema" - } - }, - "UserModal": { - "link": { - "about": "Informazioni", - "chat": "Chat", - "forum": "Forum", - "support": "Aiuto", - "git": "Elenco problemi", - "login": "Accedi", - "logout": "Disconnetti", - "notifications": "Notifiche", - "profile": "Profilo", - "settings": "Impostazioni", - "signup": "Registrati" - }, - "label": { - "shortcuts": "Scorciatoie da tastiera", - "language": "Lingua", - "theme": "Tema" - }, - "header": { - "options": "Opzioni" - }, - "button": { - "switchInstance": "Usa un'altra istanza" - } - }, - "DangerousButton": { - "button": { - "cancel": "Annulla", - "confirm": "Conferma" - }, - "header": { - "confirm": "Vuoi confermare questa azione?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Annulla", - "edit": "Modifica", - "less": "Mostra meno", - "more": "Mostra altri", - "update": "Aggiorna descrizione" - }, - "header": { - "failure": "Errore durante l'aggiornamento della descrizione" - }, - "empty": { - "noDescription": "Nessuna descrizione disponibile" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Pulisci" - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Riduci", - "expand": "Espandi" - } - }, - "CopyInput": { - "button": { - "copy": "Copia" - }, - "message": { - "success": "Testo copiato negli appunti!" - } - }, - "LoginModal": { - "link": { - "login": "Accedi", - "signup": "Registrati" - }, - "header": { - "unauthenticated": "Non autenticato" - }, - "description": { - "noAccess": "Non hai i permessi di accesso!" - } - }, - "ContentForm": { - "help": { - "markdown": "La sintassi Markdown è supportata." - }, - "empty": { - "noContent": "Nulla da visualizzare." - }, - "button": { - "preview": "Anteprima", - "write": "Scrivi" - }, - "placeholder": { - "input": "Scrivi alcune parole qui…" - } - }, - "EmptyState": { - "header": { - "noResults": "Nessun risultato trovato." - }, - "button": { - "refresh": "Aggiorna" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG o JPG. Le dimensioni devono essere tra 1400x1400px e 3000x3000px. La dimensione massima consentita per il file è 5MB." - }, - "button": { - "remove": "Rimuovi" - }, - "label": { - "upload": "Carica Nuova Immagine…" - }, - "loader": { - "uploading": "Caricamento file…" - }, - "header": { - "failure": "Il tuo allegato non può essere salvato" - } - }, - "ExpandableDiv": { - "button": { - "less": "Mostra meno", - "more": "Mostra altri" - } + "warning": { + "unsupported": "Questo tipo di oggetto non è ancora supportato" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - } + "SetInstanceModal": { + "button": { + "cancel": "Annulla", + "submit": "Invia" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } è già nella { 1 }." - }, - "button": { - "addDuplicate": "Aggiungi comunque", - "addToPlaylist": "Aggiungi a questa playlist", - "addTrack": "Aggiungi traccia", - "cancel": "Annulla", - "edit": "Modifica" - }, - "header": { - "addToPlaylist": "Aggiungi alla playlist", - "available": "Playlist disponibili", - "manage": "Gestisci playlist", - "noResults": "Nessun risultato che corrisponde al tuo filtro", - "addFailure": "La traccia non può essere aggiunta alla lista di riproduzione" - }, - "table": { - "edit": { - "header": { - "edit": "Modifica", - "lastModification": "Ultima modifica", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "placeholder": { - "filterPlaylist": "Inserisci il nome della playlist" - }, - "label": { - "filter": "Filtra" - }, - "empty": { - "noPlaylists": "Non sono ancora state create playlist" - } + "header": { + "chooseInstance": "Scegli la tua istanza", + "failure": "Non è possibile connettersi all'URL dato", + "suggestions": "Scelte suggerite" }, - "Editor": { - "button": { - "addDuplicate": "Aggiungi comunque", - "clear": "Pulisci playlist", - "copy": "Copia la coda corrente in questa playlist", - "insertFromQueue": "Inserisci dalla coda ({ n } traccia) | Inserisci dalla coda ({ n } tracce)" - }, - "error": { - "sync": "Si è verificato un errore durante il salvataggio delle modifiche" - }, - "message": { - "sync": "Modifiche sincronizzate con il server" - }, - "modal": { - "clearPlaylist": { - "header": "Vuoi pulire la playlist \"{ playlist }\"?", - "content": { - "warning": "Questo cancellerà tutte le tracce da questa lista di riproduzione e non può essere annullato." - } - } - }, - "help": { - "reorder": "Trascina e rilascia righe per riordinare le tracce nella playlist" - }, - "header": { - "editor": "Modifica lista di riproduzione" - }, - "warning": { - "duplicate": "Alcune tracce nella tua coda sono già presenti in questo elenco di riproduzione:" - }, - "loading": { - "sync": "Sincronizzando le modifiche con il server…" - } + "help": { + "notFunkwhaleServer": "L'indirizzo fornito non è quello di un server Funkwhale", + "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti.", + "serverDown": "Il server potrebbe essere caduto" }, - "TrackPlaylistIcon": { - "button": { - "add": "Aggiungi alla playlist…" - } + "label": { + "url": "URL dell'istanza" }, - "Form": { - "header": { - "createPlaylist": "Crea una nuova lista di riproduzione", - "createSuccess": "Lista di riproduzione creata", - "updateSuccess": "Lista di riproduzione aggiornata", - "createFailure": "La lista di riproduzione non può essere creata" - }, - "button": { - "create": "Crea playlist", - "update": "Aggiorna lista di riproduzione" - }, - "placeholder": { - "name": "La mia eccezionale playlist" - }, - "label": { - "name": "Nome lista di riproduzione", - "visibility": "Visibilità lista di riproduzione" - } - }, - "Widget": { - "button": { - "create": "Crea Playlist", - "more": "Mostra altri" - }, - "placeholder": { - "noPlaylists": "Non sono ancora state create playlist" - } + "message": { + "currentConnection": "Attualmente sei connesso a { 0 }. Se continui, sarai disconnesso dalla tua istanza corrente e tutti i tuoi dati locali saranno eliminati.", + "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } ha accettato la tua richiesta di seguire la libreria \"{ library }\"", - "libraryFollow": "{ username } segue la tua libreria \"{ library }\"", - "libraryPendingFollow": "{ username } vuole seguire la tua libreria \"{ library }\"" + "ShortcutsModal": { + "button": { + "close": "Chiudi" + }, + "header": { + "modal": "Scorciatoie da tastiera" + }, + "shortcut": { + "audio": { + "clearQueue": "Svuota la coda", + "decreaseVolume": "Diminuisci volume", + "expandQueue": "Espandi coda/visualizzazione player", + "increaseVolume": "Aumenta volume", + "label": "Scorciatoie del lettore audio", + "playNext": "Riproduci traccia successiva", + "playPause": "Pausa/riproduci la traccia corrente", + "playPrevious": "Riproduci traccia precedente", + "seekBack30": "Salta indietro 30s", + "seekBack5": "Salta indietro 5s", + "seekForward30": "Salta avanti 30s", + "seekForward5": "Salta avanti 5s", + "shuffleQueue": "Mischia la tua coda", + "toggleFavorite": "Inverti preferito", + "toggleLoop": "Cambia tipo di riproduzione della coda", + "toggleMute": "Cambia muto" }, - "button": { - "approve": "Approva", - "markRead": "Segna come letta", - "markUnread": "Segna come non letta", - "reject": "Rifiuta" + "general": { + "focus": "Metti in primo piano la barra di ricerca", + "label": "Scorciatoie generali", + "show": "Mostra scorciatoie da tastiera disponibili", + "unfocus": "Togli il primo piano dalla barra di ricerca" } } }, "Sidebar": { + "header": { + "administration": "Amministrazione", + "explore": "Esplora", + "library": "La Mia Libreria", + "main": "Navigazione principale", + "more": "Altri" + }, + "label": { + "add": "Aggiungi contenuto", + "administration": "Amministrazione", + "edits": "Revisioni delle modifiche in sospeso", + "follows": "Richiesta di seguire in sospeso", + "language": "Lingua", + "main": "Menu principale", + "play": "Riproduci questa traccia", + "theme": "Tema" + }, "link": { "about": "A proposito di questa istanza", "albums": "Albums", @@ -1809,44 +314,1976 @@ "radios": "Radio", "search": "Cerca", "settings": "Impostazioni", + "switchInstance": "Cambia istanza", "users": "Utenti" - }, - "label": { - "add": "Aggiungi contenuto", - "administration": "Amministrazione", - "language": "Lingua", - "main": "Menu principale", - "follows": "Richiesta di seguire in sospeso", - "edits": "Revisioni delle modifiche in sospeso", - "play": "Riproduci questa traccia", - "theme": "Tema" - }, - "header": { - "administration": "Amministrazione", - "explore": "Esplora", - "main": "Navigazione principale", - "more": "Altri", - "library": "La Mia Libreria" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Salva" + }, + "header": { + "error": "Errore durante il salvataggio delle impostazioni", + "image": "Immagine attuale" + }, + "message": { + "success": "Impostazioni aggiornate con successo." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Aggiungi campo", + "edit": "Modifica modulo", + "preview": "Anteprima modulo" + }, + "help": { + "additionalFields": "Campi aggiuntivi da visualizzare nel modulo. Visualizzati solo se la convalida manuale delle iscrizioni è attiva.", + "helpText": "Testo opzionale da visualizzare all'inizio del modulo di iscrizione." + }, + "label": { + "additionalField": "Campo aggiuntivo", + "additionalFields": "Campi aggiuntivi", + "delete": "Elimina", + "helpText": "Suggerimento", + "moveDown": "Sposta giù", + "moveUp": "Sposta su" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Azioni", + "label": "Etichetta campo", + "required": "Richiesto", + "type": "Tipo campo" + }, + "required": { + "false": "No", + "true": "Si" + }, + "type": { + "long": "Testo lungo", + "short": "Testo breve" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Aggiornato il { date }" + }, + "ChannelEntries": { + "help": { + "subscribe": "Potresti aver bisogno di seguire questo canale per vedere il suo contenuto." + } + }, + "ChannelForm": { + "header": { + "error": "Errore durante il salvataggio del canale" + }, + "help": { + "discography": "Pubblica la musica che fai come una bella discografia di album e singoli.", + "podcast": "Carica i tuoi episodi e tieni aggiornata la tua community.", + "podcastFields": "Utilizzato per itunes:email e itunes:name field richiesto da alcune piattaforme come Spotify o iTunes.", + "username": "Utilizzato negli URL e per seguire questo canale nel Fediverso. Non può essere cambiato una volta impostato." + }, + "label": { + "category": "Categoria", + "description": "Descrizione", + "discography": "Discografia dell'artista", + "email": "Indirizzo email del proprietario", + "image": "Immagine del canale", + "language": "Lingua", + "name": "Nome", + "owner": "Nome proprietario", + "podcast": "Podcast", + "subcategory": "Sottocategoria", + "tags": "Tag", + "username": "Fediverso" + }, + "legend": { + "purpose": "Per cosa sarà utilizzato questo canale?" + }, + "loader": { + "loading": "Caricamento" + }, + "placeholder": { + "name": "Nome del canale fantastico", + "username": "nomecanalefantastico" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodi" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Mostra altri" + }, + "help": { + "subscribe": "Potresti aver bisogno di seguire questo canale per vedere i suoi contenuti." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Mostra altri" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copia" + }, + "header": { + "preview": "Anteprima" + }, + "help": { + "anonymous": "Contatta i tuoi amministratori e chiedigli di cambiare l'impostazione corrispondente.", + "embed": "Copia/incolla questo codice nel tuo sito HTML", + "width": "Lascia vuoto per un widget adattivo" + }, + "label": { + "embed": "Incorpora codice", + "height": "Altezza del widget", + "width": "Larghezza del widget" + }, + "message": { + "copy": "Testo copiato negli appunti!" + }, + "warning": { + "anonymous": "La condivisione non funzionerà perchè questa istanza non permette agli utenti anonimi di accedere al contenuto." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Annulla richiesta di follow", + "follow": "Segui", + "unfollow": "Smetti di seguire" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Aggiungi alla playlist…", + "addToQueue": "Aggiungi alla coda attuale", + "discretePlay": "Riproduci", + "episodeDetails": "Dettagli dell'episodio", + "hideArtist": "Nascondi contenuti di questo artista", + "playAlbum": "Riproduci album", + "playArtist": "Riproduci artista", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "playPlaylist": "Riproduci playlist", + "playTrack": "Riproduci traccia", + "playTracks": "Riproduci tracce", + "report": "Segnala…", + "startRadio": "Riproduci canzoni simili", + "trackDetails": "Dettagli sulla traccia" + }, + "title": { + "more": "Di più…", + "unavailable": "Questa traccia non è disponibile in nessuna libreria alla quale hai accesso" + } + }, + "Player": { + "header": { + "player": "Player audio e controlli" + }, + "label": { + "addArtistContentFilter": "Nascondi contenuti di questo artista…", + "audioPlayer": "Riproduttore musicale", + "clearQueue": "Pulisci la tua coda", + "expandQueue": "Espandi coda", + "loopingDisabled": "Ripetizione disattivata. Clicca per attivare la ripetizione della singola traccia.", + "loopingSingle": "Ripeti una singola traccia. Clicca per ripetere l'intera coda.", + "loopingWholeQueue": "Ripete l'intera coda. Clicca per disattivare la ripetizione.", + "mute": "Muto", + "nextTrack": "Prossima traccia", + "pause": "Pausa", + "play": "Riproduci", + "previousTrack": "Traccia precedente", + "shuffleQueue": "Mischia la tua coda", + "unmute": "Non silenziare" + }, + "meta": { + "position": "{ index } su { length }", + "unknownAlbum": "Album Sconosciuto", + "unknownArtist": "Artista Sconosciuto" + } + }, + "PlayerControls": { + "labels": { + "next": "Prossima traccia", + "pause": "Pausa", + "previous": "Traccia precedente" + } + }, + "Search": { + "empty": { + "noAlbums": "Nessun album corrisponde alla tua ricerca", + "noArtists": "Nessun artista corrisponde alla tua ricerca" + }, + "header": { + "albums": "Albums", + "artists": "Artisti", + "search": "Cerca un po' di musica" + }, + "placeholder": { + "search": "Artista, album, traccia…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Spiacente, questa ricerca non ha restituito risultati" + }, + "header": { + "noResults": "Nessun risultato trovato" + }, + "label": { + "album": "Album", + "artist": "Artista", + "category": { + "federation": "Federazione", + "podcasts": "Podcast" + }, + "search": "Ricerca contenuti", + "tag": "Etichetta", + "track": "Traccia" + }, + "link": { + "fediverse": "Cerca sul fediverso", + "more": "Altri risultati 🡒", + "rss": "Iscriviti al podcast tramite RSS" + }, + "placeholder": { + "search": "Cerca per artisti, album, tracce…" + } + }, + "VolumeControl": { + "button": { + "mute": "Muto", + "unmute": "Non silenziare" + }, + "label": { + "slider": "Regola volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostra le azioni per la traccia" + } + }, + "Modal": { + "button": { + "addToFavorites": "Aggiungi ai preferiti", + "addToPlaylist": "Aggiungi alla playlist…", + "addToQueue": "Aggiungi alla coda", + "albumDetails": "Vedi album", + "artistDetails": "Vedi artisti", + "channelDetails": "Vedi canali", + "episodeDetails": "Dettagli dell'episodio", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "removeFromFavorites": "Rimuovi dai preferiti", + "seriesDetails": "Vedi serie", + "startRadio": "Riproduci radio", + "trackDetails": "Dettagli sulla traccia" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostra le azioni per la traccia" + } + }, + "Modal": { + "button": { + "addToFavorites": "Aggiungi ai preferiti", + "addToPlaylist": "Aggiungi alla playlist…", + "addToQueue": "Aggiungi alla coda", + "albumDetails": "Vedi album", + "artistDetails": "Vedi artisti", + "channelDetails": "Vedi canali", + "episodeDetails": "Dettagli dell'episodio", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "removeFromFavorites": "Rimuovi dai preferiti", + "seriesDetails": "Vedi serie", + "startRadio": "Riproduci radio", + "trackDetails": "Dettagli sulla traccia" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artista", + "title": "Titolo" + } + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + }, + "empty": { + "noResults": "Nessun risultato" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Rigenera token" + }, + "header": { + "appDetails": "Dettagli dell'applicazione", + "appSecretWarning": "Conserva una copia di questo token in un luogo sicuro.", + "editApp": "Modifica applicazione" + }, + "help": { + "appDetails": "L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono essere trattati come password. Non condividerli con nessun altro." + }, + "label": { + "accessToken": "Token di accesso", + "appId": "ID Applicazione", + "appSecret": "Secret dell'applicazione" + }, + "link": { + "settings": "Torna alle impostazioni" + }, + "message": { + "appSecretWarning": "Non ti sarà possibile vederlo di nuovo una volta lasciata questa schermata." + }, + "title": "Modifica applicazione" + }, + "ApplicationForm": { + "button": { + "create": "Crea applicazione", + "update": "Aggiorna applicazione" + }, + "header": { + "failure": "Non è stato possibile salvare le tue modifiche" + }, + "help": { + "redirectUri": "Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua applicazione non è servita sul web." + }, + "label": { + "name": "Nome", + "redirectUri": "URI di redirezione", + "scopes": { + "description": "Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori.", + "read": { + "description": "Accesso in sola lettura ai dati utente", + "label": "Lettura" + }, + "write": { + "description": "Accesso in sola-scrittura ai dati utente", + "label": "Scrivi" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Torna alle impostazioni" + }, + "title": "Crea una nuova applicazione" + }, + "Authorize": { + "button": { + "authorize": "Autorizza { app }" + }, + "header": { + "access": "{ app } vuole accedere al tuo account Funkwhale", + "allScopes": "Accesso completo", + "authorize": "Autorizza app di terze parti", + "authorizeFailure": "Errore durante l'autorizzazione dell'applicazione", + "fetchFailure": "Errore durante il recupero dei dati dell'applicazione", + "readOnly": "Sola lettura", + "writeOnly": "Sola-scrittura" + }, + "help": { + "copyCode": "Ti sarà mostrato un codice da copiare-incollare nell'applicazione.", + "pasteCode": "Copia-incolla il codice seguente in questa applicazione:", + "redirect": "Sarai reindirizzato su { 0 }" + }, + "message": { + "unknownPermissions": "L'applicazione sta anche richiedendo i seguenti permessi sconosciuti:" + }, + "title": "Permetti applicazione" + }, + "LoginForm": { + "button": { + "login": "Accedi" + }, + "header": { + "loginFailure": "Non riusciamo a farti accedere" + }, + "help": { + "approvalRequired": "Se ti sei registrato di recente potresti dover aspettare che il nostro team di moderazione controlli il tuo account o verificare la tua email.", + "invalidCredentials": "Per favore, controlla che la combinazione username/password sia corretta e assicurati di aver verificato il tuo indirizzo email." + }, + "label": { + "password": "Password", + "username": "Nome utente o indirizzo email" + }, + "link": { + "createAccount": "Crea un account", + "resetPassword": "Resetta la tua password" + }, + "message": { + "redirect": "Verrai rediretto su {domain} per autenticarti" + }, + "placeholder": { + "username": "Inserisci il tuo nome utente o indirizzo email" + } + }, + "Logout": { + "button": { + "logout": "Si, disconnettimi!" + }, + "header": { + "confirm": "Sei sicuro di volerti disconnettere?", + "unauthenticated": "Non hai ancora effettuato l'accesso" + }, + "link": { + "login": "Accedi!" + }, + "message": { + "loggedIn": "Sei attualmente connesso come { username }" + }, + "title": "Disconnetti" + }, + "Plugin": { + "button": { + "save": "Salva", + "scan": "Scansiona" + }, + "description": { + "library": "Libreria dove i file dovrebbero essere importati." + }, + "header": { + "failure": "Errore durante il salvataggio del plugin" + }, + "label": { + "library": "Libreria", + "pluginEnabled": "Abilitato" + }, + "link": { + "documentation": "Documentazione" + } + }, + "Settings": { + "button": { + "delete": "Elimina", + "deleteAccount": "Elimina il mio account…", + "deleteAccountConfirm": "Elimina il mio account", + "disableSubsonic": "Disabilita accesso", + "edit": "Modifica", + "password": "Cambia password", + "refresh": "Aggiorna", + "remove": "Rimuovi", + "removeApp": "Rimuovi applicazione", + "revoke": "Revoca", + "revokeAccess": "Revoca accesso", + "update": "Aggiorna", + "updateSettings": "Aggiorna impostazioni" + }, + "description": { + "authorizedApps": "Questa è la lista di applicazioni che hanno accesso ai dati del tuo account.", + "changeEmail": "Cambia l'indirizzo email associato al tuo account. Ti invieremo una conferma al nuovo indirizzo.", + "changePassword": { + "paragraph1": "Cambiando la tua password cambierà anche la password della API Subsonic se ne hai richiesta una.", + "paragraph2": "Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa password." + }, + "contentFilters": "I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su questo servizio.", + "deleteAccount": "Puoi eliminare permanentemente e irreversibilmente il tuo account e tutti i dati ad esso associati tramite il modulo qui sotto. Ti verrà richiesta una conferma.", + "plugins": "Usa i plugin per estendere Funkwhale ed ottenere funzionalità aggiuntive.", + "yourApps": "Questa è la lista di applicazioni che hai registrato." + }, + "header": { + "accountFailure": "Non possiamo eliminare il tuo account", + "accountSettings": "Impostazioni dell'account", + "authorizedApps": "App autorizzate", + "avatar": "Avatar", + "avatarFailure": "La tua immagine di profilo non può essere salvata", + "changeEmail": "Cambia il mio indirizzo email", + "changePassword": "Cambia la mia password", + "contentFilters": "Filtri di contenuto", + "deleteAccount": "Elimina il mio account", + "emailFailure": "Non possiamo cambiare il tuo indirizzo email", + "hiddenArtists": "Artisti nascosti", + "noApps": "Non hai nessuna applicazione connessa al tuo account.", + "noPersonalApps": "Non hai ancora registrato nessuna applicazione.", + "passwordFailure": "La tua password non può essere cambiata", + "plugins": "Plugin", + "settingsUpdated": "Impostazioni aggiornate", + "updateFailure": "Le tue impostazioni non possono essere aggiornate", + "yourApps": "Le tue applicazioni" + }, + "help": { + "changePassword": "Per favore controlla se la tua password è corretta", + "noApps": "Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste applicazioni verranno elencate qui.", + "noPersonalApps": "Creane una per integrare Funkwhale con applicazioni di terze parti." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Password corrente", + "newEmail": "Nuovo indirizzo email", + "newPassword": "Nuova password", + "password": "Password" + }, + "link": { + "managePlugins": "Gestisci i plugin", + "newApp": "Registra una nuova applicazione" + }, + "message": { + "confirmDelete": "La tua richiesta di eliminazione è stata inviata, il tuo account e il suo contenuto saranno eliminati a breve", + "currentEmail": "Il tuo indirizzo email corrente è { email }." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Sarai disconnesso da questa sessione e dovrai accedere con una nuova", + "subsonic": "La tua password Subsonic sarà cambiata con una nuova e casuale, e sarai disconnesso dai dispositivi che utilizzano ancora la vecchia password Subsonic", + "warning": "Cambiare la tua password avrà queste conseguenze:" + }, + "header": "Cambiare la tua password?" + }, + "deleteAccount": { + "content": { + "warning": "Questo è irreversibile e rimuoverà permanentemente i tuoi dati dai nostri server. Sarai immediatamente disconnesso." + }, + "header": "Vuoi eliminare il tuo account?" + }, + "deleteApp": { + "content": { + "warning": "Questo cancellerà permanentemente l'applicazione e tutti i token associati." + }, + "header": "Rimuovere l'applicazione \"{ application }\"?" + }, + "revokeApp": { + "content": { + "warning": "Questo eviterà a questa applicazione di accedere al servizio a tuo nome." + }, + "header": "Revoca accesso per l'applicazione \"{ application }\"?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data di creazione", + "name": "Nome" + } + }, + "authorizedApps": { + "header": { + "application": "Applicazione", + "permissions": "Permessi" + } + }, + "yourApps": { + "header": { + "application": "Applicazione", + "creationDate": "Data di creazione", + "scopes": "Visibilità" + } + } + }, + "title": "Impostazioni dell'account", + "warning": { + "deleteAccount": "Il tuo account sarà eliminato dai nostri servers in pochi minuti. Notificheremo anche gli altri server che potrebbero avere una copia di alcuni dei tuoi dati in modo che possano procedere all'eliminazione. Nota però che alcuni di questi server potrebbero essere offline o potrebbero rifiutarsi di procedere." + } + }, + "SignupForm": { + "button": { + "create": "Crea il mio account" + }, + "header": { + "login": "Accedi al tuo account Funkwhale", + "signupFailure": "Il tuo account non può essere creato." + }, + "label": { + "email": "Indirizzo email", + "invitation": "Codice d'invito", + "password": "Password", + "username": "Nome utente" + }, + "message": { + "accountCreated": "Il tuo account è stato creato con successo. Verifica la tua email prima di fare il login.", + "awaitingReview": "La richiesta di registrazione è stata inviata con successo. Sarai notificato tramite email quando il nostro team di moderazione avrà verificato la tua richiesta.", + "registrationClosed": "Le registrazioni sono chiuse su questa istanza, è necessario un codice d'invito per registrarsi.", + "requiresReview": "Le iscrizioni su questa istanza sono aperte, ma sono revisionate dai moderatori prima di essere approvate." + }, + "placeholder": { + "email": "Inserisci il tuo indirizzo email", + "invitation": "Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)", + "username": "Inserisci il tuo nome utente" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Disabilita accesso", + "confirmNewPassword": "Richiedi una password", + "disable": "Disabilita accesso Subsonic", + "newPassword": "Richiedi una nuova password" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale è compatibile con altri lettori musicali che supportano le Subsonic API.", + "paragraph2": "Puoi usarli per ascoltare le tue playlist e musica anche quando non collegato, dal tuo cellulare o tablet, per esempio.", + "paragraph3": "Tuttavia, accedere a Funkwhale da quelle applicazioni richiede un'altra password che puoi impostare qui sotto." + } + }, + "header": { + "error": "Errore", + "subsonic": "Password API Subsonic" + }, + "label": { + "subsonicField": "La tua password per le API subsonic" + }, + "link": { + "apps": "Scopri come utilizzare Funkwhale attraverso altre app" + }, + "message": { + "accessDisabled": "Accesso disabilitato", + "passwordUpdated": "Password aggiornata", + "unavailable": "L'API Subsonic non è disponibile su questa istanza Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Questo disabiliterà completamente l'accesso alla API Subsonic dagli account." + }, + "header": "Disabilitare l'accesso alle API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "Questo ti disconnetterà dai dispositivi esistenti che utilizzano la password attuale." + }, + "header": "Richiedere una nuova password API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Errore durante la creazione" + }, + "label": { + "albumTitle": "Titolo" + } + }, + "AlbumModal": { + "button": { + "cancel": "Annulla", + "create": "Crea" + }, + "header": { + "newAlbum": "Nuovo album", + "newSeries": "Nuova serie" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Serie" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + }, + "option": { + "none": "Nessuno" + } + }, + "LicenseSelect": { + "label": { + "license": "Licenza" + }, + "link": { + "license": "A proposito di questa licenza" + }, + "option": { + "none": "Nessuno" + } + }, + "SubscribeButton": { + "help": { + "auth": "Per iscriverti a questo canale devi prima fare l'accesso" + }, + "title": { + "subscribe": "Iscriviti", + "unsubscribe": "Disiscriviti" + } + }, + "UploadForm": { + "button": { + "edit": "Modifica", + "ignore": "Ignora", + "remove": "Rimuovi", + "resume": "Riprendi", + "retry": "Riprova" + }, + "description": { + "extensions": "Estensioni supportate: { extensions }" + }, + "header": { + "error": "Errore durante la pubblicazione" + }, + "help": { + "license": "Aggiungi una licenza al file per garantire alcune libertà al tuo pubblico." + }, + "label": { + "channel": "Canale", + "openBrowser": "Sfoglia…" + }, + "message": { + "dragAndDrop": "Trascina qui i file da caricare oppure apri Esplora file", + "pending": "Hai alcune bozze di upload in attesa di pubblicazione." + }, + "status": { + "errored": "Errore", + "pending": "In sospeso", + "uploading": "Caricamento" + }, + "warning": { + "quota": "Non hai più spazio disponibile per caricare i tuoi file. Per piacere contatta i moderatori." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descrizione", + "image": "Immagine Traccia", + "position": "Posizione", + "tags": "Etichette", + "title": "Titolo" + } + }, + "UploadModal": { + "button": { + "cancel": "Annulla", + "close": "Chiudi", + "finishLater": "Finisci più tardi", + "next": "Prossimo passo", + "previous": "Passo precedente", + "publish": "Pubblica", + "update": "Aggiorna" + }, + "header": { + "processing": "Elaborazione file", + "publish": "Pubblica audio", + "uploadDetails": "Dettagli di caricamento", + "uploadFiles": "File da caricare" + }, + "meta": { + "files": "{ n } file | { n } file", + "quota": "Spazio di archiviazione rimanente:" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Tutto, { n } elemento, selezionato | Tutti gli { n } elementi selezionati", + "go": "Vai", + "launch": "Inizia", + "refresh": "Aggiorna tabella dei contenuti", + "select": "Seleziona", + "selectAll": "Seleziona tutti gli elementi", + "selectCurrentPage": "Seleziona solo la pagina attuale", + "selectElement": "Seleziona un elemento | Seleziona tutti e { n } gli elementi", + "selected": "{ n } su { total } selezionato | { n } su { total } selezionati" + }, + "header": { + "error": "Errore durante l'esecuzione dell'azione" + }, + "label": { + "actions": "Azioni", + "performAction": "Esegui azioni" + }, + "message": { + "needsRefresh": "Il contenuto è stato aggiornato, clicca aggiorna per visualizzare il contenuto aggiornato", + "success": "L'azione { action } è stata lanciata con successo su { n } elemento | L'azione { action } è stata lanciata con successo su { n } elementi" + }, + "modal": { + "performAction": { + "content": { + "warning": "Questo può coinvolgere molti elementi o avere conseguenze irreversibili, per favore ricontrolla se è proprio quello che vuoi." + }, + "header": "Vuoi eseguire { action } su { n } elemento? | Vuoi eseguire { action } su { n } elementi?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Rimuovi" + }, + "header": { + "failure": "Il tuo allegato non può essere salvato" + }, + "help": { + "upload": "PNG o JPG. Le dimensioni devono essere tra 1400x1400px e 3000x3000px. La dimensione massima consentita per il file è 5MB." + }, + "label": { + "upload": "Carica Nuova Immagine…" + }, + "loader": { + "uploading": "Caricamento file…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Riduci", + "expand": "Espandi" + } + }, + "ContentForm": { + "button": { + "preview": "Anteprima", + "write": "Scrivi" + }, + "empty": { + "noContent": "Nulla da visualizzare." + }, + "help": { + "markdown": "La sintassi Markdown è supportata." + }, + "placeholder": { + "input": "Scrivi alcune parole qui…" + } + }, + "CopyInput": { + "button": { + "copy": "Copia" + }, + "message": { + "success": "Testo copiato negli appunti!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Annulla", + "confirm": "Conferma" + }, + "header": { + "confirm": "Vuoi confermare questa azione?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } h { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Aggiorna" + }, + "header": { + "noResults": "Nessun risultato trovato." + } + }, + "ExpandableDiv": { + "button": { + "less": "Mostra meno", + "more": "Mostra altri" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Pulisci" + }, + "label": { + "search": "Cerca" + }, + "placeholder": { + "search": "Cerca…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Non hai i permessi di accesso!" + }, + "header": { + "unauthenticated": "Non autenticato" + }, + "link": { + "login": "Accedi", + "signup": "Registrati" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Annulla", + "edit": "Modifica", + "less": "Mostra meno", + "more": "Mostra altri", + "update": "Aggiorna descrizione" + }, + "empty": { + "noDescription": "Nessuna descrizione disponibile" + }, + "header": { + "failure": "Errore durante l'aggiornamento della descrizione" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Lingua", + "shortcuts": "Scorciatoie da tastiera", + "theme": "Tema" + }, + "link": { + "about": "Informazioni", + "chat": "Chat", + "docs": "Documentazione", + "forum": "Forum", + "git": "Elenco problemi", + "login": "Accedi", + "logout": "Disconnetti", + "notifications": "Notifiche", + "profile": "Profilo", + "settings": "Impostazioni", + "signup": "Registrati", + "support": "Aiuto" + } + }, + "UserModal": { + "button": { + "switchInstance": "Usa un'altra istanza" + }, + "header": { + "options": "Opzioni" + }, + "label": { + "language": "Lingua", + "shortcuts": "Scorciatoie da tastiera", + "theme": "Tema" + }, + "link": { + "about": "Informazioni", + "chat": "Chat", + "docs": "Documentazione", + "forum": "Forum", + "git": "Elenco problemi", + "login": "Accedi", + "logout": "Disconnetti", + "notifications": "Notifiche", + "profile": "Profilo", + "settings": "Impostazioni", + "signup": "Registrati", + "support": "Aiuto" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Non sono ancora state aggiunte tracce ai tuoi preferiti" + }, + "header": { + "favorites": "{ n } preferito | { n } preferiti" + }, + "link": { + "library": "Sfoglia libreria" + }, + "loader": { + "loading": "Caricando i tuoi preferiti…" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "title": "I Tuoi Preferiti" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Aggiungi ai preferiti", + "remove": "Rimuovi dai preferiti" + }, + "label": { + "inFavorites": "Nei preferiti" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Chiudi", + "reload": "Chiudi e ricarica pagina" + }, + "description": { + "failure": "Si è verificato un errore durante il tentativo di aggiornamento dei dati:", + "pending": "La richiesta di aggiornamento non è stata processata in tempo dal nostro server. Sarà processata più tardi.", + "skipped": "Il server remoto ha risposto, ma i dati ricevuti non sono supportati da Funkwhale.", + "success": "I dati sono stati aggiornati con successo dal server remoto." + }, + "header": { + "failure": "Errore di aggiornamento", + "pending": "Aggiornamento in sospeso", + "refresh": "Sto aggiornando l'oggetto dal server remoto…", + "saveFailure": "Errore durante il salvataggio delle impostazioni", + "skipped": "L'aggiornamento è stato rimandato", + "success": "Aggiornamento riuscito" + }, + "loader": { + "awaitingResult": "Aspettando i risultati…", + "fetchRequest": "Richiedendo un recupero…" + }, + "table": { + "error": { + "label": { + "detail": "Dettaglio dell'errore", + "type": "Tipo di errore" + }, + "value": { + "connectionError": "Impossibile connettersi al server remoto", + "httpError": "Si è verificato un errore HTTP durante il tentativo di contatto del server remoto", + "httpStatus": "Il server remoto ha risposto con il codice HTTP { status }", + "invalidAttributesError": "I dati riportati dal server remoto hanno attributi invalidi o mancanti", + "invalidJsonError": "Il server remoto ha risposto con dati JSON o JSON-LD non validi", + "timeoutError": "Il server remoto non ha risposto abbastanza velocemente", + "unknownError": "Errore sconosciuto" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Mostra altri" + }, + "empty": { + "noMatch": "Nessuna libreria corrispondente." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copia" + }, + "message": { + "copy": "Testo copiato negli appunti!" + }, + "title": "Mostra/nascondi password" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Aggiungi una descrizione…" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "Questo album è presente nelle seguenti librerie:" + }, + "header": { + "episodes": "Episodi", + "libraries": "Librerie dell'utente", + "tracks": "Tracce" + }, + "meta": { + "volume": "Volume { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Annulla", + "delete": "Elimina…", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di più…" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "musicbrainz": "Vedi su MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "L'album sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." + }, + "header": "Eliminare questo album?" + }, + "embed": { + "header": "Incorpora questo album nel tuo sito web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Modifica questo album", + "suggest": "Suggerisci una modifica su questo album" + }, + "message": { + "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." + } + }, + "Albums": { + "button": { + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato corrispondente alla tua ricerca" + }, + "header": { + "browse": "Sfogliando gli album" + }, + "label": { + "search": "Cerca", + "tags": "Etichette" + }, + "link": { + "addMusic": "Aggiungi musica" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Inserisci il titolo dell'album…" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Annulla", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di più…", + "play": "Riproduci tutti gli album" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "musicbrainz": "Vedi su MusicBrainz", + "wikipedia": "Cerca su Wikipedia" + }, + "meta": { + "albums": "{ n } album | { n } album", + "tracks": "{ n } traccia in | { n } tracce in" + }, + "modal": { + "embed": { + "header": "Incorpora il lavoro di questo artista nel tuo sito web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Rimuovi filtro", + "more": "Carica di più…" + }, + "description": { + "library": "Questo artista è presente nelle seguenti librerie:" + }, + "header": { + "album": "Album di questo artista", + "library": "Librerie dell'utente", + "track": "Nuove tracce di questo artista" + }, + "link": { + "filter": "Revisiona i miei filtri" + }, + "message": { + "filter": "Stai attualmente nascondendo i contenuti di questo artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Modifica questo artista", + "suggest": "Suggerisci una modifica su questo artista" + }, + "message": { + "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." + } + }, + "Artists": { + "button": { + "search": "Cerca", + "upload": "Aggiungi musica" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando artisti" + }, + "label": { + "excludeCompilation": "Escludi gli artisti della compilation", + "search": "Nome dell'artista", + "tags": "Etichette" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Cerca…" + }, + "title": "Artisti" + }, + "EditCard": { + "button": { + "approve": "Approva", + "delete": "Elimina", + "reject": "Rifiuta" + }, + "header": { + "modification": "Modifica { id }" + }, + "link": { + "track": "Traccia #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Il suggerimento sarà completamente rimosso, questa azione è irreversibile." + }, + "delete": { + "header": "Eliminare questo suggerimento?" + } + }, + "status": { + "applied": "Approvata ed applicata", + "approved": "Approvato", + "pending": "Revisione in sospeso", + "rejected": "Rifiutato" + }, + "table": { + "update": { + "header": { + "field": "Campo", + "newValue": "Nuovo valore", + "oldValue": "Vecchio valore" + }, + "notApplicable": "N/D" + } + } + }, + "EditForm": { + "button": { + "cancel": "Annulla", + "clear": "Svuota", + "new": "Invia un'altra modifica", + "reset": "Ripristina al valore iniziale", + "showAll": "Mostra tutte le modifiche", + "showUnreviewed": "Restringi alle modifiche non revisionate", + "submit": "Invia e applica modifica", + "suggest": "Invia suggerimento" + }, + "empty": { + "suggestEdit": "Suggerisci una modifica utilizzando il modulo qui sotto." + }, + "header": { + "failure": "Errore durante l'invio della modifica", + "recentEdits": "Modifiche recenti", + "success": "La tua modifica è stata inviata correttamente.", + "unreviewed": "Modifiche recenti in attesa di revisione" + }, + "label": { + "summary": "Riassunto (opzionale)" + }, + "message": { + "noPermission": "Non hai i permessi per modificare questo oggetto, ma puoi suggerire modifiche. Una volta inviati, i suggerimenti saranno revisionati prima dell'approvazione." + }, + "notApplicable": "N/D", + "placeholder": { + "summary": "Un breve riassunto che descrive le tue modifiche." + } + }, + "FileUpload": { + "button": { + "cancel": "Annulla", + "retry": "Riprova upload falliti" + }, + "description": { + "import": "Risultati della tua importazione:", + "previousImport": "Risultati della tua precedente importazione:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Errore durante l'avvio dell'importazione", + "local": "Importa musica dalla tua memoria locale", + "server": "Stato dell'importazione", + "status": "Stato dell'importazione" + }, + "label": { + "extensions": "Estensioni supportate: { extensions }", + "remainingSpace": "Spazio di archiviazione rimanente", + "uploadWidget": "Clicca per selezionare i file da caricare o trascina e rilascia file o cartelle" + }, + "link": { + "picard": "Ti consigliamo di utilizzare Picard per quello scopo.", + "processing": "Elaborazione", + "uploading": "Caricamento" + }, + "message": { + "local": { + "copyright": "Non stai caricando contenuti protetti da diritti d'autore in una libreria pubblica, altrimenti potresti infrangere la legge", + "format": "I file musicali che stai caricando sono in formato OGG, Flac, MP3 o AIFF", + "message": "Stai per caricare della musica nella tua libreria. Prima di procedere, per favore assicurati che:", + "tag": "I file musicali che stai caricando sono correttamente etichettati." + } + }, + "table": { + "upload": { + "header": { + "actions": "Azioni", + "filename": "Nome file", + "size": "Dimensione", + "status": "Stato" + }, + "status": { + "pending": "In sospeso", + "uploaded": "Caricato", + "uploading": "Caricamento…" + } + } + }, + "tooltip": { + "denied": "Caricamento non riuscito, assicurati che il file non sia troppo grande e di non aver esaurito la tua quota", + "extension": "Tipo di file non valido, assicurati che stai caricando un file audio. Le estensioni di file supportate sono { extensions }", + "network": "Si è verificato un errore di rete durante il caricamento del file", + "retry": "Riprova", + "size": "Impossibile caricare questo file, controlla che non sia troppo grande", + "timeout": "Caricamento scaduto, per favore riprova" + } + }, + "FsBrowser": { + "button": { + "import": "Importa" + } + }, + "FsLogs": { + "empty": { + "notStarted": "L'importazione non è ancora cominciata" + } + }, + "Home": { + "header": { + "newChannels": "Nuovi canali", + "playlists": "Playlist", + "recentlyAdded": "Aggiunte recentemente", + "recentlyFavorited": "Preferiti recenti", + "recentlyListened": "Ascoltate recentemente" + }, + "title": "Libreria" + }, + "ImportStatusModal": { + "button": { + "close": "Chiudi" + }, + "error": { + "importFailure": "Si è verificato un errore durante l'elaborazione del file. Sono disponibili dettagli qui sotto.", + "invalidMetadata": { + "label": "Metadati non validi", + "message": "I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono mancanti." + }, + "unknownError": { + "label": "Errore sconosciuto", + "message": "Si è verificato un errore sconosciuto" + } + }, + "header": { + "importDetail": "Dettaglio dell'importazione" + }, + "link": { + "documentation": "Leggi la nostra documentazione per questo errore", + "support": "Apri una conversazione di supporto (includi nel tuo messaggio le informazioni di debug qui sotto)" + }, + "message": { + "importDetail": "Il caricamento è ancora in corso e presto sarà processato dal server.", + "importSuccess": "Il caricamento è stato processato con successo dal server." + }, + "table": { + "error": { + "debug": "Informazioni di debug", + "errorDetail": "Dettaglio dell'errore", + "errorType": "Tipo di errore", + "help": "Chiedi aiuto" + } + }, + "warning": { + "importSkipped": "Il caricamento è stato saltato perchè uno simile è già disponibile in una delle tue librerie." + } + }, + "Podcasts": { + "button": { + "cancel": "Annulla", + "channel": "Crea un Canale", + "feed": "Iscriviti a un feed", + "search": "Cerca", + "subscribe": "Iscriviti" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Navigare i podcast" + }, + "label": { + "search": "Titolo del Podcast", + "tags": "Etichette" + }, + "modal": { + "subscription": { + "header": "Iscrizione" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Cerca…" + }, + "title": "Podcast" + }, + "Radios": { + "button": { + "add": "Crea radio", + "create": "Crea la tua radio", + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando radio", + "instance": "Radio dell'istanza", + "user": "Radio dell'utente" + }, + "label": { + "search": "Cerca" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Inserisci un nome di una radio…" + }, + "title": "Radio" + }, + "TagDetail": { + "header": { + "channels": "Canali", + "tracks": "Tracce" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "moderation": "Apri nell'interfaccia di moderazione" + } + }, + "TagSelector": { + "placeholder": { + "search": "Cerca…" + } + }, + "TrackBase": { + "button": { + "cancel": "Annulla", + "delete": "Elimina…", + "download": "Scarica", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di più…", + "play": "Riproduci" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "wikipedia": "Cerca su Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "La traccia sarà rimossa, così come i relativi file e dati. Questa azione è irreversibile." + }, + "header": "Eliminare questa traccia?" + }, + "embed": { + "header": "Incorpora questa traccia nel tuo sito web" + } + }, + "title": "Traccia" + }, + "TrackDetail": { + "description": { + "library": "Questa traccia è presente nelle seguenti librerie:" + }, + "header": { + "episode": "Dettagli Episodio", + "library": "Librerie Correlate", + "playlists": "Playlist correlate", + "release": "Dettagli Rilascio", + "track": "Dettagli Traccia" + }, + "link": { + "musicbrainz": "Vedi su MusicBrainz" + }, + "notApplicable": "N/D", + "table": { + "release": { + "album": "Album", + "artist": "Artista", + "copyright": "Diritti d'autore", + "license": "Licenza", + "series": "Serie", + "url": "URL", + "year": "Anno" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Download", + "duration": "Durata", + "size": "Dimensione" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Modifica questa traccia", + "suggest": "Suggerisci una modifica su questa traccia" + }, + "message": { + "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Aggiungi filtro", + "save": "Salva" + }, + "description": { + "builder": "Puoi usare questa interfaccia per creare la tua radio personalizzata, che riprodurrà tracce in accordo con i tuoi criteri." + }, + "header": { + "builder": "Crea", + "created": "Radio creata", + "matches": "{ n } traccia corrisponde ai filtri selezionati | { n } tracce corrispondono ai filtri selezionati", + "updated": "Radio aggiornata" + }, + "label": { + "description": "Descrizione", + "filter": "Aggiungi filtri per personalizzare la tua radio", + "name": "Nome radio", + "public": "Mostra pubblicamente" + }, + "option": { + "filter": "Seleziona un filtro" + }, + "placeholder": { + "description": "La mia stupenda descrizione", + "name": "La mia eccezionale radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data di accesso", - "account": "Account", - "creationDate": "Data di creazione", - "domain": "Dominio", - "importStatus": "Stato dell'importazione", - "library": "Libreria", - "name": "Nome", - "size": "Dimensione", - "visibility": "Visibilità" + "actions": "Azioni", + "candidates": "Candidati", + "config": "Configurazione", + "exclude": "Escludi", + "name": "Filtra nome" } } }, + "title": "Creatore Radio" + }, + "Filter": { + "cancelButton": "Annulla", + "excludeLabel": "Escludi", + "matchingTracksModalHeader": "Tracce che corrispondono al filtro", + "removeButton": "Rimuovi" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoria", + "search": "Cerca" + }, + "link": { + "local": "Locale", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, nome, account…" + }, + "table": { + "channel": { + "header": { + "account": "Account", + "albums": "Albums", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Gli album selezionati saranno rimossi, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "link": { + "local": "Locale", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "notApplicable": "N/D", + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, titolo, artista, ID MusicBrainz…" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Titolo", + "releaseDate": "Data di rilascio", + "tracks": "Tracce" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." + } + }, + "label": { + "category": "Categoria", + "search": "Cerca" + }, + "link": { + "local": "Locale" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, nome, ID MusicBrainz…" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "all": "Tutto", + "approved": "Approvato", + "pending": "Revisione in sospeso", + "rejected": "Rifiutato" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per account, informazioni, dominio…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, ed iscritti. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca", + "visibility": "Visibilità" + }, + "link": { + "local": "Locale" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, attore, nome, descrizione…" + }, + "table": { + "library": { + "header": { + "account": "Account", + "creationDate": "Data di creazione", + "domain": "Dominio", + "followers": "Seguito da", + "name": "Nome", + "uploads": "Caricamenti", + "visibility": "Visibilità" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Il tag selezionato sarà rimosso e scollegato dai contenuti ad esso associati, se essi esistono. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per nome" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artisti", + "creationDate": "Data di creazione", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "link": { + "local": "Locale" + }, + "notApplicable": "N/D", + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, titolo, artista, album, ID MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artista", + "creationDate": "Data di creazione", + "domain": "Dominio", + "license": "Licenza", + "title": "Titolo" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Il caricamento selezionato sarà rimosso. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca", + "status": "Stato", + "visibility": "Visibilità" + }, + "link": { + "local": "Locale" + }, + "notApplicable": "N/D", "option": { "all": "Tutto", "failed": "Fallito", @@ -1862,396 +2299,68 @@ }, "label": "Ordinamento" }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Il caricamento selezionato sarà rimosso. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca", - "status": "Stato", - "visibility": "Visibilità" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { "search": "Cerca per dominio, attore, nome, riferimento, sorgente…" }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data di accesso", "account": "Account", "creationDate": "Data di creazione", "domain": "Dominio", - "followers": "Seguito da", + "importStatus": "Stato dell'importazione", + "library": "Libreria", "name": "Nome", - "uploads": "Caricamenti", + "size": "Dimensione", "visibility": "Visibilità" } } - }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, ed iscritti. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "label": { - "search": "Cerca", - "visibility": "Visibilità" - }, - "placeholder": { - "search": "Cerca per dominio, attore, nome, descrizione…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artista", - "creationDate": "Data di creazione", - "domain": "Dominio", - "license": "Licenza", - "title": "Titolo" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, titolo, artista, album, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "label": { - "category": "Categoria", - "search": "Cerca" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "placeholder": { - "search": "Cerca per dominio, nome, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artisti", - "creationDate": "Data di creazione", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Il tag selezionato sarà rimosso e scollegato dai contenuti ad esso associati, se essi esistono. Questa azione è irreversibile." - } - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per nome" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Tutto", - "approved": "Approvato", - "pending": "Revisione in sospeso", - "rejected": "Rifiutato" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "placeholder": { - "search": "Cerca per account, informazioni, dominio…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - }, - "label": { - "status": "Stato" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Titolo", - "releaseDate": "Data di rilascio", - "tracks": "Tracce" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Gli album selezionati saranno rimossi, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, titolo, artista, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Account", - "domain": "Dominio", - "local": "Locale", - "owner": "Proprietario", - "type": "Tipo" - }, - "status": { - "assignedTo": "Assegnato a", - "internalNotes": "Note interne", - "resolutionDate": "Data di risoluzione", - "resolved": "Risolti", - "status": "Stato", - "unresolved": "Non risolto" - }, - "report": { - "category": "Categoria", - "creationDate": "Data di creazione", - "submittedBy": "Inviata da" + "AccountsTable": { + "action": { + "purge": { + "label": "Rimuovi" } }, - "header": { - "actions": "Azioni", - "notes": "Note interne", - "message": "Messaggio", - "reportedObject": "Oggetto segnalato" - }, - "button": { - "confirmDelete": "Elimina", - "delete": "Elimina oggetto segnalato", - "resolve": "Risolvi", - "unresolve": "Non risolto" - }, - "modal": { - "delete": { - "header": "Eliminare oggetto segnalato?", - "content": { - "warning": "Questo eliminerà l'oggetto associato con questa segnalazione e la segnerà come risolta. La cancellazione è irreversibile." - } - } - }, - "notApplicable": "N/D", - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "report": "Segnala { id }", - "publicPage": "Visualizza pagina pubblica" - }, - "warning": { - "objectDeleted": "L'oggetto associato a questa segnalazione è stato eliminato." - } - }, - "UserRequestCard": { - "header": { - "actions": "Azioni", - "notes": "Note interne", - "signup": "Messaggio" - }, - "button": { - "approve": "Approva", - "reject": "Rifiuta" - }, - "table": { - "status": { - "approved": "Approvato", - "assignedTo": "Assegnato a", - "internalNotes": "Note interne", - "pending": "In sospeso", - "refused": "Rifiutata", - "status": "Stato" - }, - "request": { - "creationDate": "Data di creazione", - "submittedBy": "Inviata da" - } - }, - "notApplicable": "N/D", - "link": { - "request": "Richiesta { id }" - }, - "message": { - "signup": "Questo utente vuole registrarsi alla tua istanza." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Aggiungi una nuova regola di moderazione", - "editRule": "Modifica regola di moderazione", - "failure": "Errore durante la creazione della regola" - }, "label": { - "blockAll": "Blocca tutto", - "policyDisabled": "Disabilitato", - "policyEnabled": "Abilitato", - "silenceActivity": "Silenzia attività", - "silenceNotifications": "Silenzia notifiche", - "customizeRule": "O personalizza la tua regola", - "policyReason": "Motivo", - "rejectMedia": "Rifiuta media" + "search": "Cerca" }, - "tooltip": { - "blockAll": "Blocca tutto da questo account o dominio. Questo prevenirà qualsiasi interazione con l'entità, ed eliminerà i relativi contenuti (caricamenti, librerie, richieste di seguire, ecc.)", - "rejectMedia": "Non scaricare nessun media (audio, copertina dell'album, avatar dell'account…) da questo account o dominio. Questo eliminerà anche i contenuti già esistenti.", - "summary": "Spiega perché stai applicando questa regola: ti aiuterà a ricordare il motivo per cui la hai aggiunta. In base alla configurazione della tua istanza, questa potrà essere mostrata pubblicamente per aiutare gli utenti a capire le regole di moderazione in vigore.", - "silenceActivity": "Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci.", - "silenceNotifications": "Evita che l'account o il dominio facciano scattare notifiche, ad esclusione dei seguaci.", - "isActive": "Usa questa impostazione per abilitare/disabilitare temporaneamente la regola senza rimuoverla completamente." + "link": { + "local": "Account locale" }, - "button": { - "cancel": "Annulla", - "create": "Crea", - "delete": "Elimina", - "confirm": "Elimina regola di moderazione", - "update": "Aggiorna" + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" }, - "modal": { - "delete": { - "header": "Eliminare questa regola di moderazione?", - "content": { - "warning": "Questa azione è irreversibile." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Aggiungi nota" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { - "summary": "Descrivi quali azioni sono state eseguite, o qualsiasi altro aggiornamento relativo a questo…" + "search": "Cerca per dominio, nome utente, descrizione…" }, - "header": { - "failure": "Errore durante l'invio della nota" + "table": { + "account": { + "header": { + "domain": "Dominio", + "firstSeen": "Visto per la prima volta", + "lastSeen": "Visto l'ultima volta", + "moderationRule": "Sotto regole di moderazione", + "name": "Nome", + "uploads": "Caricamenti" + }, + "moderationRule": "Si" + } } }, "DomainsTable": { @@ -2266,6 +2375,16 @@ "label": "Rimuovi dalla lista dei consentiti" } }, + "empty": { + "noPods": "Nessun altro pod trovato" + }, + "label": { + "inList": "è presente sulla lista dei consentiti", + "search": "Cerca" + }, + "link": { + "list": "Questo dominio è presente nella tua lista dei consentiti" + }, "option": { "all": "Tutto", "no": "No", @@ -2279,76 +2398,32 @@ }, "label": "Ordinamento" }, - "table": { - "domain": { - "header": { - "firstSeen": "Visto per la prima volta", - "name": "Nome", - "receivedMessages": "Messaggi ricevuti", - "moderationRule": "Sotto regole di moderazione", - "users": "Utenti" - }, - "moderationRule": "Si" - } - }, - "label": { - "inList": "è presente sulla lista dei consentiti", - "search": "Cerca" - }, - "empty": { - "noPods": "Nessun altro pod trovato" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { "search": "Cerca per nome…" }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - }, - "link": { - "list": "Questo dominio è presente nella tua lista dei consentiti" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Dominio", "firstSeen": "Visto per la prima volta", - "lastSeen": "Visto l'ultima volta", - "name": "Nome", "moderationRule": "Sotto regole di moderazione", - "uploads": "Caricamenti" + "name": "Nome", + "receivedMessages": "Messaggi ricevuti", + "users": "Utenti" }, "moderationRule": "Si" } - }, - "link": { - "local": "Account locale" - }, - "action": { - "purge": { - "label": "Rimuovi" - } - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, nome utente, descrizione…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Modifica" + }, + "header": { + "rule": "Regola" + }, "label": { "blockAll": "Blocca tutto", "muteActivity": "Silenzia attività", @@ -2356,15 +2431,49 @@ "reason": "Motivo", "rejectMedia": "Rifiuta media" }, - "button": { - "edit": "Modifica" - }, "status": { "enabled": "Abilitato", "paused": "In pausa" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina regola di moderazione", + "create": "Crea", + "delete": "Elimina", + "update": "Aggiorna" }, "header": { - "rule": "Regola" + "addRule": "Aggiungi una nuova regola di moderazione", + "editRule": "Modifica regola di moderazione", + "failure": "Errore durante la creazione della regola" + }, + "label": { + "blockAll": "Blocca tutto", + "customizeRule": "O personalizza la tua regola", + "policyDisabled": "Disabilitato", + "policyEnabled": "Abilitato", + "policyReason": "Motivo", + "rejectMedia": "Rifiuta media", + "silenceActivity": "Silenzia attività", + "silenceNotifications": "Silenzia notifiche" + }, + "modal": { + "delete": { + "content": { + "warning": "Questa azione è irreversibile." + }, + "header": "Eliminare questa regola di moderazione?" + } + }, + "tooltip": { + "blockAll": "Blocca tutto da questo account o dominio. Questo prevenirà qualsiasi interazione con l'entità, ed eliminerà i relativi contenuti (caricamenti, librerie, richieste di seguire, ecc.)", + "isActive": "Usa questa impostazione per abilitare/disabilitare temporaneamente la regola senza rimuoverla completamente.", + "rejectMedia": "Non scaricare nessun media (audio, copertina dell'album, avatar dell'account…) da questo account o dominio. Questo eliminerà anche i contenuti già esistenti.", + "silenceActivity": "Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci.", + "silenceNotifications": "Evita che l'account o il dominio facciano scattare notifiche, ad esclusione dei seguaci.", + "summary": "Spiega perché stai applicando questa regola: ti aiuterà a ricordare il motivo per cui la hai aggiunta. In base alla configurazione della tua istanza, questa potrà essere mostrata pubblicamente per aiutare gli utenti a capire le regole di moderazione in vigore." } }, "InstancePolicyModal": { @@ -2374,161 +2483,129 @@ }, "modal": { "manage": { - "header": "Gestisci regole di moderazione per { obj }", "content": { "warning": "Questa entità è soggetta a regole specifiche di moderazione" - } + }, + "header": "Gestisci regole di moderazione per { obj }" } } }, + "NoteForm": { + "button": { + "add": "Aggiungi nota" + }, + "header": { + "failure": "Errore durante l'invio della nota" + }, + "placeholder": { + "summary": "Descrivi quali azioni sono state eseguite, o qualsiasi altro aggiornamento relativo a questo…" + } + }, "NotesThread": { "button": { "delete": "Elimina" }, "modal": { "delete": { - "header": "Eliminare questa nota?", "content": { "warning": "La nota sarà rimossa. Questa azione è irreversibile." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Account", - "albums": "Albums", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Nome", - "tracks": "Tracce" + }, + "header": "Eliminare questa nota?" } } }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" + "ReportCard": { + "button": { + "confirmDelete": "Elimina", + "delete": "Elimina oggetto segnalato", + "resolve": "Risolvi", + "unresolve": "Non risolto" }, - "label": "Ordinamento" + "header": { + "actions": "Azioni", + "message": "Messaggio", + "notes": "Note interne", + "reportedObject": "Oggetto segnalato" + }, + "link": { + "moderation": "Apri nell'interfaccia di moderazione", + "publicPage": "Visualizza pagina pubblica", + "report": "Segnala { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Questo eliminerà l'oggetto associato con questa segnalazione e la segnerà come risolta. La cancellazione è irreversibile." + }, + "header": "Eliminare oggetto segnalato?" + } + }, + "notApplicable": "N/D", + "table": { + "object": { + "account": "Account", + "domain": "Dominio", + "local": "Locale", + "owner": "Proprietario", + "type": "Tipo" + }, + "report": { + "category": "Categoria", + "creationDate": "Data di creazione", + "submittedBy": "Inviata da" + }, + "status": { + "assignedTo": "Assegnato a", + "internalNotes": "Note interne", + "resolutionDate": "Data di risoluzione", + "resolved": "Risolti", + "status": "Stato", + "unresolved": "Non risolto" + } + }, + "warning": { + "objectDeleted": "L'oggetto associato a questa segnalazione è stato eliminato." + } }, - "label": { - "category": "Categoria", - "search": "Cerca" - }, - "link": { - "local": "Locale", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "placeholder": { - "search": "Cerca per dominio, nome, account…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" + "UserRequestCard": { + "button": { + "approve": "Approva", + "reject": "Rifiuta" + }, + "header": { + "actions": "Azioni", + "notes": "Note interne", + "signup": "Messaggio" + }, + "link": { + "request": "Richiesta { id }" + }, + "message": { + "signup": "Questo utente vuole registrarsi alla tua istanza." + }, + "notApplicable": "N/D", + "table": { + "request": { + "creationDate": "Data di creazione", + "submittedBy": "Inviata da" + }, + "status": { + "approved": "Approvato", + "assignedTo": "Assegnato a", + "internalNotes": "Note interne", + "pending": "In sospeso", + "refused": "Rifiutata", + "status": "Stato" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Stato dell'account", - "email": "Email", - "lastActivity": "Ultima attività", - "permissions": "Permessi", - "signup": "Registrati", - "status": "Stato", - "username": "Nome utente" - }, - "accountStatus": { - "active": "Attivo", - "inactive": "Inattivo" - }, - "status": { - "admin": "Amministratore", - "regular": "Utente semplice", - "staff": "Membro dello staff" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "permission": { - "library": "Libreria", - "moderation": "Moderazione", - "settings": "Impostazioni" - }, - "notApplicable": "N/D", - "placeholder": { - "search": "Cerca per nome utente, indirizzo e-mail, nome…" - }, - "pagination": { - "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Tutto", - "expired": "Scaduto/utilizzato", - "open": "Aperto" - }, - "table": { - "invitation": { - "header": { - "code": "Codice", - "creationDate": "Data di creazione", - "expirationDate": "Data di scadenza", - "owner": "Proprietario", - "status": "Stato" - } - } - }, - "action": { - "delete": "Elimina" - }, - "label": { - "expired": "Scaduto", - "unused": "Non utilizzato", - "search": "Cerca", - "status": "Stato", - "used": "Usati" - }, - "ordering": { - "label": "Ordinamento" - }, - "placeholder": { - "search": "Cerca per nome utente, indirizzo e-mail, codice…" - }, - "pagination": { - "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" - } - }, "InvitationForm": { "button": { "clear": "Pulisci", "new": "Ottieni un nuovo invito" }, - "table": { - "invitation": { - "header": { - "code": "Codice", - "link": "Condividi collegamento" - } - } - }, "header": { "failure": "Errore durante la creazione dell'invito" }, @@ -2537,523 +2614,59 @@ }, "placeholder": { "invitation": "Lascia vuoto per un codice casuale" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Azioni", - "label": "Etichetta campo", - "type": "Tipo campo", - "required": "Richiesto" - }, - "type": { - "long": "Testo lungo", - "short": "Testo breve" - }, - "required": { - "false": "No", - "true": "Si" - } - } - }, - "button": { - "add": "Aggiungi campo", - "edit": "Modifica modulo", - "preview": "Anteprima modulo" - }, - "label": { - "additionalField": "Campo aggiuntivo", - "additionalFields": "Campi aggiuntivi", - "delete": "Elimina", - "helpText": "Suggerimento", - "moveDown": "Sposta giù", - "moveUp": "Sposta su" - }, - "help": { - "additionalFields": "Campi aggiuntivi da visualizzare nel modulo. Visualizzati solo se la convalida manuale delle iscrizioni è attiva.", - "helpText": "Testo opzionale da visualizzare all'inizio del modulo di iscrizione." - } - }, - "SettingsGroup": { - "header": { - "image": "Immagine attuale", - "error": "Errore durante il salvataggio delle impostazioni" - }, - "button": { - "save": "Salva" - }, - "message": { - "success": "Impostazioni aggiornate con successo." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Tutto" - }, - "label": { - "category": "Categoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Le segnalazioni anonime sono disabilitate, per favore accedi per inviare una segnalazione.", - "modal": "Vuoi segnalare questo oggetto?", - "submissionFailure": "Errore durante l'invio della segnalazione" - }, - "button": { - "cancel": "Annulla", - "submit": "Invia segnalazione" - }, - "label": { - "email": "Email", - "forwardToDomain": "Inoltra a { domain}", - "message": "Messaggio" - }, - "description": { - "forwardToDomain": "Inoltra una copia anonima della segnalazione al server che ospita questo elemento.", - "message": "Usa questo campo per fornire contesto aggiuntivo al moderatore che gestirà la tua segnalazione.", - "modal": "Usa questo modulo per inviare una segnalazione al nostro team di moderazione.", - "email": "Utilizzeremo questo indirizzo email qualora avessimo bisogno di contattarti per questa segnalazione." - }, - "message": { - "submissionSuccess": "Segnalazione inviata con successo, grazie" - } - }, - "FilterModal": { - "button": { - "cancel": "Annulla", - "hide": "Nascondi contenuto" - }, - "message": { - "success": "Filtro di contenuto aggiunto con successo" - }, - "header": { - "modal": "Vuoi nascondere i contenuti dell'artista \"{ name }\"?", - "failure": "Errore durante la creazione del filtro" - }, - "warning": { - "createFilter": { - "listItem2": "Nel widget \"Aggiunti recentemente\"", - "listItem3": "Negli elenchi di artisti ed album", - "listItem1": "Nei preferiti di altri utenti e nella cronologia di ascolto", - "listItem4": "Nei suggerimenti radio", - "listIntro": "Non vedrai tracce, album e attività dell'utente collegate a questo artista in futuro:" - } - }, - "help": { - "createFilter": "Puoi gestire ed modificare i tuoi filtri in qualsiasi momento dalle impostazioni del tuo account." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Si è verificato un errore durante il tentativo di aggiornamento dei dati:", - "success": "I dati sono stati aggiornati con successo dal server remoto.", - "pending": "La richiesta di aggiornamento non è stata processata in tempo dal nostro server. Sarà processata più tardi.", - "skipped": "Il server remoto ha risposto, ma i dati ricevuti non sono supportati da Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Si è verificato un errore HTTP durante il tentativo di contatto del server remoto", - "invalidAttributesError": "I dati riportati dal server remoto hanno attributi invalidi o mancanti", - "connectionError": "Impossibile connettersi al server remoto", - "httpStatus": "Il server remoto ha risposto con il codice HTTP { status }", - "timeoutError": "Il server remoto non ha risposto abbastanza velocemente", - "invalidJsonError": "Il server remoto ha risposto con dati JSON o JSON-LD non validi", - "unknownError": "Errore sconosciuto" - }, - "label": { - "detail": "Dettaglio dell'errore", - "type": "Tipo di errore" - } - } - }, - "button": { - "close": "Chiudi", - "reload": "Chiudi e ricarica pagina" - }, - "header": { - "saveFailure": "Errore durante il salvataggio delle impostazioni", - "failure": "Errore di aggiornamento", - "pending": "Aggiornamento in sospeso", - "success": "Aggiornamento riuscito", - "skipped": "L'aggiornamento è stato rimandato", - "refresh": "Sto aggiornando l'oggetto dal server remoto…" - }, - "loader": { - "fetchRequest": "Richiedendo un recupero…", - "awaitingResult": "Aspettando i risultati…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Nessuna libreria corrispondente." - }, - "button": { - "showMore": "Mostra altri" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Scorciatoie del lettore audio", - "clearQueue": "Svuota la coda", - "decreaseVolume": "Diminuisci volume", - "expandQueue": "Espandi coda/visualizzazione player", - "increaseVolume": "Aumenta volume", - "playPause": "Pausa/riproduci la traccia corrente", - "playNext": "Riproduci traccia successiva", - "playPrevious": "Riproduci traccia precedente", - "seekBack30": "Salta indietro 30s", - "seekBack5": "Salta indietro 5s", - "seekForward30": "Salta avanti 30s", - "seekForward5": "Salta avanti 5s", - "shuffleQueue": "Mischia la tua coda", - "toggleFavorite": "Inverti preferito", - "toggleMute": "Cambia muto", - "toggleLoop": "Cambia tipo di riproduzione della coda" - }, - "general": { - "focus": "Metti in primo piano la barra di ricerca", - "label": "Scorciatoie generali", - "show": "Mostra scorciatoie da tastiera disponibili", - "unfocus": "Togli il primo piano dalla barra di ricerca" - } - }, - "button": { - "close": "Chiudi" - }, - "header": { - "modal": "Scorciatoie da tastiera" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Annulla", - "submit": "Invia" - }, - "header": { - "chooseInstance": "Scegli la tua istanza", - "failure": "Non è possibile connettersi all'URL dato", - "suggestions": "Scelte suggerite" - }, - "label": { - "url": "URL dell'istanza" - }, - "help": { - "notFunkwhaleServer": "L'indirizzo fornito non è quello di un server Funkwhale", - "serverDown": "Il server potrebbe essere caduto", - "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti." - }, - "message": { - "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" - } - }, - "Queue": { - "button": { - "clear": "Svuota", - "close": "Chiudi", - "stopRadio": "Ferma radio" - }, - "label": { - "duration": "Durata", - "addArtistContentFilter": "Nascondi contenuti di questo artista…", - "next": "Prossima traccia", - "pause": "Pausa", - "play": "Riproduci", - "previous": "Traccia precedente", - "queue": "Coda", - "remove": "Rimuovi", - "restart": "Riavvia traccia" - }, - "message": { - "radio": "Le nuove tracce saranno allegate qui automaticamente.", - "automaticPlay": "La traccia seguente verrà riprodotta automaticamente tra pochi secondi…" - }, - "header": { - "failure": "La traccia non può essere caricata", - "radio": "Hai una radio in riproduzione" - }, - "meta": { - "queuePosition": "Traccia { index } su { length }" - }, - "warning": { - "connectivity": "Potresti avere un problema di connettività." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copia" - }, - "title": "Mostra/nascondi password", - "message": { - "copy": "Testo copiato negli appunti!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Modifica" - } - }, - "Button": { - "startRadio": "Riproduci radio", - "stopRadio": "Ferma radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Errore durante il recupero dell'oggetto" - }, - "button": { - "fediverse": "Fediverso", - "rss": "RSS", - "search": "Cerca" - }, - "label": { - "fediverse": { - "fieldLabel": "Fediverso", - "title": "Iscriviti ad un podcast condiviso sul Fediverso" - }, - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml", - "fieldLabel": "Indirizzo del feed RSS", - "title": "Iscriviti al feed RSS di un podcast" - } - }, - "warning": { - "unsupported": "Questo tipo di oggetto non è ancora supportato" - }, - "error": { - "fetchFailed": "Questo oggetto non può essere recuperato" - }, - "description": { - "fediverse": "Usa questo modulo per recuperare un oggetto ospitato da qualche altra parte nel Fediverso.", - "rss": "Usa questo modulo per iscriverti a un feed RSS dall'URL relativo." - } - }, - "PageNotFound": { - "link": { - "home": "Vai alla pagina iniziale" - }, - "title": "Pagina Non Trovata", - "header": { - "pageNotFound": "Pagina non trovata!" - }, - "message": { - "pageNotFound": "Ci dispiace, la pagina che hai richiesto non esiste:" - } - }, - "vui": { - "Pagination": { - "next": "Pagina Successiva", - "label": "Impaginazione", - "previous": "Pagina Precedente" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostra 1 altro tag | Mostra { n } altri tag" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "listenings": "{ n } ascolto | { n } ascolti", - "subscribers": "{ n } iscritto | { n } iscritti", - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "channelEpisodes": "Tutti gli Episodi", - "mirrored": "Mirror da { dominio }", - "moderation": "Apri nell'interfaccia di moderazione", - "channelOverview": "Panoramica", - "channelTracks": "Tracce", - "domainView": "Visualizza su { dominio }" - }, - "header": { - "artistChannel": "Canale dell'artista", - "podcastChannel": "Canale podcast" - }, - "button": { - "cancel": "Annulla", - "confirm": "Elimina", - "delete": "Elimina…", - "edit": "Modifica…", - "embed": "Incorpora", - "play": "Riproduci", - "updateChannel": "Aggiorna canale", - "upload": "Carica" - }, - "title": "Canale", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copia-incolla il seguente url nella tua app di podcasting preferita:" - }, - "header": "Iscriviti via RSS" - }, - "fediverse": { - "content": { - "help": "Se stai usando Mastodon o altre applicazioni per il fediverso, puoi iscriverti a questo account:" - }, - "header": "Iscriviti sul Fediverso" - }, - "funkwhale": { - "header": "Iscriviti su Funkwhale" - }, - "header": "Iscriviti a questo canale" }, - "delete": { - "header": "Eliminare questo Canale?", - "content": { - "warning": "Il canale sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." - } - }, - "embed": { - "header": "Incorpora il lavoro di questo artista nel tuo sito web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Aggiungi nuovo", - "erroredUploads": "Visualizza caricamenti falliti", - "skippedUploads": "Visualizza caricamenti saltati" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Ultimi episodi", - "latestTracks": "Ultime tracce", - "series": "Serie", - "uploadsFailure": "Non è stato possibile pubblicare alcuni file", - "uploadsProcessing": "I file caricati stanno venendo elaborati", - "uploadsSuccess": "Upload pubblicati con successo" - }, - "meta": { - "progress": "File processati:" - }, - "message": { - "processing": "I file caricati stanno venendo elaborati da Funkwhale e saranno pubblicati a breve." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Aggiungi nuovo" - }, - "button": { - "cancel": "Annulla", - "subscribe": "Iscriviti" - }, - "placeholder": { - "search": "Filtra per nome…" - }, - "title": "Canali a cui sei iscritto", - "modal": { - "subscription": { - "header": "Iscrizione" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "details": "Dettagli Libreria" - }, - "label": { - "size": "Dimensione totale dei file in questa libreria" - }, - "button": { - "upload": "Carica" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } usato su { max } consentito", - "errored": "File con errore", - "pending": "File in sospeso", - "skipped": "File saltati" - }, - "header": { - "currentUsage": "Utilizzo attuale" - }, - "loading": { - "currentUsage": "Caricando i dati di utilizzo…" - }, - "button": { - "purge": "Rimuovi" - }, - "modal": { - "purgeErrored": { - "header": "Rimuovere file con errori?", - "content": { - "description": "Rimuove completamente le tracce caricate ma che non sono state processate correttamente, aggiungendo lo spazio corrispondente alla tua quota." - } - }, - "purgePending": { - "header": "Rimuovere file in attesa?", - "content": { - "description": "Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo lo spazio corrispondente alla tua quota." - } - }, - "purgeSkipped": { - "header": "Rimuovere file saltati?", - "content": { - "description": "Rimuove completamente le tracce caricate ma che sono state saltate durante la fase di importazione, aggiungendo lo spazio corrispondente alla tua quota." - } - } - }, - "link": { - "viewFiles": "Vedi files" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artista", - "duration": "Durata", - "importStatus": "Stato dell'importazione", - "size": "Dimensione", - "title": "Titolo", - "uploadDate": "Data di caricamento" + "code": "Codice", + "link": "Condividi collegamento" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Elimina" + }, + "label": { + "expired": "Scaduto", + "search": "Cerca", + "status": "Stato", + "unused": "Non utilizzato", + "used": "Usati" }, "option": { - "status": { - "all": "Tutto", - "draft": "Bozza", - "failed": "Fallito", - "finished": "Finito", - "pending": "In sospeso", - "skipped": "Saltato" - } + "all": "Tutto", + "expired": "Scaduto/utilizzato", + "open": "Aperto" }, + "ordering": { + "label": "Ordinamento" + }, + "pagination": { + "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" + }, + "placeholder": { + "search": "Cerca per nome utente, indirizzo e-mail, codice…" + }, + "table": { + "invitation": { + "header": { + "code": "Codice", + "creationDate": "Data di creazione", + "expirationDate": "Data di scadenza", + "owner": "Proprietario", + "status": "Stato", + "user": "Utente" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Cerca" + }, + "notApplicable": "N/D", "ordering": { "direction": { "ascending": "Crescente", @@ -3062,397 +2675,550 @@ }, "label": "Ordinamento" }, - "action": { - "delete": "Elimina", - "restartImport": "Riavvia importazione" + "pagination": { + "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" }, - "label": { - "importStatus": "Stato dell'importazione", - "search": "Cerca" - }, - "notApplicable": "N/D", - "empty": { - "noTracks": "Non sono ancora state aggiunte tracce a questa libreria" + "permission": { + "library": "Libreria", + "moderation": "Moderazione", + "settings": "Impostazioni" }, "placeholder": { - "search": "Cerca per titolo, artista, album…" + "search": "Cerca per nome utente, indirizzo e-mail, nome…" }, - "button": { - "showStatus": "Mostra informazioni sullo stato di caricamento di questa traccia" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crea una nuova libreria" - }, - "loading": { - "libraries": "Caricando le Librerie…" - }, - "empty": { - "noLibrary": "Sembra che tu non abbia ancora nessuna libreria, è tempo di crearne una." - }, - "header": { - "libraries": "Le mie librerie" - } - }, - "Form": { - "button": { - "create": "Crea libreria", - "delete": "Elimina", - "confirm": "Elimina libreria", - "update": "Aggiorna libreria" - }, - "modal": { - "delete": { - "header": "Eliminare questa libreria?", - "content": { - "warning": "La libreria e tutte le sue tracce saranno eliminate. Questa azione è irreversibile." + "table": { + "user": { + "accountStatus": { + "active": "Attivo", + "inactive": "Inattivo" + }, + "header": { + "accountStatus": "Stato dell'account", + "email": "Email", + "lastActivity": "Ultima attività", + "permissions": "Permessi", + "signup": "Registrati", + "status": "Stato", + "username": "Nome utente" + }, + "status": { + "admin": "Amministratore", + "regular": "Utente semplice", + "staff": "Membro dello staff" } } - }, - "label": { - "description": "Descrizione", - "name": "Nome", - "visibility": "Visibilità" - }, - "header": { - "failure": "Errore" - }, - "description": { - "library": "Le librerie sono di aiuto per organizzare e condividere la tua collezione musicale. Puoi caricare la tua musica su Funkwhale e condividerla con amici e parenti.", - "visibility": "Sarai in grado di condividere la tua libreria con altre persone, indipendentemente dalla sua visibilità." - }, - "message": { - "libraryCreated": "Libreria creata", - "libraryDeleted": "Libreria eliminata", - "libraryUpdated": "Libreria aggiornata" - }, - "placeholder": { - "name": "La mia eccezionale libreria", - "description": "Questa libreria contiene la mia musica personale, spero vi piaccia." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce", - "failedTracks": "Tracce con errore:", - "lastUpdate": "Ultimo aggiornamento:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." - }, - "header": "Smettere di seguire questa libreria?" - } - }, - "button": { - "cancel": "Annulla richiesta di seguire", - "follow": "Segui", - "pending": "Richiesta di seguire in attesa di approvazione", - "unfollow": "Smetti di seguire" - }, - "link": { - "scanDetails": "Dettagli", - "scan": "Scansiona ora" - }, - "label": { - "scanFailure": "Errore durante la scansione", - "scanPending": "Scansione in sospeso", - "scanSuccess": "Scansionata", - "scanPartialSuccess": "Scansione eseguita con errori", - "scanProgress": "Scansionando… ({ progress }%)", - "sharingLink": "Condividi collegamento" - }, - "message": { - "scanLaunched": "Scansione avviata", - "scanSkipped": "Scansione saltata (la scansione precedente è troppo recente)" - }, - "tooltip": { - "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", - "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" - } - }, - "ScanForm": { - "header": { - "failure": "Non è stato possibile recuperare la libreria remota" - }, - "placeholder": { - "url": "Inserisci l'URL di una libreria" - }, - "label": { - "search": "Cerca una libreria remota" - }, - "button": { - "submit": "Invia ricerca" - } - }, - "Home": { - "header": { - "knownLibraries": "Librerie conosciute", - "remoteLibraries": "Librerie remote" - }, - "loading": { - "remoteLibraries": "Caricando le librerie remote…" - }, - "button": { - "refresh": "Aggiorna" - }, - "description": { - "remoteLibraries": "Le librerie remote sono di proprietà di altri utenti nella rete. Puoi accedervi se sono pubbliche o se ti è stato dato l'accesso ad esse." - } - } - }, - "Home": { - "title": "Aggiungi e gestisci contenuti", - "description": { - "follow": "Segui librerie di altri utenti per avere accesso a nuova musica. Le librerie pubbliche possono essere seguite immediatamente, mentre seguire le librerie private richiedono l'approvazione del loro proprietario.", - "channel": { - "1": "Se sei un musicista o un podcaster, i canali sono pensati per te!", - "2": "Condividi le tue opere pubblicamente e ottieni iscritti su Funkwhale, il Fediverso o qualsiasi applicazione di podcasting." - }, - "upload": "Carica la tua libreria musicale personale su Funkwhale per ascoltarla da ovunque e condividerla con amici e famiglia." - }, - "header": { - "follow": "Segui librerie remote", - "channel": "Pubblica le tue opere in un canale", - "upload": "Carica contenuto di terze parti in una libreria" - }, - "button": { - "start": "Per iniziare" - }, - "help": { - "uploadQuota": "Questa istanza offre fino a {quota} di spazio di archiviazione per ogni utente." - } - }, - "Base": { - "title": "Aggiungi contenuto", - "link": { - "libraries": "Librerie", - "tracks": "Tracce" - }, - "menu": { - "secondary": "Menu secondario" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "moderation": "Apri nell'interfaccia di moderazione", - "owner": "Proprietà di { username }", - "tracks": "Tracce", - "domain": "Visualizza su { dominio }" - }, - "button": { - "edit": "Modifica", - "upload": "Carica" - }, - "title": "Libreria", - "label": { - "private": "Privato", - "public": "Pubblico", - "instance": "Ristretto", - "sharingLink": "Condividi collegamento" - }, - "description": { - "sharingLink": "Condividi questo link con altri utenti in modo che possano richiedere l'accesso alla tua libreria incollandolo nella barra di ricerca della loro istanza." - }, - "tooltip": { - "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", - "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente", - "instance": "Questa libreria è ristretta agli utenti di questa istanza" - } - }, - "Edit": { - "button": { - "accept": "Accetta", - "reject": "Rifiuta" - }, - "table": { - "action": { - "status": { - "accepted": "Accettato", - "pending": "Approvazione in sospeso", - "rejected": "Rifiutato" - }, - "header": { - "action": "Azione", - "date": "Data", - "status": "Stato", - "user": "Utente" - } - } - }, - "header": { - "followers": "Seguito da", - "libraryContents": "Contenuto della libreria" - }, - "loading": { - "followers": "Caricando la lista di chi ti segue…" - }, - "empty": { - "noFollowers": "Nessuno segue questa libreria" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - }, - "DetailOverview": { - "empty": { - "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - }, - "DetailTracks": { - "empty": { - "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Profilo di { username }", - "link": { - "activity": "Attività", - "moderation": "Apri nell'interfaccia di moderazione", - "overview": "Panoramica", - "domainView": "Visualizza su { dominio }" - }, - "label": { - "self": "Questo sei tu!" - } - }, - "PasswordReset": { - "label": { - "email": "Indirizzo email dell'account" - }, - "button": { - "requestReset": "Chiedi un reset della password" - }, - "link": { - "back": "Torna alla pagina di accesso" - }, - "placeholder": { - "email": "Inserisci l'indirizzo email collegato al tuo account" - }, - "header": { - "failure": "Errore durante la richiesta di un reset della password", - "reset": "Resetta la tua password" - }, - "title": "Resetta la tua password", - "help": { - "form": "Usa questo modulo per richiedere un reset della password. Ti invieremo una email all'indirizzo fornito con le istruzioni per resettare la tua password." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Aggiungi nuovo" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Canale dell'artista" - }, - "header": "Crea canale", - "podcast": { - "header": "Canale podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Annulla", - "createChannel": "Crea canale", - "next": "Prossimo passo", - "previous": "Passo precedente" + "hide": "Nascondi contenuto" }, "header": { - "channels": "Canali", - "sharedLibraries": "Questo utente ha condiviso le seguenti librerie", - "libraries": "Librerie dell'Utente" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Torna alla pagina di accesso", - "login": "Procedi all'accesso" + "failure": "Errore durante la creazione del filtro", + "modal": "Vuoi nascondere i contenuti dell'artista \"{ name }\"?" }, - "title": "Cambia la tua password", - "header": { - "failure": "Errore durante la modifica della password", - "success": "Password aggiornata con successo" + "help": { + "createFilter": "Puoi gestire ed modificare i tuoi filtri in qualsiasi momento dalle impostazioni del tuo account." }, "message": { - "requestSent": "Se l'indirizzo email fornito nel passo precedente è valido e collegato a un account utente, dovresti ricevere un'email con le istruzioni per il reset nei prossimi minuti.", - "success": "La tua password è stata aggiornata con successo." + "success": "Filtro di contenuto aggiunto con successo" }, + "warning": { + "createFilter": { + "listIntro": "Non vedrai tracce, album e attività dell'utente collegate a questo artista in futuro:", + "listItem1": "Nei preferiti di altri utenti e nella cronologia di ascolto", + "listItem2": "Nel widget \"Aggiunti recentemente\"", + "listItem3": "Negli elenchi di artisti ed album", + "listItem4": "Nei suggerimenti radio" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Nuova password" + "category": "Categoria" }, + "option": { + "all": "Tutto" + } + }, + "ReportModal": { "button": { - "update": "Aggiorna la tua password" - } - }, - "EmailConfirm": { - "title": "Conferma il tuo indirizzo e-mail", - "label": { - "confirmationCode": "Codice di conferma" + "cancel": "Annulla", + "submit": "Invia segnalazione" + }, + "description": { + "email": "Utilizzeremo questo indirizzo email qualora avessimo bisogno di contattarti per questa segnalazione.", + "forwardToDomain": "Inoltra una copia anonima della segnalazione al server che ospita questo elemento.", + "message": "Usa questo campo per fornire contesto aggiuntivo al moderatore che gestirà la tua segnalazione.", + "modal": "Usa questo modulo per inviare una segnalazione al nostro team di moderazione." }, "header": { - "failure": "Non è stato possibile confermare il tuo indirizzo e-mail", - "success": "Indirizzo e-mail confermato" + "disabled": "Le segnalazioni anonime sono disabilitate, per favore accedi per inviare una segnalazione.", + "modal": "Vuoi segnalare questo oggetto?", + "submissionFailure": "Errore durante l'invio della segnalazione" }, - "link": { - "login": "Procedi all'accesso", - "back": "Torna alla pagina di accesso" + "label": { + "email": "Email", + "forwardToDomain": "Inoltra a { domain}", + "message": "Messaggio" }, "message": { - "success": "Ora puoi usare il servizio senza limitazioni." - } - }, - "Signup": { - "header": { - "createAccount": "Crea un account su Funkwhale" - }, - "title": "Registrati" - }, - "Login": { - "title": "Accedi", - "header": { - "login": "Accedi al tuo account Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Accesso in corso…" - } - }, - "Plugins": { - "title": "Gestisci i plugin" - }, - "ProfileActivity": { - "header": { - "playlists": "Playlist", - "recentlyFavorited": "Preferiti recenti", - "recentlyListened": "Ascoltate recentemente" + "submissionSuccess": "Segnalazione inviata con successo, grazie" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Approva", + "markRead": "Segna come letta", + "markUnread": "Segna come non letta", + "reject": "Rifiuta" + }, + "message": { + "libraryAcceptFollow": "{ username } ha accettato la tua richiesta di seguire la libreria \"{ library }\"", + "libraryFollow": "{ username } segue la tua libreria \"{ library }\"", + "libraryPendingFollow": "{ username } vuole seguire la tua libreria \"{ library }\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Editor": { + "button": { + "addDuplicate": "Aggiungi comunque", + "clear": "Pulisci playlist", + "copy": "Copia la coda corrente in questa playlist", + "insertFromQueue": "Inserisci dalla coda ({ n } traccia) | Inserisci dalla coda ({ n } tracce)" + }, + "error": { + "sync": "Si è verificato un errore durante il salvataggio delle modifiche" + }, + "header": { + "editor": "Modifica lista di riproduzione" + }, + "help": { + "reorder": "Trascina e rilascia righe per riordinare le tracce nella playlist" + }, + "loading": { + "sync": "Sincronizzando le modifiche con il server…" + }, + "message": { + "sync": "Modifiche sincronizzate con il server" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Questo cancellerà tutte le tracce da questa lista di riproduzione e non può essere annullato." + }, + "header": "Vuoi pulire la playlist \"{ playlist }\"?" + } + }, + "warning": { + "duplicate": "Alcune tracce nella tua coda sono già presenti in questo elenco di riproduzione:" + } + }, + "Form": { + "button": { + "create": "Crea playlist", + "update": "Aggiorna lista di riproduzione" + }, + "header": { + "createFailure": "La lista di riproduzione non può essere creata", + "createPlaylist": "Crea una nuova lista di riproduzione", + "createSuccess": "Lista di riproduzione creata", + "updateSuccess": "Lista di riproduzione aggiornata" + }, + "label": { + "name": "Nome lista di riproduzione", + "visibility": "Visibilità lista di riproduzione" + }, + "placeholder": { + "name": "La mia eccezionale playlist" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Aggiungi comunque", + "addToPlaylist": "Aggiungi a questa playlist", + "addTrack": "Aggiungi traccia", + "cancel": "Annulla", + "edit": "Modifica" + }, + "empty": { + "noPlaylists": "Non sono ancora state create playlist" + }, + "header": { + "addFailure": "La traccia non può essere aggiunta alla lista di riproduzione", + "addToPlaylist": "Aggiungi alla playlist", + "available": "Playlist disponibili", + "manage": "Gestisci playlist", + "noResults": "Nessun risultato che corrisponde al tuo filtro" + }, + "label": { + "filter": "Filtra" + }, + "placeholder": { + "filterPlaylist": "Inserisci il nome della playlist" + }, + "table": { + "edit": { + "header": { + "edit": "Modifica", + "lastModification": "Ultima modifica", + "name": "Nome", + "tracks": "Tracce" + } + } + }, + "warning": { + "duplicate": "{ 0 } è già nella { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Aggiungi alla playlist…" + } + }, + "Widget": { + "button": { + "create": "Crea Playlist", + "more": "Mostra altri" + }, + "placeholder": { + "noPlaylists": "Non sono ancora state create playlist" + } + } + }, + "radios": { + "Button": { + "startRadio": "Riproduci radio", + "stopRadio": "Ferma radio" + }, + "Card": { + "button": { + "edit": "Modifica" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostra 1 altro tag | Mostra { n } altri tag" + } + } + }, + "vui": { + "Pagination": { + "label": "Impaginazione", + "next": "Pagina Successiva", + "previous": "Pagina Precedente" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{ n } traccia è stata aggiunta alla tua coda | { n } tracce sono state aggiunte alla tua coda" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musica", + "other": "Altro", + "podcast": "Podcast" + }, + "label": "Categoria del contenuto" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Questa traccia è stata caricata, ma la sua elaborazione non è ancora stata programmata", + "label": "Bozza" + }, + "errored": { + "help": "Non è stato possibile processare questa traccia, assicurati che sia etichettata correttamente", + "label": "Si è verificato un errore" + }, + "finished": { + "help": "Importato", + "label": "Finito" + }, + "pending": { + "help": "Questa traccia è stata caricata, ma non è ancora stata processata dal server", + "label": "In sospeso" + }, + "skipped": { + "help": "Questa traccia è già presente in una delle tue librerie", + "label": "Saltato" + } + }, + "label": "Clicca per visualizzare più informazioni sul processo di importazione di questo caricamento" + }, + "privacyLevel": { + "choices": { + "instance": "Tutti su questa istanza", + "private": "Nessuno tranne me", + "public": "Tutti, su tutte le istanze" + }, + "help": "Imposta il livello di visibilità delle tue attività", + "label": "Visibilità dell'attività", + "shortChoices": { + "instance": "Istanza", + "private": "Privato", + "public": "Tutti" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contenuto illegale", + "invalidMetadata": "Metadati non validi", + "offensiveContent": "Contenuto offensivo", + "other": "Altro", + "takedownRequest": "Richiesta di rimozione" + }, + "label": "Categoria" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data di accesso", + "albumTitle": "Nome album", + "artistName": "Nome dell'artista", + "bitrate": "Bitrate", + "creationDate": "Data di creazione", + "dateJoined": "Data di registrazione", + "domain": "Dominio", + "duration": "Durata", + "expirationDate": "Data di scadenza", + "firstSeen": "Visto per la prima volta in data", + "followers": "Seguito da", + "itemsCount": "Oggetti", + "lastActivity": "Ultima attività", + "lastSeen": "Visto l'ultima volta in data", + "modificationDate": "Data di modifica", + "name": "Nome", + "receivedMessages": "Messaggi ricevuti", + "releaseDate": "Data di rilascio", + "size": "Dimensione", + "trackTitle": "Nome traccia", + "uploads": "Caricamenti", + "username": "Nome utente", + "users": "Utenti" + }, + "scopes": { + "edits": { + "description": "Accesso alle modifiche", + "label": "Modifiche" + }, + "favorites": { + "label": "Preferiti" + }, + "filters": { + "description": "Accesso ai filtri del contenuto", + "label": "Filtri di contenuto" + }, + "follows": { + "description": "Accesso ai seguiti", + "label": "Segue" + }, + "libraries": { + "description": "Accedi ai file audio, librerie, artisti, album e tracce", + "label": "Librerie e caricamenti" + }, + "listenings": { + "description": "Accedi alla cronologia di ascolto", + "label": "Ascolti" + }, + "notifications": { + "description": "Accesso alle notifiche", + "label": "Notifiche" + }, + "playlists": { + "description": "Accesso alle playlist", + "label": "Playlist" + }, + "profile": { + "description": "Accedi a email, nome utente e informazioni del profilo", + "label": "Profilo" + }, + "radios": { + "description": "Accesso alle radio", + "label": "Radio" + }, + "reports": { + "description": "Accesso ai report di moderazione", + "label": "Segnalazioni" + }, + "security": { + "description": "Accesso alle impostazioni di sicurezza come password e autorizzazioni", + "label": "Sicurezza" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data di rilascio", + "title": "Titolo" + }, + "artist": { + "name": "Nome" + }, + "cover": { + "label": "Cover" + }, + "description": { + "label": "Descrizione" + }, + "tags": { + "label": "Tag" + }, + "track": { + "copyright": "Diritti d'autore", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + } + }, + "useReport": { + "account": { + "typeLabel": "Account" + }, + "album": { + "label": "Segnala questo album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Segnala questo artista…", + "typeLabel": "Artista", + "unknownLabel": "Artista sconosciuto" + }, + "channel": { + "label": "Segnala questo canale…", + "typeLabel": "Canale" + }, + "library": { + "label": "Segnala questa libreria…", + "typeLabel": "Libreria" + }, + "playlist": { + "label": "Segnala questa playlist…", + "typeLabel": "Playlist" + }, + "track": { + "label": "Segnala questa traccia…", + "typeLabel": "Traccia" + } + }, + "useReportConfigs": { + "account": { + "label": "Account", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Data di rilascio", + "title": "Titolo" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Canale" + }, + "creationDate": { + "label": "Data di creazione" + }, + "library": { + "description": "Descrizione", + "label": "Libreria" + }, + "musicbrainzId": { + "label": "ID MusicBrainz" + }, + "name": { + "label": "Nome" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Etichette" + }, + "track": { + "copyright": "Diritti d'autore", + "label": "Traccia", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + }, + "visibility": { + "label": "Visibilità" + } + } + }, + "useThemeList": { + "darkTheme": "Scuro", + "lightTheme": "Chiaro" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Hai inviato troppe richieste e sei stato limitato, riprova tra { delay }", + "rateLimitLater": "Hai inviato troppe richieste e sei stato limitato, riprova più tardi" + }, + "serviceWorker": { + "actions": { + "later": "Dopo", + "update": "Aggiorna" + }, + "newAppVersion": "È disponibile una nuova versione dell'app." + } + }, + "views": { "Notifications": { + "button": { + "read": "Segna tutte come lette", + "submit": "Ho capito!" + }, + "empty": { + "notifications": "Nessuna notifica da visualizzare." + }, + "header": { + "funkwhaleSupport": "Ti piace Funkwhale?", + "instanceSupport": "Supporta questo pod di Funkwhale", + "messages": "I tuoi messaggi", + "notifications": "Le tue notifiche" + }, + "label": { + "reminder": "Ricordamelo tra:", + "showRead": "Mostra notifiche lette" + }, + "link": { + "donate": "Dona", + "help": "Scopri altri modi per aiutare" + }, + "loading": { + "notifications": "Caricando le notifiche…" + }, + "message": { + "funkwhaleSupport": "Abbiamo notato che sei qui da un po'. Se Funkwhale ti è utile, potresti aiutarci a renderlo ancora migliore!" + }, "option": { "delay": { "30": "30 giorni", @@ -3461,584 +3227,63 @@ "never": "Mai" } }, - "link": { - "help": "Scopri altri modi per aiutare", - "donate": "Dona" + "title": "Notifiche" + }, + "Search": { + "button": { + "submit": "Invia Query di Ricerca" }, "header": { - "funkwhaleSupport": "Ti piace Funkwhale?", - "instanceSupport": "Supporta questo pod di Funkwhale", - "messages": "I tuoi messaggi", - "notifications": "Le tue notifiche" + "remote": "Cerca un oggetto remoto", + "rss": "Iscriviti al feed RSS di un podcast", + "search": "Cerca" }, - "button": { - "submit": "Ho capito!", - "read": "Segna tutte come lette" - }, - "loading": { - "notifications": "Caricando le notifiche…" - }, - "empty": { - "notifications": "Nessuna notifica da visualizzare." - }, - "title": "Notifiche", "label": { - "reminder": "Ricordamelo tra:", - "showRead": "Mostra notifiche lette" - }, - "message": { - "funkwhaleSupport": "Abbiamo notato che sei qui da un po'. Se Funkwhale ti è utile, potresti aiutarci a renderlo ancora migliore!" + "albums": "Albums", + "artists": "Artisti", + "playlists": "Playlist", + "podcasts": "Podcast", + "radios": "Radio", + "series": "Serie", + "tags": "Tag", + "tracks": "Tracce" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nome utente", - "loginStatus": { - "disabled": "Disabilitato", - "enabled": "Abilitato", - "label": "Stato dell'accesso" - }, - "displayName": "Nome visualizzato", - "email": "Indirizzo email", - "lastActivity": "Ultima attività", - "lastChecked": "Controllato l'ultima volta", - "permissions": "Permessi", - "signupDate": "Data di registrazione", - "userType": "Tipo" - }, - "audioContent": { - "cachedSize": "Dimensione in cache", - "megabyte": "MB", - "totalSize": "Dimensione totale", - "uploadQuota": "Quota di upload" - }, - "activity": { - "emittedFollows": "Emessi i follow della libreria", - "emittedMessages": "Messaggi emessi", - "firstSeen": "Visto per la prima volta", - "receivedFollows": "Ricevuto un follow della libreria" - } - }, - "header": { - "accountData": "Dati dell'account", - "activity": "Attività", - "audioContent": "Contenuto audio", - "localAccount": "Account locale", - "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", - "noPolicy": "Non hai nessuna regola attiva per questo account." - }, - "button": { - "addPolicy": "Aggiungi una nuova regola di moderazione" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "domain": "Dominio", - "libraries": "Librerie", - "linkedReports": "Segnalazioni collegate", - "openProfile": "Apri profilo", - "remoteProfile": "Apri profilo remoto", - "requests": "Richieste", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "tooltip": { - "uploadQuota": "Determina quanto contenuto un utente può caricare. Lascia vuoto per usare il valore predefinito dell'istanza." - }, - "option": { - "permission": { - "library": "Libreria", - "moderation": "Moderazione", - "settings": "Impostazioni" - } - }, - "description": { - "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." - }, - "notApplicable": "N/D", - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "Base": { - "link": { - "accounts": "Account", - "domains": "Domini", - "reports": "Segnalazioni", - "userRequests": "Richieste dell'Utente" - }, - "title": "Moderazione", - "menu": { - "secondary": "Menu secondario" - } - }, - "DomainsDetail": { - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "instanceData": "Dati dell'istanza", - "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", - "noPolicy": "Non hai nessuna regola attiva per questo dominio." - }, - "button": { - "addPolicy": "Aggiungi una nuova regola di moderazione", - "addToAllowList": "Aggiungi alla lista dei consentiti", - "refreshNodeInfo": "Aggiorna informazioni del nodo", - "removeFromAllowList": "Rimuovi dalla lista dei consentiti" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "knownAccounts": "Account conosciuti", - "libraries": "Librerie", - "website": "Apri sito web", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "activity": { - "emittedFollows": "Emessi i follow della libreria", - "emittedMessages": "Messaggi emessi", - "firstSeen": "Visto per la prima volta", - "receivedFollows": "Ricevuto un follow della libreria" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Errore durante il recupero delle informazioni del nodo", - "label": "Stato" - }, - "inAllowList": { - "label": "è presente sulla lista dei consentiti", - "false": "No", - "true": "Si" - }, - "lastChecked": "Controllato l'ultima volta", - "domainName": "Nome", - "software": { - "label": "Software" - }, - "totalUsers": "Utenti totali" - } - }, - "description": { - "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." - }, - "notApplicable": "N/D", - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "DomainsList": { - "button": { - "add": "Aggiungi" - }, - "label": { - "addDomain": "Aggiungi un dominio", - "addToAllowList": "Aggiungi alla lista dei consentiti" - }, - "title": "Domini", - "header": { - "domains": "Domini", - "failure": "Errore durante la creazione del dominio" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Tutto", - "resolved": "Risolti", - "unresolved": "Non risolto" - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "title": "Segnalazioni", - "header": { - "reports": "Segnalazioni" - }, - "label": { - "search": "Cerca", - "status": "Stato" - }, - "placeholder": { - "search": "Cerca per account, informazioni, dominio…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Tutto", - "approved": "Approvato", - "pending": "In sospeso", - "refused": "Rifiutata" - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "label": { - "search": "Cerca", - "status": "Stato" - }, - "placeholder": { - "search": "Cerca per username…" - }, - "title": "Richieste dell'Utente", - "header": { - "userRequests": "Richieste dell'Utente" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data di accesso", - "firstSeen": "Visto per la prima volta" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Dimensione in cache", - "duration": "Durata", - "size": "Dimensione", - "track": "Traccia" - }, - "upload": { - "name": "Nome" - } - }, - "link": { - "account": "Account", - "domain": "Dominio", - "importStatus": "Stato dell'importazione", - "library": "Libreria", - "remoteProfile": "Apri profilo remoto", - "type": "Tipo", - "django": "Vedi nell'amministrazione di Django", - "visibility": "Visibilità" - }, - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "local": "Locale", - "uploadData": "Data di caricamento" - }, - "button": { - "delete": "Elimina", - "download": "Scarica" - }, - "modal": { - "delete": { - "header": "Eliminare questo caricamento?", - "content": { - "warning": "Il caricamento sarà rimosso. Questa azione è irreversibile." - } - } - }, - "notApplicable": "N/D" - }, - "LibraryDetail": { - "link": { - "account": "Account", - "albums": "Albums", - "artists": "Artisti", - "domain": "Dominio", - "reports": "Segnalazioni collegate", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django", - "visibility": "Visibilità" - }, - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "libraryData": "Dati della libreria", - "local": "Locale" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "library": { - "description": "Descrizione", - "name": "Nome" - }, - "activity": { - "firstSeen": "Visto per la prima volta", - "followers": "Seguito da" - } - }, - "button": { - "delete": "Elimina" - }, - "modal": { - "delete": { - "header": "Eliminare questa libreria?", - "content": { - "warning": "La libreria sarà rimossa, ed anche i caricamenti associati e gli iscritti. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "AlbumDetail": { - "header": { - "activity": "Attività", - "albumData": "Dati dell'album", - "audioContent": "Contenuto audio", - "local": "Locale" - }, - "link": { - "artist": "Artista", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "album": { - "description": "Descrizione", - "title": "Titolo" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo album?", - "content": { - "warning": "L'album sarà rimosso, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "ArtistDetail": { - "header": { - "activity": "Attività", - "artistData": "Dati dell'artista", - "audioContent": "Contenuto audio", - "local": "Locale" - }, - "link": { - "albums": "Albums", - "category": "Categoria", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "artist": { - "description": "Descrizione", - "name": "Nome" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo artista?", - "content": { - "warning": "L'artista sarà rimosso, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "TagDetail": { - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "tagData": "Dati del tag" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "localProfile": "Apri profilo locale", - "tracks": "Tracce", - "django": "Vedi nell'amministrazione di Django" - }, - "button": { - "delete": "Elimina" - }, - "modal": { - "delete": { - "header": "Eliminare questo tag?", - "content": { - "warning": "Il tag selezionato sarà rimosso e scollegato da tutte le entità esistenti. Questa azione è irreversibile." - } - } - }, - "table": { - "activity": { - "firstSeen": "Visto per la prima volta" - }, - "tag": { - "name": "Nome" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Attività", - "local": "Locale", - "trackData": "Dati della traccia" - }, - "link": { - "album": "Album", - "albumArtist": "Artista dell'album", - "artist": "Artista", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "trackData": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "track": { - "copyright": "Diritti d'autore", - "description": "Descrizione", - "discNumber": "Numero disco", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questa traccia?", - "content": { - "warning": "La traccia sarà rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "edits": "Modifiche", - "libraries": "Librerie", - "tags": "Etichette", - "tracks": "Tracce", - "uploads": "Caricamenti" - }, - "title": "Gestisci libreria", - "menu": { - "secondary": "Menu secondario" - } - }, - "EditsList": { - "title": "Modifiche", - "header": { - "edits": "Modifiche della libreria" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Elimina", + "openRemote": "Apri profilo remoto", + "refresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "channelData": "Dati del canale" + }, + "label": { + "local": "Locale" + }, + "link": { + "django": "Vedi nell'amministrazione di Django", + "localProfile": "Apri profilo locale" + }, + "modal": { + "delete": { + "content": { + "warning": "Il canale sarà rimosso, così come i file caricati, le tracce e gli album ad esso associati. Questa azione è irreversibile." + }, + "header": "Eliminare questo canale?" + } + }, "table": { - "channelData": { - "account": "Account", - "category": "Categoria", - "description": "Descrizione", - "domain": "Dominio", - "name": "Nome", - "rss": "Feed RSS", - "url": "URL" + "activity": { + "edits": "Modifiche", + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "linkedReports": "Segnalazioni collegate", + "listenings": "Ascolti", + "playlists": "Playlist" }, "audioContent": { "albums": "Albums", @@ -4047,40 +3292,16 @@ "tracks": "Tracce", "uploads": "Caricamenti" }, - "activity": { - "edits": "Modifiche", - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "linkedReports": "Segnalazioni collegate", - "listenings": "Ascolti", - "playlists": "Playlist" + "channelData": { + "account": "Account", + "category": "Categoria", + "description": "Descrizione", + "domain": "Dominio", + "name": "Nome", + "rss": "Feed RSS", + "url": "URL" } }, - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "channelData": "Dati del canale" - }, - "button": { - "delete": "Elimina", - "openRemote": "Apri profilo remoto", - "refresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo canale?", - "content": { - "warning": "Il canale sarà rimosso, così come i file caricati, le tracce e gli album ad esso associati. Questa azione è irreversibile." - } - } - }, - "label": { - "local": "Locale" - }, - "link": { - "localProfile": "Apri profilo locale", - "django": "Vedi nell'amministrazione di Django" - }, "warning": { "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" } @@ -4104,53 +3325,1198 @@ "channels": "Canali", "federation": "Federazione", "instanceInfo": "Informazioni sull'istanza", - "settings": "Impostazioni dell'istanza", "moderation": "Moderazione", "music": "Musica", "playlists": "Playlist", "sections": "Sezioni", "security": "Sicurezza", + "settings": "Impostazioni dell'istanza", "signups": "Registrazioni", "stats": "Statistiche", "subsonic": "Subsonic", "ui": "Interfaccia Utente" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "albumData": "Dati dell'album", + "audioContent": "Contenuto audio", + "local": "Locale" + }, + "link": { + "artist": "Artista", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "L'album sarà rimosso, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." + }, + "header": "Eliminare questo album?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "album": { + "description": "Descrizione", + "title": "Titolo" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "ArtistDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "artistData": "Dati dell'artista", + "audioContent": "Contenuto audio", + "local": "Locale" + }, + "link": { + "albums": "Albums", + "category": "Categoria", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "L'artista sarà rimosso, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." + }, + "header": "Eliminare questo artista?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "artist": { + "description": "Descrizione", + "name": "Nome" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "edits": "Modifiche", + "libraries": "Librerie", + "tags": "Etichette", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Gestisci libreria" + }, + "EditsList": { + "header": { + "edits": "Modifiche della libreria" + }, + "title": "Modifiche" + }, + "LibraryDetail": { + "button": { + "delete": "Elimina" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "libraryData": "Dati della libreria", + "local": "Locale" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artisti", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti", + "visibility": "Visibilità" + }, + "modal": { + "delete": { + "content": { + "warning": "La libreria sarà rimossa, ed anche i caricamenti associati e gli iscritti. Questa azione è irreversibile." + }, + "header": "Eliminare questa libreria?" + } + }, + "table": { + "activity": { + "firstSeen": "Visto per la prima volta", + "followers": "Seguito da" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + }, + "library": { + "description": "Descrizione", + "name": "Nome" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "TagDetail": { + "button": { + "delete": "Elimina" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "tagData": "Dati del tag" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "django": "Vedi nell'amministrazione di Django", + "localProfile": "Apri profilo locale", + "tracks": "Tracce" + }, + "modal": { + "delete": { + "content": { + "warning": "Il tag selezionato sarà rimosso e scollegato da tutte le entità esistenti. Questa azione è irreversibile." + }, + "header": "Eliminare questo tag?" + } + }, + "table": { + "activity": { + "firstSeen": "Visto per la prima volta" + }, + "tag": { + "name": "Nome" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "local": "Locale", + "trackData": "Dati della traccia" + }, + "link": { + "album": "Album", + "albumArtist": "Artista dell'album", + "artist": "Artista", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "La traccia sarà rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." + }, + "header": "Eliminare questa traccia?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "track": { + "copyright": "Diritti d'autore", + "description": "Descrizione", + "discNumber": "Numero disco", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + }, + "trackData": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "UploadDetail": { + "button": { + "delete": "Elimina", + "download": "Scarica" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "local": "Locale", + "uploadData": "Data di caricamento" + }, + "link": { + "account": "Account", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "importStatus": "Stato dell'importazione", + "library": "Libreria", + "remoteProfile": "Apri profilo remoto", + "type": "Tipo", + "visibility": "Visibilità" + }, + "modal": { + "delete": { + "content": { + "warning": "Il caricamento sarà rimosso. Questa azione è irreversibile." + }, + "header": "Eliminare questo caricamento?" + } + }, + "notApplicable": "N/D", + "table": { + "activity": { + "accessedDate": "Data di accesso", + "firstSeen": "Visto per la prima volta" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate" + }, + "cachedSize": "Dimensione in cache", + "duration": "Durata", + "size": "Dimensione", + "track": "Traccia" + }, + "upload": { + "name": "Nome" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Aggiungi una nuova regola di moderazione" + }, + "description": { + "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." + }, + "header": { + "accountData": "Dati dell'account", + "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", + "activity": "Attività", + "audioContent": "Contenuto audio", + "localAccount": "Account locale", + "noPolicy": "Non hai nessuna regola attiva per questo account." + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "libraries": "Librerie", + "linkedReports": "Segnalazioni collegate", + "openProfile": "Apri profilo", + "remoteProfile": "Apri profilo remoto", + "requests": "Richieste", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "notApplicable": "N/D", + "option": { + "permission": { + "library": "Libreria", + "moderation": "Moderazione", + "settings": "Impostazioni" + } + }, + "table": { + "accountData": { + "displayName": "Nome visualizzato", + "email": "Indirizzo email", + "lastActivity": "Ultima attività", + "lastChecked": "Controllato l'ultima volta", + "loginStatus": { + "disabled": "Disabilitato", + "enabled": "Abilitato", + "label": "Stato dell'accesso" + }, + "permissions": "Permessi", + "signupDate": "Data di registrazione", + "userType": "Tipo", + "username": "Nome utente" + }, + "activity": { + "emittedFollows": "Emessi i follow della libreria", + "emittedMessages": "Messaggi emessi", + "firstSeen": "Visto per la prima volta", + "receivedFollows": "Ricevuto un follow della libreria" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "megabyte": "MB", + "totalSize": "Dimensione totale", + "uploadQuota": "Quota di upload" + } + }, + "tooltip": { + "uploadQuota": "Determina quanto contenuto un utente può caricare. Lascia vuoto per usare il valore predefinito dell'istanza." + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "Base": { + "link": { + "accounts": "Account", + "domains": "Domini", + "reports": "Segnalazioni", + "userRequests": "Richieste dell'Utente" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Moderazione" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Aggiungi una nuova regola di moderazione", + "addToAllowList": "Aggiungi alla lista dei consentiti", + "refreshNodeInfo": "Aggiorna informazioni del nodo", + "removeFromAllowList": "Rimuovi dalla lista dei consentiti" + }, + "description": { + "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." + }, + "header": { + "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", + "activity": "Attività", + "audioContent": "Contenuto audio", + "instanceData": "Dati dell'istanza", + "noPolicy": "Non hai nessuna regola attiva per questo dominio." + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "django": "Vedi nell'amministrazione di Django", + "knownAccounts": "Account conosciuti", + "libraries": "Librerie", + "tracks": "Tracce", + "uploads": "Caricamenti", + "website": "Apri sito web" + }, + "notApplicable": "N/D", + "table": { + "activity": { + "emittedFollows": "Emessi i follow della libreria", + "emittedMessages": "Messaggi emessi", + "firstSeen": "Visto per la prima volta", + "receivedFollows": "Ricevuto un follow della libreria" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + }, + "instanceData": { + "domainName": "Nome", + "inAllowList": { + "false": "No", + "label": "è presente sulla lista dei consentiti", + "true": "Si" + }, + "lastChecked": "Controllato l'ultima volta", + "nodeInfoStatus": { + "label": "Stato", + "value": "Errore durante il recupero delle informazioni del nodo" + }, + "software": { + "label": "Software" + }, + "totalUsers": "Utenti totali" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "DomainsList": { + "button": { + "add": "Aggiungi" + }, + "header": { + "domains": "Domini", + "failure": "Errore durante la creazione del dominio" + }, + "label": { + "addDomain": "Aggiungi un dominio", + "addToAllowList": "Aggiungi alla lista dei consentiti" + }, + "title": "Domini" + }, + "ReportsList": { + "header": { + "reports": "Segnalazioni" + }, + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "status": { + "all": "Tutto", + "resolved": "Risolti", + "unresolved": "Non risolto" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "placeholder": { + "search": "Cerca per account, informazioni, dominio…" + }, + "title": "Segnalazioni" + }, + "RequestsList": { + "header": { + "userRequests": "Richieste dell'Utente" + }, + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "status": { + "all": "Tutto", + "approved": "Approvato", + "pending": "In sospeso", + "refused": "Rifiutata" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "placeholder": { + "search": "Cerca per username…" + }, + "title": "Richieste dell'Utente" + } + }, "users": { "Base": { "link": { "invitations": "Inviti", "users": "Utenti" }, - "title": "Gestisci utenti", "menu": { "secondary": "Menu secondario" + }, + "title": "Gestisci utenti" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Accesso in corso…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Non è stato possibile confermare il tuo indirizzo e-mail", + "success": "Indirizzo e-mail confermato" + }, + "label": { + "confirmationCode": "Codice di conferma" + }, + "link": { + "back": "Torna alla pagina di accesso", + "login": "Procedi all'accesso" + }, + "message": { + "success": "Ora puoi usare il servizio senza limitazioni." + }, + "title": "Conferma il tuo indirizzo e-mail" + }, + "Login": { + "header": { + "login": "Accedi al tuo account Funkwhale" + }, + "title": "Accedi" + }, + "PasswordReset": { + "button": { + "requestReset": "Chiedi un reset della password" + }, + "header": { + "failure": "Errore durante la richiesta di un reset della password", + "reset": "Resetta la tua password" + }, + "help": { + "form": "Usa questo modulo per richiedere un reset della password. Ti invieremo una email all'indirizzo fornito con le istruzioni per resettare la tua password." + }, + "label": { + "email": "Indirizzo email dell'account" + }, + "link": { + "back": "Torna alla pagina di accesso" + }, + "placeholder": { + "email": "Inserisci l'indirizzo email collegato al tuo account" + }, + "title": "Resetta la tua password" + }, + "PasswordResetConfirm": { + "button": { + "update": "Aggiorna la tua password" + }, + "header": { + "failure": "Errore durante la modifica della password", + "success": "Password aggiornata con successo" + }, + "label": { + "newPassword": "Nuova password" + }, + "link": { + "back": "Torna alla pagina di accesso", + "login": "Procedi all'accesso" + }, + "message": { + "requestSent": "Se l'indirizzo email fornito nel passo precedente è valido e collegato a un account utente, dovresti ricevere un'email con le istruzioni per il reset nei prossimi minuti.", + "success": "La tua password è stata aggiornata con successo." + }, + "title": "Cambia la tua password" + }, + "Plugins": { + "title": "Gestisci i plugin" + }, + "ProfileActivity": { + "header": { + "playlists": "Playlist", + "recentlyFavorited": "Preferiti recenti", + "recentlyListened": "Ascoltate recentemente" + } + }, + "ProfileBase": { + "label": { + "self": "Questo sei tu!" + }, + "link": { + "activity": "Attività", + "domainView": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "overview": "Panoramica" + }, + "title": "Profilo di { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Annulla", + "createChannel": "Crea canale", + "next": "Prossimo passo", + "previous": "Passo precedente" + }, + "header": { + "channels": "Canali", + "libraries": "Librerie dell'Utente", + "sharedLibraries": "Questo utente ha condiviso le seguenti librerie" + }, + "link": { + "addNew": "Aggiungi nuovo" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Canale dell'artista" + }, + "header": "Crea canale", + "podcast": { + "header": "Canale podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crea un account su Funkwhale" + }, + "title": "Registrati" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina", + "delete": "Elimina…", + "edit": "Modifica…", + "embed": "Incorpora", + "play": "Riproduci", + "updateChannel": "Aggiorna canale", + "upload": "Carica" + }, + "header": { + "artistChannel": "Canale dell'artista", + "podcastChannel": "Canale podcast" + }, + "link": { + "channelEpisodes": "Tutti gli Episodi", + "channelOverview": "Panoramica", + "channelTracks": "Tracce", + "domainView": "Visualizza su { dominio }", + "mirrored": "Mirror da { dominio }", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "listenings": "{ n } ascolto | { n } ascolti", + "subscribers": "{ n } iscritto | { n } iscritti", + "tracks": "{ n } traccia | { n } tracce" + }, + "modal": { + "delete": { + "content": { + "warning": "Il canale sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." + }, + "header": "Eliminare questo Canale?" + }, + "embed": { + "header": "Incorpora il lavoro di questo artista nel tuo sito web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Se stai usando Mastodon o altre applicazioni per il fediverso, puoi iscriverti a questo account:" + }, + "header": "Iscriviti sul Fediverso" + }, + "funkwhale": { + "header": "Iscriviti su Funkwhale" + }, + "header": "Iscriviti a questo canale", + "rss": { + "content": { + "help": "Copia-incolla il seguente url nella tua app di podcasting preferita:" + }, + "header": "Iscriviti via RSS" + } + } + }, + "title": "Canale" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Ultimi episodi", + "latestTracks": "Ultime tracce", + "series": "Serie", + "uploadsFailure": "Non è stato possibile pubblicare alcuni file", + "uploadsProcessing": "I file caricati stanno venendo elaborati", + "uploadsSuccess": "Upload pubblicati con successo" + }, + "link": { + "addAlbum": "Aggiungi nuovo", + "erroredUploads": "Visualizza caricamenti falliti", + "skippedUploads": "Visualizza caricamenti saltati" + }, + "message": { + "processing": "I file caricati stanno venendo elaborati da Funkwhale e saranno pubblicati a breve." + }, + "meta": { + "progress": "File processati:" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Annulla", + "subscribe": "Iscriviti" + }, + "link": { + "addNew": "Aggiungi nuovo" + }, + "modal": { + "subscription": { + "header": "Iscrizione" + } + }, + "placeholder": { + "search": "Filtra per nome…" + }, + "title": "Canali a cui sei iscritto" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Librerie", + "tracks": "Tracce" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Aggiungi contenuto" + }, + "Home": { + "button": { + "start": "Per iniziare" + }, + "description": { + "channel": { + "1": "Se sei un musicista o un podcaster, i canali sono pensati per te!", + "2": "Condividi le tue opere pubblicamente e ottieni iscritti su Funkwhale, il Fediverso o qualsiasi applicazione di podcasting." + }, + "follow": "Segui librerie di altri utenti per avere accesso a nuova musica. Le librerie pubbliche possono essere seguite immediatamente, mentre seguire le librerie private richiedono l'approvazione del loro proprietario.", + "upload": "Carica la tua libreria musicale personale su Funkwhale per ascoltarla da ovunque e condividerla con amici e famiglia." + }, + "header": { + "channel": "Pubblica le tue opere in un canale", + "follow": "Segui librerie remote", + "upload": "Carica contenuto di terze parti in una libreria" + }, + "help": { + "uploadQuota": "Questa istanza offre fino a {quota} di spazio di archiviazione per ogni utente." + }, + "title": "Aggiungi e gestisci contenuti" + }, + "libraries": { + "Card": { + "button": { + "upload": "Carica" + }, + "label": { + "size": "Dimensione totale dei file in questa libreria" + }, + "link": { + "details": "Dettagli Libreria" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "FilesTable": { + "action": { + "delete": "Elimina", + "restartImport": "Riavvia importazione" + }, + "button": { + "showStatus": "Mostra informazioni sullo stato di caricamento di questa traccia" + }, + "empty": { + "noTracks": "Non sono ancora state aggiunte tracce a questa libreria" + }, + "label": { + "importStatus": "Stato dell'importazione", + "search": "Cerca" + }, + "notApplicable": "N/D", + "option": { + "status": { + "all": "Tutto", + "draft": "Bozza", + "failed": "Fallito", + "finished": "Finito", + "pending": "In sospeso", + "skipped": "Saltato" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per titolo, artista, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artista", + "duration": "Durata", + "importStatus": "Stato dell'importazione", + "size": "Dimensione", + "title": "Titolo", + "uploadDate": "Data di caricamento" + } + } + } + }, + "Form": { + "button": { + "confirm": "Elimina libreria", + "create": "Crea libreria", + "delete": "Elimina", + "update": "Aggiorna libreria" + }, + "description": { + "library": "Le librerie sono di aiuto per organizzare e condividere la tua collezione musicale. Puoi caricare la tua musica su Funkwhale e condividerla con amici e parenti.", + "visibility": "Sarai in grado di condividere la tua libreria con altre persone, indipendentemente dalla sua visibilità." + }, + "header": { + "failure": "Errore" + }, + "label": { + "description": "Descrizione", + "name": "Nome", + "visibility": "Visibilità" + }, + "message": { + "libraryCreated": "Libreria creata", + "libraryDeleted": "Libreria eliminata", + "libraryUpdated": "Libreria aggiornata" + }, + "modal": { + "delete": { + "content": { + "warning": "La libreria e tutte le sue tracce saranno eliminate. Questa azione è irreversibile." + }, + "header": "Eliminare questa libreria?" + } + }, + "placeholder": { + "description": "Questa libreria contiene la mia musica personale, spero vi piaccia.", + "name": "La mia eccezionale libreria" + } + }, + "Home": { + "empty": { + "noLibrary": "Sembra che tu non abbia ancora nessuna libreria, è tempo di crearne una." + }, + "header": { + "libraries": "Le mie librerie" + }, + "link": { + "createLibrary": "Crea una nuova libreria" + }, + "loading": { + "libraries": "Caricando le Librerie…" + } + }, + "Quota": { + "button": { + "purge": "Rimuovi" + }, + "header": { + "currentUsage": "Utilizzo attuale" + }, + "label": { + "currentUsage": "{ current } usato su { max } consentito", + "errored": "File con errore", + "pending": "File in sospeso", + "skipped": "File saltati" + }, + "link": { + "viewFiles": "Vedi files" + }, + "loading": { + "currentUsage": "Caricando i dati di utilizzo…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Rimuove completamente le tracce caricate ma che non sono state processate correttamente, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file con errori?" + }, + "purgePending": { + "content": { + "description": "Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file in attesa?" + }, + "purgeSkipped": { + "content": { + "description": "Rimuove completamente le tracce caricate ma che sono state saltate durante la fase di importazione, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file saltati?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Annulla richiesta di seguire", + "follow": "Segui", + "pending": "Richiesta di seguire in attesa di approvazione", + "unfollow": "Smetti di seguire" + }, + "label": { + "scanFailure": "Errore durante la scansione", + "scanPartialSuccess": "Scansione eseguita con errori", + "scanPending": "Scansione in sospeso", + "scanProgress": "Scansionando… ({ progress }%)", + "scanSuccess": "Scansionata", + "sharingLink": "Condividi collegamento" + }, + "link": { + "scan": "Scansiona ora", + "scanDetails": "Dettagli" + }, + "message": { + "scanLaunched": "Scansione avviata", + "scanSkipped": "Scansione saltata (la scansione precedente è troppo recente)" + }, + "meta": { + "failedTracks": "Tracce con errore:", + "lastUpdate": "Ultimo aggiornamento:", + "tracks": "{ n } traccia | { n } tracce" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." + }, + "header": "Smettere di seguire questa libreria?" + } + }, + "tooltip": { + "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", + "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" + } + }, + "Home": { + "button": { + "refresh": "Aggiorna" + }, + "description": { + "remoteLibraries": "Le librerie remote sono di proprietà di altri utenti nella rete. Puoi accedervi se sono pubbliche o se ti è stato dato l'accesso ad esse." + }, + "header": { + "knownLibraries": "Librerie conosciute", + "remoteLibraries": "Librerie remote" + }, + "loading": { + "remoteLibraries": "Caricando le librerie remote…" + } + }, + "ScanForm": { + "button": { + "submit": "Invia ricerca" + }, + "header": { + "failure": "Non è stato possibile recuperare la libreria remota" + }, + "label": { + "search": "Cerca una libreria remota" + }, + "placeholder": { + "url": "Inserisci l'URL di una libreria" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artisti", - "playlists": "Playlist", - "podcasts": "Podcast", - "radios": "Radio", - "series": "Serie", - "tags": "Tag", - "tracks": "Tracce" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!" + } }, - "header": { - "search": "Cerca", - "remote": "Cerca un oggetto remoto", - "rss": "Iscriviti al feed RSS di un podcast" + "DetailOverview": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!" + } }, - "button": { - "submit": "Invia Query di Ricerca" + "DetailTracks": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!" + } + }, + "Edit": { + "button": { + "accept": "Accetta", + "reject": "Rifiuta" + }, + "empty": { + "noFollowers": "Nessuno segue questa libreria" + }, + "header": { + "followers": "Seguito da", + "libraryContents": "Contenuto della libreria" + }, + "loading": { + "followers": "Caricando la lista di chi ti segue…" + }, + "table": { + "action": { + "header": { + "action": "Azione", + "date": "Data", + "status": "Stato", + "user": "Utente" + }, + "status": { + "accepted": "Accettato", + "pending": "Approvazione in sospeso", + "rejected": "Rifiutato" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Modifica", + "upload": "Carica" + }, + "description": { + "sharingLink": "Condividi questo link con altri utenti in modo che possano richiedere l'accesso alla tua libreria incollandolo nella barra di ricerca della loro istanza." + }, + "label": { + "instance": "Ristretto", + "private": "Privato", + "public": "Pubblico", + "sharingLink": "Condividi collegamento" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "owner": "Proprietà di { username }", + "tracks": "Tracce" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Libreria", + "tooltip": { + "instance": "Questa libreria è ristretta agli utenti di questa istanza", + "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", + "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina playlist", + "delete": "Elimina", + "edit": "Modifica", + "embed": "Incorpora", + "playAll": "Riproduci tutto", + "stopEdit": "Smetti di modificare" + }, + "empty": { + "noTracks": "Non ci sono ancora tracce in questa playlist" + }, + "header": { + "tracks": "Tracce" + }, + "meta": { + "tracks": "Lista di riproduzione contenente { n } traccia, di { username } | Lista di riproduzione contenente { n } tracce, di { username }" + }, + "modal": { + "delete": { + "content": { + "warning": "Questo cancellerà questa lista di riproduzione e non può essere annullato." + }, + "header": "Vuoi eliminare la playlist \"{ playlist }\"?" + }, + "embed": { + "header": "Incorpora questo album nel tuo sito web" + } + }, + "title": "Playlist" + }, "List": { + "button": { + "create": "Crea playlist", + "manage": "Gestisci le tue playlist", + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando playlists", + "playlists": "Playlist" + }, + "label": { + "search": "Cerca" + }, "ordering": { "direction": { "ascending": "Crescente", @@ -4159,58 +4525,11 @@ }, "label": "Ordinamento" }, - "header": { - "browse": "Sfogliando playlists", - "playlists": "Playlist" - }, - "button": { - "create": "Crea playlist", - "manage": "Gestisci le tue playlist", - "search": "Cerca" - }, - "placeholder": { - "search": "Inserisci il nome di una playlist…" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, "pagination": { "results": "Risultati per pagina" }, - "label": { - "search": "Cerca" - } - }, - "Detail": { - "button": { - "cancel": "Annulla", - "delete": "Elimina", - "confirm": "Elimina playlist", - "edit": "Modifica", - "embed": "Incorpora", - "playAll": "Riproduci tutto", - "stopEdit": "Smetti di modificare" - }, - "modal": { - "delete": { - "header": "Vuoi eliminare la playlist \"{ playlist }\"?", - "content": { - "warning": "Questo cancellerà questa lista di riproduzione e non può essere annullato." - } - }, - "embed": { - "header": "Incorpora questo album nel tuo sito web" - } - }, - "title": "Playlist", - "meta": { - "tracks": "Lista di riproduzione contenente { n } traccia, di { username } | Lista di riproduzione contenente { n } tracce, di { username }" - }, - "empty": { - "noTracks": "Non ci sono ancora tracce in questa playlist" - }, - "header": { - "tracks": "Tracce" + "placeholder": { + "search": "Inserisci il nome di una playlist…" } } }, @@ -4220,287 +4539,22 @@ "confirm": "Elimina radio", "edit": "Modifica…" }, - "modal": { - "delete": { - "header": "Vuoi eliminare la radio \"{ radio }\"?", - "content": { - "warning": "Questo cancellerà questa radio e non può essere annullato." - } - } - }, "empty": { "noTracks": "Non sono ancora state aggiunte tracce a questa radio" }, - "title": "Radio", "header": { "tracks": "Tracce" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } traccia è stata aggiunta alla tua coda | { n } tracce sono state aggiunte alla tua coda" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Accedi ai file audio, librerie, artisti, album e tracce", - "label": "Librerie e caricamenti" - }, - "filters": { - "description": "Accesso ai filtri del contenuto", - "label": "Filtri di contenuto" - }, - "profile": { - "description": "Accedi a email, nome utente e informazioni del profilo", - "label": "Profilo" - }, - "edits": { - "description": "Accesso alle modifiche", - "label": "Modifiche" - }, - "follows": { - "description": "Accesso ai seguiti", - "label": "Segue" - }, - "listenings": { - "description": "Accedi alla cronologia di ascolto", - "label": "Ascolti" - }, - "reports": { - "description": "Accesso ai report di moderazione", - "label": "Segnalazioni" - }, - "notifications": { - "description": "Accesso alle notifiche", - "label": "Notifiche" - }, - "playlists": { - "description": "Accesso alle playlist", - "label": "Playlist" - }, - "radios": { - "description": "Accesso alle radio", - "label": "Radio" - }, - "security": { - "description": "Accesso alle impostazioni di sicurezza come password e autorizzazioni", - "label": "Sicurezza" - }, - "favorites": { - "label": "Preferiti" - } }, - "filters": { - "accessedDate": "Data di accesso", - "albumTitle": "Nome album", - "artistName": "Nome dell'artista", - "bitrate": "Bitrate", - "creationDate": "Data di creazione", - "domain": "Dominio", - "duration": "Durata", - "expirationDate": "Data di scadenza", - "firstSeen": "Visto per la prima volta in data", - "followers": "Seguito da", - "itemsCount": "Oggetti", - "lastActivity": "Ultima attività", - "lastSeen": "Visto l'ultima volta in data", - "modificationDate": "Data di modifica", - "name": "Nome", - "receivedMessages": "Messaggi ricevuti", - "releaseDate": "Data di rilascio", - "dateJoined": "Data di registrazione", - "size": "Dimensione", - "trackTitle": "Nome traccia", - "uploads": "Caricamenti", - "username": "Nome utente", - "users": "Utenti" - }, - "fields": { - "privacyLevel": { - "label": "Visibilità dell'attività", - "help": "Imposta il livello di visibilità delle tue attività", - "shortChoices": { - "public": "Tutti", - "instance": "Istanza", - "private": "Privato" + "modal": { + "delete": { + "content": { + "warning": "Questo cancellerà questa radio e non può essere annullato." }, - "choices": { - "instance": "Tutti su questa istanza", - "public": "Tutti, su tutte le istanze", - "private": "Nessuno tranne me" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoria", - "choices": { - "illegalContent": "Contenuto illegale", - "invalidMetadata": "Metadati non validi", - "offensiveContent": "Contenuto offensivo", - "other": "Altro", - "takedownRequest": "Richiesta di rimozione" - } - }, - "importStatus": { - "label": "Clicca per visualizzare più informazioni sul processo di importazione di questo caricamento", - "choices": { - "draft": { - "label": "Bozza", - "help": "Questa traccia è stata caricata, ma la sua elaborazione non è ancora stata programmata" - }, - "errored": { - "label": "Si è verificato un errore", - "help": "Non è stato possibile processare questa traccia, assicurati che sia etichettata correttamente" - }, - "finished": { - "label": "Finito", - "help": "Importato" - }, - "pending": { - "label": "In sospeso", - "help": "Questa traccia è stata caricata, ma non è ancora stata processata dal server" - }, - "skipped": { - "label": "Saltato", - "help": "Questa traccia è già presente in una delle tue librerie" - } - } - }, - "contentCategory": { - "label": "Categoria del contenuto", - "choices": { - "music": "Musica", - "other": "Altro", - "podcast": "Podcast" - } + "header": "Vuoi eliminare la radio \"{ radio }\"?" } - } + }, + "title": "Radio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Account" - }, - "album": { - "typeLabel": "Album", - "label": "Segnala questo album…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Segnala questo artista…" - }, - "channel": { - "typeLabel": "Canale", - "label": "Segnala questo canale…" - }, - "library": { - "typeLabel": "Libreria", - "label": "Segnala questa libreria…" - }, - "playlist": { - "typeLabel": "Playlist", - "label": "Segnala questa playlist…" - }, - "track": { - "label": "Segnala questa traccia…", - "typeLabel": "Traccia" - } - }, - "useReportConfigs": { - "account": { - "label": "Account", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Data di rilascio", - "title": "Titolo" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Canale" - }, - "track": { - "copyright": "Diritti d'autore", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo", - "label": "Traccia" - }, - "creationDate": { - "label": "Data di creazione" - }, - "library": { - "description": "Descrizione", - "label": "Libreria" - }, - "musicbrainzId": { - "label": "ID MusicBrainz" - }, - "name": { - "label": "Nome" - }, - "playlist": { - "label": "Playlist" - }, - "tags": { - "label": "Etichette" - }, - "visibility": { - "label": "Visibilità" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Diritti d'autore", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo" - }, - "cover": { - "label": "Cover" - }, - "description": { - "label": "Descrizione" - }, - "artist": { - "name": "Nome" - }, - "album": { - "releaseDate": "Data di rilascio", - "title": "Titolo" - }, - "tags": { - "label": "Tag" - } - } - }, - "useThemeList": { - "darkTheme": "Scuro", - "lightTheme": "Chiaro" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "È disponibile una nuova versione dell'app.", - "actions": { - "later": "Dopo", - "update": "Aggiorna" - } - }, - "axios": { - "rateLimitDelay": "Hai inviato troppe richieste e sei stato limitato, riprova tra { delay }", - "rateLimitLater": "Hai inviato troppe richieste e sei stato limitato, riprova più tardi" } } } diff --git a/front/src/locales/ja_JP.json b/front/src/locales/ja_JP.json index f8b2ae8ed..2ff804418 100644 --- a/front/src/locales/ja_JP.json +++ b/front/src/locales/ja_JP.json @@ -8,7 +8,7 @@ "findApp": "その他のデバイスでFunkwhaleを公式アプリを利用して楽しむ。", "funkwhale": "Funkwhaleはコミュニティによるプロジェクトであり、脱中央集権的な開かれたネットワークの中で音楽や音声を聞いたり、シェアすることができます。", "publicContent": "このポッドでシェアされている、公開アルバムやプレイリストを聞く。", - "quota": "また、このポッドのユーザーは自分のコンテンツをアップロードするための、{ quota }の無料ストレージを使えます!", + "quota": "また、このポッドのユーザーは自分のコンテンツをアップロードするための、{quota}の無料ストレージを使うことができます!", "signup": "今すぐ新規アカウント登録をして、あなたの好みの曲をお気に入りに追加する、プレイリストを作成する、新しいコンテンツを探す等々をしてみましょう!" }, "header": { @@ -18,6 +18,9 @@ "publicContent": "公開コンテンツを探す", "signup": "アカウント登録" }, + "help": { + "closedRegistrations": "このポッドでの新規アカウント登録は開放されていません。以下のリンクから、他のポッドに新規アカウント登録することができます。" + }, "link": { "findOtherPod": "他のポッドを探す", "learnMore": "さらに詳しく" @@ -31,7 +34,7 @@ }, "stat": { "activeUsers": "{ count } 人のアクティブユーザー", - "hoursOfMusic": "時間の音楽" + "hoursOfMusic": "0 時間分の音楽 | {n} 時間分の音楽 | {n} 時間分の音楽" }, "title": "このポッドについて" }, @@ -41,7 +44,7 @@ "anonymousAccess": "匿名アクセス", "federation": "連合機能", "quota": "アップロード上限", - "registrations": "アカウントの登録", + "registrations": "新規アカウント登録", "status": { "closed": "不可能", "disabled": "無効", @@ -79,7 +82,7 @@ "activeUsers": "アクティブユーザー", "albumsCount": "アルバム", "artistsCount": "アーティスト", - "hoursOfMusic": "時間の音楽", + "hoursOfMusic": "0 時間分の音楽 | {n} 時間分の音楽 | {n} 時間分の音楽", "listeningsCount": "再生", "tracksCount": "曲" }, @@ -104,7 +107,10 @@ "newChannels": "新しいチャンネル", "signup": "アカウント登録", "statistics": "統計", - "welcome": "{ podName }へようこそ!" + "welcome": "{podName} へようこそ!" + }, + "help": { + "registrationsClosed": "このポッドでの新規アカウント登録は開放されていません。以下のリンクから、他のポッドに新規アカウント登録することができます。" }, "link": { "findOtherPod": "他のポッドを探す", @@ -130,7 +136,7 @@ }, "stat": { "activeUsers": "{ count } 人のアクティブユーザー", - "hoursOfMusic": "{ count } 時間分の音楽" + "hoursOfMusic": "0 時間分の音楽 | {n} 時間分の音楽 | {n} 時間分の音楽" }, "title": "ホーム" }, @@ -154,24 +160,34 @@ }, "header": { "failure": "曲を読み込むことができませんでした", + "noSources": "この曲には利用可能な情報がありません。", "radio": "ラジオを再生中です" }, "label": { "addArtistContentFilter": "このアーティストのコンテンツを隠す…", "duration": "再生時間", + "enterFullscreen": "フルスクリーンモードにする", + "exitFullscreen": "フルスクリーンモードから離れる", + "favorite": "曲をお気に入りにする", "next": "次の曲", "pause": "停止する", "play": "再生", + "populatingRadio": "ラジオの曲を取得しています...", "previous": "前の曲", "queue": "再生キュー", - "remove": "除く" + "remove": "削除", + "restart": "曲の再生を再開", + "selectTrack": "曲を選ぶ", + "showCoverArt": "カバーアートを表示" }, "message": { "automaticPlay": "次の曲を数秒以内に自動的に再生します…", - "radio": "新しい曲は自動的に追加されます。" + "radio": "新しい曲は自動的に追加されます。", + "webglUnsupported": "あなたのブラウザーはWebGL2をサポートしていないようです。" }, "meta": { - "queuePosition": "{ length } 曲中 { index } 曲目", + "end": "再生予定時間", + "queuePosition": "{length} 曲中 {index} 曲目", "startTime": "00:00", "unknownAlbum": "不明なアルバム", "unknownArtist": "不明なアーティスト" @@ -190,12 +206,16 @@ "fediverse": "このフォームを利用して、Fediverseのどこかでホストされているチャンネルを購読しましょう。", "rss": "このフォームを利用して、URLからRSSフィードを購読しましょう。" }, + "error": { + "fetchFailed": "このオブジェクトを読み込むことができません" + }, "header": { - "fetchFailed": "オブジェクトをフェッチ中にエラーが発生しました" + "fetchFailed": "オブジェクトを取得中にエラーが発生しました" }, "label": { "fediverse": { "fieldLabel": "Fediverseのオブジェクト", + "fieldPlaceholder": "{'@'}username{'@'}example.com", "title": "Fediverse上でホストされている、ポッドキャストを登録する" }, "rss": { @@ -225,7 +245,7 @@ "url": "FunkwhaleインスタンスのURL" }, "message": { - "newUrl": "現在{ url }のFunkwhaleインスタンスを利用しています" + "newUrl": "現在{url}のFunkwhaleインスタンスを利用しています" } }, "ShortcutsModal": { @@ -233,7 +253,7 @@ "close": "閉じる" }, "header": { - "modal": "キーボードショートカット一" + "modal": "キーボードショートカット" }, "shortcut": { "audio": { @@ -243,7 +263,7 @@ "increaseVolume": "音量を上げる", "label": "オーディオプレイヤーのキーボードショートカット", "playNext": "次の曲を再生", - "playPause": "曲を止める・再生する", + "playPause": "曲を停止する、再生する", "playPrevious": "前の曲を再生", "seekBack30": "30秒戻る", "seekBack5": "5秒戻る", @@ -252,7 +272,7 @@ "shuffleQueue": "再生キューをシャッフルする", "toggleFavorite": "お気に入りにする・お気に入りから外す", "toggleLoop": "再生キューの曲をループ再生する・ループ再生の停止", - "toggleMute": "ミュート・ミュート解除" + "toggleMute": "ミュート、ミュート解除" }, "general": { "focus": "検索窓に移動する", @@ -296,6 +316,7 @@ "radios": "ラジオ", "search": "検索する", "settings": "設定", + "switchInstance": "インスタンスを切り替える", "users": "ユーザー" } }, @@ -365,6 +386,10 @@ "header": { "error": "チャンネルの保存中にエラーが発生しました。" }, + "help": { + "discography": "あなたが作成した音楽を投稿します。アルバムとシングルの魅力的なディスコグラフィーとして。", + "podcast": "あなたのエピソードをホストし、コミュニティに最新情報を届けましょう。" + }, "label": { "category": "カテゴリ", "description": "説明", @@ -484,6 +509,14 @@ "unknownArtist": "不明なアーティスト" } }, + "PlayerControls": { + "labels": { + "next": "次の曲", + "pause": "停止", + "play": "再生", + "previous": "前の曲" + } + }, "Search": { "empty": { "noAlbums": "入力した内容にマッチするアルバムはありません", @@ -632,6 +665,7 @@ }, "header": { "appDetails": "アプリケーションの詳細", + "appSecretWarning": "このトークンを安全な場所にコピーしてください。", "editApp": "アプリケーションの編集" }, "help": { @@ -645,6 +679,9 @@ "link": { "settings": "設定に戻る" }, + "message": { + "appSecretWarning": "一度このスクリーンを離れると、二度と見ることはできません。" + }, "title": "アプリケーションの編集" }, "ApplicationForm": { @@ -655,6 +692,9 @@ "header": { "failure": "変更を保存できません" }, + "help": { + "redirectUri": "もしあなたのアプリケーションをWeb上で利用できない場合、\"urn:ietf:wg:oauth:2.0:oob\"をリダイレクトURIとして利用してください" + }, "label": { "name": "名前", "redirectUri": "リダイレクトURL", @@ -686,8 +726,8 @@ "access": "{ app } があなたのFunkwhaleアカウントへのアクセスを要求しています", "allScopes": "フルアクセス", "authorize": "サードパーティアプリを認証", - "authorizeFailure": "アプリケーションの認証中にエラーが発生しました", - "fetchFailure": "アプリケーションのデータをフェッチ中にエラーが発生しました", + "authorizeFailure": "アプリケーションデータを取得中にエラーが発生しました", + "fetchFailure": "アプリケーションデータを取得中にエラーが発生しました", "readOnly": "読込専用", "writeOnly": "書き込み専用" }, @@ -767,7 +807,7 @@ "edit": "編集する", "password": "パスワードを変更", "refresh": "更新", - "remove": "除く", + "remove": "削除", "removeApp": "アプリを削除", "revoke": "取り消し", "revokeAccess": "アクセスの取り消し", @@ -782,6 +822,7 @@ "paragraph2": "以前のSubsonic API パスワードを使っているクライアントアプリのパスワードを更新する必要があります。" }, "contentFilters": "コンテンツフィルターは見たくないコンテンツを隠すのに役立ちます。", + "deleteAccount": "以下のフォームを利用することで、あなたのアカウントと関連した全てのデータを永久に、そして元に戻せないように削除します。削除の際に確認を求められます。", "plugins": "プラグインを使うことでFunkwhaleを拡張し、追加の機能を導入します。", "yourApps": "あなたが登録したアプリケーションのリストです。" }, @@ -838,7 +879,10 @@ "header": "アカウントを削除しますか?" }, "deleteApp": { - "header": "「{ application }」を削除しますか?" + "content": { + "warning": "アプリケーションと関連した全てのトークンを永久に削除します。" + }, + "header": "{app}を削除しますか?" }, "revokeApp": { "header": "\"{ application }\"のアプリケーションへのアクセスを取り消しますか?" @@ -867,7 +911,7 @@ }, "title": "アカウント設定", "warning": { - "deleteAccount": "あなたのアカウントは数分でサーバーから削除されます。また、あなたのデータのコピーを保持しているかもしれない、他のサーバーに通知されます。これによって、他のサーバーであなたのデータを削除するための処理ができるようになります。いくつかのサーバーはオフライン状態にある、または削除処理に積極的には応じないかもしれませんが、ご了承下さい。" + "deleteAccount": "あなたのアカウントは数分以内にサーバーから削除されます。また、このサーバーからあなたのデータの一部のコピーを保持しているかもしれない、他のサーバーに通知します。これによって、あなたのデータを削除するための処理が他のサーバーで可能になります。いくつかのサーバーはオフライン状態にあるかもしれない、または削除処理に積極的には応じないかもしれませんが、ご了承下さい。" } }, "SignupForm": { @@ -887,7 +931,7 @@ "message": { "accountCreated": "アカウントの作成に成功しました。ログインを試みる前に、メールアドレスの認証を行って下さい。", "awaitingReview": "アカウントリクエストの送信に成功しました。あなたのアカウントリクエストへのモデレーションチームによる審査が完了した際は、メールでお知らせします。", - "registrationClosed": "このインスタンスでの新規アカウント登録はできません。アカウント登録には招待コードが必要です。", + "registrationClosed": "このポッドでの新規アカウント登録はできません。新規アカウント登録には招待コードが必要です。", "requiresReview": "このポッドでは新規アカウント登録は開放されてますが、登録が認められる前にモデレーターによって審査されます。" }, "placeholder": { @@ -933,6 +977,9 @@ "header": "Subsonic APIアクセスを無効にしますか?" }, "newPassword": { + "content": { + "warning": "これによって、あなたは現在のパスワードを使用しているデバイスからログアウトされます。" + }, "header": "新しいSubsonic APIのパスワードをリクエストしますか?" } } @@ -993,7 +1040,7 @@ "button": { "edit": "編集する", "ignore": "無視する", - "remove": "除く", + "remove": "削除", "resume": "再開する", "retry": "再度試す" }, @@ -1020,6 +1067,7 @@ "label": { "description": "説明", "image": "曲画像", + "position": "トラックナンバー", "tags": "タグ", "title": "曲名" } @@ -1069,7 +1117,7 @@ }, "AttachmentInput": { "button": { - "remove": "除く" + "remove": "削除" }, "header": { "failure": "アップロードしたファイルを保存できませんでした" @@ -1124,7 +1172,7 @@ }, "Duration": { "meta": { - "hours": "{ hours } 時間 { minutes } 分", + "hours": "{hours} 時間 {minutes} 分", "minutes": "{ minutes } 分" } }, @@ -1155,7 +1203,7 @@ }, "LoginModal": { "description": { - "noAccess": "" + "noAccess": "あなたにはアクセス権限がありません" }, "header": { "unauthenticated": "認証されていません" @@ -1180,6 +1228,11 @@ "failure": "説明の更新中にエラーが発生しました" } }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, "UserMenu": { "label": { "language": "言語", @@ -1232,7 +1285,7 @@ "favorites": { "List": { "empty": { - "noFavorites": "お気に入りに加えられた曲がまだありません" + "noFavorites": "まだお気に入りに追加された曲はありません" }, "header": { "favorites": "{ count } 個のお気に入り" @@ -1271,10 +1324,13 @@ }, "description": { "failure": "データの更新中にエラーが発生しました:", + "pending": "更新リクエストがこのサーバーでは時間内に処理されませんでした。後ほど処理されます。", + "skipped": "リモートサーバーから応答はありましたが、返されたデータはFunkwhaleではサポートされていません。", "success": "リモートサーバーからのデータが正常に更新されました。" }, "header": { "failure": "更新エラー", + "pending": "更新保留中", "refresh": "リモートサーバーからのオブジェクトを更新中…", "saveFailure": "設定の保存中にエラーが発生しました", "skipped": "更新がスキップされました", @@ -1282,7 +1338,7 @@ }, "loader": { "awaitingResult": "フェッチの結果を待っています…", - "fetchRequest": "フェッチをリクエストする…" + "fetchRequest": "フェッチをリクエストしています…" }, "table": { "error": { @@ -1293,8 +1349,10 @@ "value": { "connectionError": "リモートのサーバーに接続できません", "httpError": "リモートサーバーとの通信中にHTTPエラーが発生しました", - "invalidAttributesError": "リモートサーバーから返されたデータに無効な属性があるか、属性がありません", + "httpStatus": "リモートサーバーが HTTP {status} を返しました", + "invalidAttributesError": "リモートサーバーから返されたデータに無効な属性があるか、属性自体がありません", "invalidJsonError": "リモートのサーバーが無効なJSONまたはJSON-LDデータを返しました", + "timeoutError": "リモートサーバーが十分なスピードで応答しませんでした", "unknownError": "不明なエラー" } } @@ -1505,7 +1563,13 @@ "header": { "modification": "修正 { id }" }, + "link": { + "track": "曲 #{id} - {name}" + }, "modal": { + "content": { + "warning": "この提案は完全に削除され、この削除アクションを取り消すことはできません。" + }, "delete": { "header": "この提案を削除しますか?" } @@ -1519,7 +1583,9 @@ "table": { "update": { "header": { - "field": "フィールド" + "field": "フィールド", + "newValue": "新しい値", + "oldValue": "古い値" }, "notApplicable": "N/A" } @@ -1529,21 +1595,25 @@ "button": { "cancel": "キャンセル", "clear": "クリア", + "new": "別の編集を提案", "reset": "初期値にリセット", + "showAll": "すべての編集を表示", "suggest": "提案を提出" }, "empty": { "suggestEdit": "下記のフォームを利用して変更を提案する" }, "header": { + "failure": "編集の提出中にエラーが発生しました", "recentEdits": "最近の編集", + "success": "あなたの編集は無事に提出されました。", "unreviewed": "チェック待ちの最近の編集" }, "label": { "summary": "概要(オプション)" }, "message": { - "noPermission": "あなたにはこのオブジェクトを編集する権限はありませんが、変更を提案することができます。一度提案すると、認められる前にその提案はレビューされます。" + "noPermission": "あなたにはこのオブジェクトを編集する権限はありませんが、変更を提案することができます。一度提案すると、承認される前にその提案はレビューされます。" }, "notApplicable": "N/A", "placeholder": { @@ -1571,12 +1641,19 @@ "label": { "extensions": "サポートされている拡張子: { extensions }", "remainingSpace": "残りのストレージ容量", - "uploadWidget": "クリックしてファイルを選択するか、ファイルやディレクトリをドラッグアンドドロップしてください" + "uploadWidget": "クリックしてアップロードするファイルを選択するか、ファイルまたはディレクトリをドラッグ&ドロップしてください" }, "link": { "processing": "処理中", "uploading": "アップロード中" }, + "message": { + "local": { + "format": "アップロードしようとしている音楽ファイルのフォーマットは、「OGG」「Flac」「MP3」または「AIFF」などにしましょう", + "message": "あなたはライブラリに音楽をアップロードしようとしています。処理を行う前に確認してください:", + "tag": "アップロードしようとしている音楽ファイルに適切にタグ付けをしましょう。" + } + }, "table": { "upload": { "header": { @@ -1770,6 +1847,9 @@ "header": "この曲をWebサイトに埋め込む" } }, + "subtitle": { + "with-uploader": "{1} に、{0} によってアップロードされました" + }, "title": "曲" }, "TrackDetail": { @@ -1810,7 +1890,8 @@ }, "TrackEdit": { "header": { - "edit": "この曲を編集する" + "edit": "この曲を編集する", + "suggest": "このアルバムについての編集を提案" }, "message": { "remote": " このオブジェクトは別のサーバーで管理されており、あなたはこれを編集できません。" @@ -1860,7 +1941,7 @@ "Filter": { "cancelButton": "キャンセル", "excludeLabel": "除く", - "removeButton": "除く" + "removeButton": "削除" } } }, @@ -2408,6 +2489,7 @@ "internalNotes": "管理用ノート", "pending": "保留中", "refused": "拒否", + "resolutionDate": "解決日", "status": "状態" } } @@ -2548,7 +2630,7 @@ "modal": "このフォームを利用してモデレーションチームに通報の届け出をしてください" }, "error": { - "nodeinfoFetch": "ノードの情報をフェッチできませんでした: {error}" + "nodeinfoFetch": "Node infoを取得できませんでした: {error}" }, "header": { "disabled": "匿名での通報は無効となっています。ログインして通報を提出してください。", @@ -2574,7 +2656,7 @@ "reject": "拒否" }, "message": { - "libraryAcceptFollow": "{ username } が ライブラリ\"{ library }\"のフォローを許可しました", + "libraryAcceptFollow": "{username} が、ライブラリ\"{library}\"へのフォローを許可しました", "libraryFollow": "{ username } があなたのライブラリ\"{ library }\"をフォローしました", "libraryPendingFollow": "{ username } があなたのライブラリ\"{ library }\"をフォローしたいようです" } @@ -2591,7 +2673,7 @@ "addDuplicate": "とにかく追加する", "clear": "プレイリストをクリア", "copy": "キューの曲をプレイリストへコピー", - "insertFromQueue": "再生キューから({ count } 曲)が加えられます" + "insertFromQueue": "再生キューから({n} 曲)が追加されます | 再生キューから({n} 曲)が追加されます" }, "error": { "sync": "変更の保存中にエラーが発生しました" @@ -2599,11 +2681,20 @@ "header": { "editor": "プレイリストエディター" }, + "help": { + "reorder": "プレイリスト内の曲を並び替えるには、各曲の行をドラッグ&ドロップしてください" + }, + "loading": { + "sync": "変更内容をサーバーと同期中…" + }, "message": { - "sync": "サーバーと同期された変更" + "sync": "変更内容をサーバーと同期しました" }, "modal": { "clearPlaylist": { + "content": { + "warning": "このプレイリストから全ての曲が削除されます。元に戻すことはできません。" + }, "header": "このプレイリスト「{ playlist }」をクリアしますか?" } }, @@ -2739,6 +2830,7 @@ "label": "完了" }, "pending": { + "help": "この曲はアップロードされましたが、まだサーバーによって処理されていません", "label": "保留中" }, "skipped": { @@ -2802,9 +2894,11 @@ }, "scopes": { "edits": { + "description": "編集へのアクセス", "label": "編集" }, "favorites": { + "description": "お気に入りへのアクセス", "label": "お気に入り" }, "filters": { @@ -2871,6 +2965,7 @@ "track": { "copyright": "コピーライト", "license": "ライセンス", + "position": "トラックナンバー", "title": "曲名" } }, @@ -2944,6 +3039,7 @@ "copyright": "コピーライト", "label": "曲", "license": "ライセンス", + "position": "トラックナンバー", "title": "曲名" }, "visibility": { @@ -2962,8 +3058,14 @@ } }, "init": { + "axios": { + "rateLimitDelay": "非常に多くのリクエストを送ったため、レートリミット制限されました。{delay}後にもう一度お試しください", + "rateLimitLater": "非常に多くのリクエストを送ったため、レートリミット制限されました。後ほど、もう一度お試しください" + }, "sentry": { - "funkwhaleInstance": "Funkwhaleの公式Glitchtipインスタンス" + "allow": "許可", + "funkwhaleInstance": "Funkwhaleの公式Glitchtipインスタンス", + "title": "私たちのサービスの質を高めるため、あなたのセッション中のクラッシュに関する情報を集めたい。" }, "serviceWorker": { "actions": { @@ -2999,6 +3101,9 @@ "loading": { "notifications": "通知を読み込んでいます…" }, + "message": { + "funkwhaleSupport": "どうやら、このサーバーに一定期間いらっしゃるようですね。もしFunkwhaleがあなたのお役に立つのであれば、Funkwhaleをより良いものにするためにあなたの助けが必要です!" + }, "option": { "delay": { "30": "30日", @@ -3341,6 +3446,7 @@ "description": "説明", "discNumber": "ディスク番号", "license": "ライセンス", + "position": "トラックナンバー", "title": "曲名" }, "trackData": { @@ -3841,9 +3947,11 @@ }, "description": { "channel": { - "1": "あなたがミュージシャンまたはポッドキャスターなら、専用のチャンネルが提供されます!" + "1": "あなたがミュージシャンまたはポッドキャスターなら、専用のチャンネルが作成されます!", + "2": "あなたの作品をみなさんとシェアして、Funkwhale、Fediverse、またはその他のポッドキャスティング・アプリケーションの購読者を獲得しましょう。" }, - "follow": "他のユーザーのライブラリをフォローして、新しい音楽に出会いましょう。公開ライブラリはすぐにフォローできますが、プライベートライブラリへのフォローはその所有者からの承認が必須です。" + "follow": "他のユーザーのライブラリをフォローして、新しい音楽に出会いましょう。公開ライブラリはすぐにフォローできますが、プライベートライブラリへのフォローはその所有者からの承認が必須です。", + "upload": "あなたの個人的な音楽ライブラリをFunkwhaleにアップロードして、どのような場所にいても音楽を楽しんだり、友人や家族とシェアしましょう。" }, "header": { "channel": "あなたの作品をチャンネルで公開", @@ -3851,7 +3959,7 @@ "upload": "サードパーティー・コンテンツをライブラリにアップロード" }, "help": { - "uploadQuota": "このインスタンスは全てのユーザーに{quota}のストレージを提供しています。" + "uploadQuota": "このインスタンスは各ユーザーに{quota}までのストレージスペースを提供しています。" }, "title": "コンテンツの追加と編集" }, @@ -4054,6 +4162,7 @@ "remoteLibraries": "リモートのライブラリは、Funkwhaleネットワーク上の他のユーザーが所有しています。ライブラリが公開されている、またはライブラリへのアクセス権を得ている限りは、アクセスできます。" }, "header": { + "knownLibraries": "既知のライブラリ", "remoteLibraries": "リモートのライブラリ" }, "loading": { @@ -4129,9 +4238,10 @@ "upload": "アップロード" }, "description": { - "sharingLink": "以下のリンクを他のユーザーとシェアしてみましょう。そのユーザーが属するポッドの検索バーに以下のリンクをコピー&ペーストすることで、このライブラリにアクセスすることができます。" + "sharingLink": "以下のリンクを他のユーザーとシェアしてみましょう。他のユーザーが属するポッドの検索バーに以下のリンクをコピー&ペーストすることで、このライブラリにアクセスすることができます。" }, "label": { + "instance": "限定公開", "private": "プライベート", "public": "公開", "sharingLink": "リンクをシェア" @@ -4141,7 +4251,7 @@ "artists": "アーティスト", "domain": "{ domain }で聞く", "moderation": "モデレーション画面で開く", - "owner": "{ username }が所有しています", + "owner": "{ username }が所有", "tracks": "曲一覧" }, "meta": { @@ -4163,7 +4273,7 @@ "edit": "編集する", "embed": "埋め込む", "playAll": "全曲再生", - "stopEdit": "編集を止める" + "stopEdit": "編集をやめる" }, "empty": { "noTracks": "まだこのプレイリストには曲がありません" @@ -4172,14 +4282,14 @@ "tracks": "曲一覧" }, "meta": { - "tracks": "このプレイリストには{ count }曲あり、{ username }がアップロードしました" + "tracks": "プレイリストには{n}曲が存在し、{username}が追加しました | プレイリストには{n}曲が存在し、{username}が追加しました" }, "modal": { "delete": { "content": { - "warning": "プレイリストを完全に削除しますが、元に戻すことはできません。" + "warning": "このプレイリストを完全に削除します。元に戻すことはできません。" }, - "header": "このプレイリスト「{ playlist }」を削除しますか?" + "header": "プレイリスト{ playlist }を削除しますか?" }, "embed": { "header": "このプレイリストをWebサイトに埋め込む" @@ -4237,7 +4347,7 @@ "content": { "warning": "ラジオを完全に削除しますが、元に戻すことはできません。" }, - "header": "ラジオ「{ radio }」を削除しますか?" + "header": "ラジオ{radio}を削除しますか?" } }, "title": "ラジオ" diff --git a/front/src/locales/oc.json b/front/src/locales/oc.json index e90f3d311..abcbece46 100644 --- a/front/src/locales/oc.json +++ b/front/src/locales/oc.json @@ -1,1435 +1,63 @@ { + "App": { + "loading": "Cargament…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } vòl accedir a vòstre compte Funkwhale", - "authorize": "Autorizar una tèrça aplicacion", - "authorizeFailure": "Error en autorizar l’aplicacion", - "fetchFailure": "Error en recuperar las donadas de l’aplicacion", - "allScopes": "Accès complèt", - "readOnly": "Lectura sola", - "writeOnly": "Escritura sola" - }, - "title": "Autorizar l’aplicacion", - "button": { - "authorize": "Autorizar { app }" - }, - "help": { - "pasteCode": "Copiatz-pegatz lo còdi seguent dins l’aplicacion :", - "redirect": "Seretz mandat a { 0 }", - "copyCode": "Vos mostrarem un còdi de copiar-pegar dins l’aplicacion." - }, - "message": { - "unknownPermissions": "L’aplicacion demanda tanben las autorizacions desconegudas seguentas :" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Accès desactivat", - "passwordUpdated": "Senhal actualizat", - "unavailable": "L’API Subsonic es pas disponibla per aquesta instància Funkwhale." - }, - "button": { - "confirmDisable": "Desactivar l’accès", - "disable": "Desactivar l’accès via Subsonic", - "newPassword": "Demandar un nòu senhal", - "confirmNewPassword": "Demandar un senhal" - }, - "modal": { - "disableSubsonic": { - "header": "Desactivar l’accès a l’API Subsonic ?", - "content": { - "warning": "Aquò desactivarà complètament l’accès a l’API Subsonic de vòstre compte estant." - } - }, - "newPassword": { - "header": "Demandar un nòu senhal per l’API Subsonic ?", - "content": { - "warning": "Aquò vos desconnectarà de totes los periferics qu’utilizan aqueste senhal." - } - } - }, - "link": { - "apps": "Aprenètz a utilizar Funkwhale amb d’autras aplicacions" - }, - "header": { - "error": "Error", - "subsonic": "Senhal de l’API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale es compatible amb d’autres lectors de musica compatibles amb l’API Subsonic.", - "paragraph3": "Pr’aquò, accedir a Funkwhale d’un client estant demanda un senhal diferent que podètz configurar çai-jos.", - "paragraph2": "Podètz los utilizar per profeitar de vòstras listas de lectura e de vòstra musica en mòde fòra linha sus vòstre mobil, tableta, per exemple." - } - }, - "label": { - "subsonicField": "Senhal de l’API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Geton d’accès", - "appId": "ID de l’aplicacion", - "appSecret": "Secret de l’aplicacion" - }, - "header": { - "appDetails": "Detalhs de l’aplicacion", - "editApp": "Modificar l’aplicacion" - }, - "help": { - "appDetails": "L’ID e lo secrèt de l’aplicacion son de donadas vertadièrament sensiblas e devon èsser consideradas coma de senhals. Partegetz-las pas amb degun." - }, - "link": { - "settings": "Tornar als paramètres" - }, - "title": "Modificar l’aplicacion", - "button": { - "regenerateToken": "Tornar generar lo geton" - } - }, - "Settings": { - "title": "Paramètres del compte", - "header": { - "accountSettings": "Paramètres del compte", - "authorizedApps": "Aplicacions autorizadas", - "avatar": "Avatar", - "changeEmail": "Cambiar mon adreça electronica", - "changePassword": "Cambiar lo senhal", - "contentFilters": "Filtres de contengut", - "deleteAccount": "Suprimir mon compte", - "hiddenArtists": "Artistas amagats", - "plugins": "Moduls", - "settingsUpdated": "Paramètres actualizats", - "emailFailure": "Podèm pas cambiar vòstra d’adreça mail", - "accountFailure": "Podèm pas suprimir vòstre compte", - "noApps": "Avètz pas cap d‘aplicacion connectada a aqueste compte.", - "noPersonalApps": "Avètz pas cap d‘aplicacion creada pel moment.", - "yourApps": "Vòstras aplicacions", - "avatarFailure": "L’avatar pòt pas èsser enregistrat", - "passwordFailure": "Lo senhal pòt pas èsser cambiat", - "updateFailure": "Impossible d’actualizar vòstres paramètres" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplicacion", - "permissions": "Autorizacions" - } - }, - "yourApps": { - "header": { - "application": "Aplicacion", - "creationDate": "Data de creacion", - "scopes": "Visibilitats" - } - }, - "artists": { - "header": { - "creationDate": "Data de creacion", - "name": "Nom" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Senhal actual", - "newEmail": "Adreça electronica novèla", - "newPassword": "Nòu senhal", - "password": "Senhal" - }, - "button": { - "password": "Cambiar lo senhal", - "delete": "Suprimir", - "deleteAccountConfirm": "Suprimir mon compte", - "deleteAccount": "Suprimir mon compte…", - "disableSubsonic": "Desactivar l’accès", - "edit": "Modificar", - "refresh": "Actualizar", - "remove": "Tirar", - "removeApp": "Suprimir l’aplicacion", - "revoke": "Revocar", - "revokeAccess": "Revocar l’accès", - "update": "Actualizar", - "updateSettings": "Actualizar los paramètres" - }, - "description": { - "changeEmail": "Cambiar l’adreça email ligada a vòstre compte. Mandarem una confirmacion a l’adreça novèla.", - "changePassword": { - "paragraph1": "L’actualizacion de vòstra senhal cambiarà tanben lo de l’API Subsonic se n’avètz un.", - "paragraph2": "Vos caldrà actualizar lo senhal sus totes los clients qu’utilizan aqueste senhal." - }, - "contentFilters": "Los filtres de contengut vos ajudan a amagar los contenguts que volètz pas veire sus aqueste servici.", - "authorizedApps": "Aquò es la lista de las aplicacions qu’an accès a las donadas de vòstre compte.", - "yourApps": "Aquò es la lista de las aplicacions qu’avètz creadas.", - "plugins": "Utilizatz d’extension per agrandir las possibilitat de Funkwhale e obténer mai de foncionalitats.", - "deleteAccount": "Podètz suprimir vòstre compte e totas las donadas d’un biais permanent e irreversible en utilizar lo formulari çai-jos. Vos demandarem una confirmacion." - }, - "modal": { - "changePassword": { - "header": "Cambiar lo senhal ?", - "content": { - "warning": "Lo cambiament de senhal a las consequéncias seguentas :", - "logout": "Sètz per èsser desconnectat d’aquesta session e vos caldrà vos connectar amb lo nòu senhal", - "subsonic": "Vòstre senhal Subsonic serà remplaçat per un nòu aleatòri, aquò vos desconnectarà de totes los periferics qu’utilizan l’ancian senhal" - } - }, - "deleteAccount": { - "header": "Volètz suprimir vòstre compte ?", - "content": { - "warning": "Aquò es irreversible e suprimirà d’un biais permanent vòstras donadas de nòstres servidors. Seretz immediatament desconnectat." - } - }, - "deleteApp": { - "header": "Suprimir l’aplicacion « { application } » ?", - "content": { - "warning": "Aquò escafarà aquesta aplicacion per totjorn e totes los getons ligats." - } - }, - "revokeApp": { - "header": "Revocar l’accès a l’aplicacion « { application } » ?", - "content": { - "warning": "Aquò empacha aquesta aplicacion d’accedir al servici en vòstre nom." - } - } - }, - "help": { - "noApps": "S’autorizatz de tèrças aplicacions a accedir a vòstras donadas, seràn listadas aquí.", - "changePassword": "Mercés de verificar que lo senhal es corrèct", - "noPersonalApps": "Marcatz-ne ua per integrar Funkwhale amb de tèrças aplicacions." - }, - "link": { - "managePlugins": "Gerir los moduls", - "newApp": "Crear una nòva aplicacion" - }, - "warning": { - "deleteAccount": "Vòstre compte serà suprimit de nòstres servidors d’aquí unas minutas. Avisarem tanben los autres servidors que pòdon aver una còpia de certanas donda per que realizen la supression. Remarcatz qu’unes d’aqueles pòdon èsser fòra linha o voler pas o far." - }, - "message": { - "currentEmail": "Vòstra adreça electronica actuala es { email }.", - "confirmDelete": "Vòstra demanda de supression es estada enviada, vòstre compte e lo contengut seràn lèu suprimits" - } - }, - "Logout": { - "header": { - "confirm": "Volètz vertadièrament vos desconnectar ?", - "unauthenticated": "Sètz pas connectat actualament" - }, - "link": { - "login": "Connectatz-vos !" - }, - "title": "Desconnexion", - "button": { - "logout": "Òc-ben, desconnectatz-me !" - }, - "message": { - "loggedIn": "Sètz connectat coma { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Tornar als paramètres" - }, - "title": "Crear una nòva aplicacion" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Causir l’autorizacion «Lectura» o «Escritura» sul parent implica l’accès a totes los jos elements correspondents.", - "read": { - "label": "Lectura", - "description": "Accès lectura sola de las donadas utilizaire" - }, - "write": { - "label": "Escritura", - "description": "Accès escritura sola de las donadas utilizaire" - } - }, - "name": "Nom", - "redirectUri": "URI de redireccion" - }, - "button": { - "create": "Crear una aplicacion", - "update": "Actualizar l’aplicacion" - }, - "help": { - "redirectUri": "Utilizatz « urn:ietf:wg:oauth:2.0:oob » coma URI de redireccion se vòstra aplicacion es pas disponibla en linha." - }, - "header": { - "failure": "Podèm pas enregistrar vòstras modificacions" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crear un compte", - "resetPassword": "Reïnicializar lo senhal" - }, - "placeholder": { - "username": "Escrivètz vòstre nom d’utilizaire o corrièl" - }, - "help": { - "approvalRequired": "Se vos sètz marcat fa pas gaire, benlèu que vos cal esperar que nòstra còla de moderacion repasse vòstre compte, o verifique vòstra adreça electronica.", - "invalidCredentials": "Mercés de verificar que lo nom d’utilizaire e lo senhal son corrèctes e asseguratz-vos d’aver verificat vòstre corrièl." - }, - "button": { - "login": "Connexion" - }, - "label": { - "password": "Senhal", - "username": "Nom d’utilizaire o corrièl" - }, - "header": { - "loginFailure": "Error pendent la connexion" - } - }, - "SignupForm": { - "button": { - "create": "Crear mon compte" - }, - "label": { - "email": "Adreça electronica", - "password": "Senhal", - "username": "Nom d’utilizaire" - }, - "placeholder": { - "email": "Picatz vòstra adreça electronica", - "invitation": "Escrivètz vòstre còdi d’invitacion (pas sensible a la cassa)", - "username": "Escrivètz vòstre nom d’utilizaire" - }, - "header": { - "login": "Connectatz-vos a vòstre compte Funkwhale", - "signupFailure": "Lo compte pòt pas èsser creat." - }, - "message": { - "registrationClosed": "Las inscripcions son tampadas sus aquesta instància. Auretz de téner un còdi d’invitacion per vos marcar.", - "requiresReview": "Las inscripcions sus aquesta instància son dobèrtas, mas l’equipa de moderacion repassa las demanda.", - "awaitingReview": "Vòstra demanda de compte es estada corrèctament enviada. Vos notificarem per corrièl un còp que nòstra equipa de moderacion aja repassat la demanda.", - "accountCreated": "Lo compte es estat corrèctament creat. Volgatz verificar vòstra bóstia de recepcion abans d’ensajar de vos connectar." - } - }, - "Plugin": { - "link": { - "documentation": "Documentacion" - }, - "label": { - "pluginEnabled": "Activada", - "library": "Bibliotèca" - }, - "header": { - "failure": "Error en enregistrant lo modul" - }, - "description": { - "library": "Bibliotèca ont los fichièrs devon èsser importats." - }, - "button": { - "save": "Enregistrar", - "scan": "Explorar" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } utilizaire actiu | { n } utilizaires actius", - "hoursOfMusic": "ora de musica | oras de musica" + "description": { + "findApp": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion.", + "funkwhale": "Funkwhale es un projècte menat per una comunitat que vos permet d’escotar e partejar de musicas e de fichièrs àudio dins d’un malhum descentralizat e dubèrt.", + "publicContent": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod.", + "quota": "Los utilizaires d’aqueste pod an tanben { quota } d’espaci liure per enviar lor pròpri contengut !", + "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !" }, "header": { - "funkwhale": "Una platafòrma sociala per profeitar e partejar de musica", "aboutPod": "A prepaus d’aqueste pod", - "publicContent": "Percórrer lo contengut public", "findApp": "Trobar una aplicacion", + "funkwhale": "Una platafòrma sociala per profeitar e partejar de musica", + "publicContent": "Percórrer lo contengut public", "signup": "Inscripcion" }, - "title": "A prepaus", "link": { "findOtherPod": "Trobar un autre pod", "learnMore": "Ne saber mai" }, - "description": { - "funkwhale": "Funkwhale es un projècte menat per una comunitat que vos permet d’escotar e partejar de musicas e de fichièrs àudio dins d’un malhum descentralizat e dubèrt.", - "publicContent": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod.", - "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !", - "findApp": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion.", - "quota": "Los utilizaires d’aqueste pod an tanben { quota } d’espaci liure per enviar lor pròpri contengut !" - }, - "placeholder": { - "noDescription": "Cap de descripcion pas disponibla." - }, "message": { + "greeting": "Adiu {username}", "loggedIn": "Sètz ja connectat !" - } - }, - "Home": { - "stat": { - "activeUsers": "{ n } utilizaire actiu | { n } utilizaires actius", - "hoursOfMusic": "{ n } ora de musica | { n } oras de musica" }, - "header": { - "aboutFunkwhale": "A prepaus de Funkwhale", - "about": "A prepaus d’aqueste pod Funkwhale", - "contact": "Contacte", - "login": "Connexion", - "newChannels": "Nòvas cadenas", - "newAlbums": "Albums ajustats i a res", - "signup": "Inscripcion", - "statistics": "Estatisticas", - "links": "Ligams utils", - "welcome": "La benvengut a { podName } !" - }, - "link": { - "publicContent": { - "label": "Percórrer lo contengut public", - "description": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod" - }, - "userGuides": { - "description": "Descobrissètz tot çò que devètz saber de Funkwhale e de sas foncionalitats", - "label": "Guida de l’utilizaire" - }, - "findOtherPod": "Trobar un autre pod", - "learnMore": "Ne saber mai", - "mobileApps": { - "label": "Aplicacions mobil", - "description": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion" - }, - "rules": "Règlas del servidor", - "viewMore": "Ne veire mai…", - "funkwhale": "Visitar funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale es gratuit e desvolopat per de una comunautat de volontaris simpatics.", - "paragraph1": "Aqueste pod executa Funkwhale, un projècte menat per una comunitat que vos permet d’escotar e partejar de musica e d’àudio dins un malhum descentralizat e liure." - }, - "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !", - "quota": "Los utilizaires d’aqueste pod an tanben { quota } d’espaci per enviar lor pròpri contengut !" - }, - "title": "Acuèlh", "placeholder": { - "noDescription": "Cap de descripcion pas disponibla." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "tracks": "{ n } pista | { n } pistas" - } - }, - "Widget": { - "button": { - "more": "Ne veire mai" - } - } + "noDescription": "Cap de descripcion pas disponibla" }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "tracks": "{ n } pista | { n } pistas" - }, - "title": "Actualizat lo { date }" + "stat": { + "activeUsers": "{n} utilizaire actiu | {n} utilizaires actius", + "hoursOfMusic": "0 oras de musica | {n} ora de musica | {n} oras de musica" }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - } - }, - "Widget": { - "button": { - "more": "Ne veire mai" - } - } - }, - "Player": { - "meta": { - "position": "({ index } sus { length })" - }, - "header": { - "player": "Lector àudio e contraròtle" - }, - "label": { - "clearQueue": "Voidar la fila", - "expandQueue": "Desplegar la fila", - "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", - "loopingDisabled": "Repeticion desactivada. Clicatz per activar la repeticion de la pista actuala.", - "loopingSingle": "Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la fila.", - "loopingWholeQueue": "Repeticion de tota la fila, clicatz per desactivar la repeticion.", - "audioPlayer": "Lector mèdia", - "mute": "Copar lo son", - "nextTrack": "Pista seguenta", - "pause": "Pausa", - "play": "Legir", - "previousTrack": "Pista precedenta", - "shuffleQueue": "Mesclar la fila", - "unmute": "Restablir lo son" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Ajustar a la lista actuala", - "addToPlaylist": "Ajustar a la lista de lectura…", - "episodeDetails": "Detalhs de l’episòdi", - "hideArtist": "Amagar lo contengut d’aqueste artista", - "discretePlay": "Legir", - "playAlbum": "Legir l’album", - "playArtist": "Legir çò de l’artista", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "playPlaylist": "Legir la lista de lectura", - "startRadio": "Legir de cançons similaras", - "playTrack": "Legir la pista", - "playTracks": "Legir las pistas", - "report": "Senhalar…", - "trackDetails": "Detalhs de la pista" - }, - "title": { - "more": "Mai…", - "unavailable": "Aquesta pista es pas disponibla dins cap de las bibliotècas qu’avètz accès" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Ajustar als favorits", - "addToPlaylist": "Ajustar a la lista de lectura…", - "addToQueue": "Ajustar a la lista", - "episodeDetails": "Detalhs de l’episòdi", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "startRadio": "Legir la pista", - "removeFromFavorites": "Tirar dels favorits", - "trackDetails": "Detalhs de la pista", - "albumDetails": "Veire l’album", - "artistDetails": "Veire l’artista", - "channelDetails": "Veire la cadena", - "seriesDetails": "Veire las serias" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar las accions de la pista" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Ajustar als favorits", - "addToPlaylist": "Ajustar a la lista de lectura…", - "addToQueue": "Ajustar a la lista", - "episodeDetails": "Detalhs de l’episòdi", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "startRadio": "Legir la pista", - "removeFromFavorites": "Tirar dels favorits", - "trackDetails": "Detalhs de la pista", - "albumDetails": "Veire l’album", - "artistDetails": "Veire l’artista", - "channelDetails": "Veire la cadena", - "seriesDetails": "Veire las serias" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artista", - "title": "Títol" - } - } - }, - "Widget": { - "empty": { - "noResults": "Cap de resultat pas trobat" - }, - "button": { - "more": "Ne veire mai" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar las accions de la pista" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Ajustar lo volum" - }, - "button": { - "mute": "Copar lo son", - "unmute": "Restablir lo son" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artista", - "category": { - "federation": "Federacion", - "podcasts": "Podcast" - }, - "search": "Recercar de contengut", - "tag": "Etiqueta", - "track": "Pista" - }, - "link": { - "more": "Mai de resultats 🡒", - "fediverse": "Recercar sul fediverse", - "rss": "S’abonar a un podcast via RSS" - }, - "header": { - "noResults": "Cap de correspondéncia pas trobada" - }, - "placeholder": { - "search": "Recercar d’artistas, d’albums, de pistas…" - }, - "empty": { - "noResults": "Pas cap de resultats per aquesta recèrca" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artistas", - "search": "Recercar de musica" - }, - "placeholder": { - "search": "Artista, album, pista…" - }, - "empty": { - "noAlbums": "Cap d’album correspond pas a vòstra recèrca", - "noArtists": "Cap d’artista correspond pas a vòstra recèrca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografia de l’artista", - "category": "Categoria", - "image": "Imatge de la cadena", - "description": "Descripcion", - "username": "Identificant del Fedivers", - "language": "Lenga", - "name": "Nom", - "email": "Adreça electronica del proprietari", - "owner": "Nom del proprietari", - "podcast": "Podcast", - "subcategory": "Subcategoria", - "tags": "Etiquetas" - }, - "placeholder": { - "name": "Nom crane de la cadena", - "username": "nomcranedelacadena" - }, - "header": { - "error": "Error en enregistrar la cadena" - }, - "help": { - "podcast": "Albergatz vòstres episòdis e mantenètz vòstre comunitat al fial.", - "discography": "Publicatz la musica que fasètz coma una bona discografia d’albums e singles.", - "podcastFields": "Utilizat pels camps itunes:email e itunes:name, requerits per d’unas platafòrmas coma Spotify o iTunes.", - "username": "Utilizat dins las URL e per seguir aquesta cadena sul Fedivers. O podètz pas cambiar mai tard." - }, - "loader": { - "loading": "Cargament" - }, - "legend": { - "purpose": "A qué servirà aquesta cadena ?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Anullar la demanda d’abonament", - "follow": "Seguir", - "unfollow": "Quitar de seguir" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copiar" - }, - "help": { - "embed": "Copiatz / Pegatz aqueste còdi al vòstre site HTML", - "width": "Daissar void per un widget adaptatiu", - "anonymous": "Mercés de contactar vòstres administrators e de lor demandar d’actualizar lo paramètres ligat." - }, - "label": { - "embed": "Còdi d’integracion", - "height": "Nautor del widget", - "width": "Largor del widget" - }, - "header": { - "preview": "Apercebut" - }, - "warning": { - "anonymous": "Lo partatge foncionarà pas perque aqueste pod autoriza pas los utilizaires anonimes a accedir al contengut." - }, - "message": { - "copy": "Tèxte copiat al quichapapièr !" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Ne veire mai" - }, - "help": { - "subscribe": "Vos cal benlèu vos abonar a aquesta cadena per ne veire lo contengut." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Ne veire mai" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "addDescription": "Ajustar una descripcion…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } pista dins | { n } pistas dins", - "albums": "{ n } albums | { n } albums" - }, - "title": "Artista", - "button": { - "cancel": "Anullar", - "edit": "Modificar", - "embed": "Integrar", - "more": "Mai…", - "play": "Legir totes los albums" - }, - "modal": { - "embed": { - "header": "Integrar aquesta pista a vòstre site web" - } - }, - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "discogs": "Recercar en Discogs", - "wikipedia": "Recercar sus Wikipèdia", - "django": "Veire sul panèl d’admin de Django", - "domain": "Veire sus { domain }", - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } pista correspond als filtres seleccionats | { n } pistas correspondon als filtres seleccionats", - "builder": "Editor", - "created": "Nom de la ràdio", - "updated": "Ràdio actualizada" - }, - "table": { - "filter": { - "header": { - "actions": "Accions", - "candidates": "Pistas candidatas", - "config": "Configuracion", - "exclude": "Exclure", - "name": "Nom del filtre" - } - } - }, - "button": { - "filter": "Ajustar lo filtre", - "save": "Enregistrar" - }, - "label": { - "filter": "Ajustar de filtres per dire de personalizar vòstra ràdio", - "description": "Descripcion", - "public": "Mostrar publicament", - "name": "Nom de la ràdio" - }, - "placeholder": { - "description": "Ma descripcion tròp crana", - "name": "Ma ràdio tròp crana" - }, - "title": "Editor de ràdio", - "option": { - "filter": "Seleccionar un filtre" - }, - "description": { - "builder": "Podètz utilizar aquesta interfàcia per realizar vòstra pròpria ràdio personalizada, que jogarà las listas segon los critèris indicats." - } - }, - "Filter": { - "cancelButton": "Anullar", - "excludeLabel": "Exclure", - "removeButton": "Tirar", - "matchingTracksModalHeader": "Pistas correspondentas al filtre" - } - }, - "FileUpload": { - "tooltip": { - "network": "Una error de ret s’es producha en enviar aqueste fichièr", - "size": "Mandadís del fichièr impossible, asseguratz-vos qu’es pas tròp pesuc", - "extension": "Tipe de fichièr pas valid, asseguratz-vos d’enviar un fichièr àudio. Las extensions compatiblas son { extensions }", - "retry": "Tornar ensajar", - "denied": "Mandadís refusat, asseguratz-vos que lo fichièr es pas tròp grand e qu’avètz pas atenhut vòstre quòta", - "timeout": "Temps de transferiment expirat, ensajatz tornamai" - }, - "table": { - "upload": { - "header": { - "actions": "Accions", - "filename": "Nom del fichièr", - "size": "Talha", - "status": "Estatut" - }, - "status": { - "pending": "En espèra", - "uploaded": "Enviat", - "uploading": "Mandadís…" - } - } - }, - "button": { - "cancel": "Anullar", - "retry": "Tornar ensajar los mandadisses fracassats" - }, - "label": { - "uploadWidget": "Clicatz per causir los fichièrs d’enviar o lisatz los fichièrs o repertòris", - "remainingSpace": "Espaci liure", - "extensions": "Extensions compatiblas : { extensions }" - }, - "header": { - "failure": "Error en aviant l’import", - "server": "Estatut de l’import", - "status": "Estatut de l’import", - "local": "Importar de la musica de vòstre emmagazinatge local" - }, - "link": { - "processing": "Tractament", - "uploading": "Mandadís en cors", - "picard": "Vos recomandam d’utilizar lo logicial Picard per aquò far." - }, - "description": { - "import": "Resultats de vòstre l’import :", - "previousImport": "Resultats de vòstre import precedent :" - }, - "message": { - "local": { - "format": "Los fichièrs musicals que sètz a enviar son al format OGG, Flac, MP3 o AIFF", - "tag": "Los fichièrs musicals que sètz a enviar son etiquetats coma cal.", - "message": "Sètz a man d’enviar de la musica a vòstra bibliotèca. Abans de començar, mercés de vos assegurar que :", - "copyright": "Envietz pas cap de contengut jos dreches a una bibliotèca publica, autrament enfranhètz la lei" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Una descripcion pichona per explicar vòstres cambiaments." - }, - "button": { - "cancel": "Anullar", - "clear": "Escafar", - "reset": "Tornar a la valor iniciala", - "showUnreviewed": "Restrénher a las modificacions pas repassadas", - "showAll": "Mostrar totas las modificacions", - "submit": "Enviar e aplicar la modificacion", - "new": "Enviar una modificacion de mai", - "suggest": "Enviar la suggestion" - }, - "header": { - "failure": "Error en enviar la modificacion", - "recentEdits": "Modificacions recentas", - "unreviewed": "Modificacions recentas en espèra de relectura", - "success": "La modificacion es estada corrèctament enviada." - }, - "notApplicable": "ND", - "empty": { - "suggestEdit": "Suggerir un cambiament en utilizar lo formulari çai-jos." - }, - "label": { - "summary": "Resumit (opcional)" - }, - "message": { - "noPermission": "Avètz pas l’autorizacion de modificar aqueste objècte, mas podètz suggerir de cambiaments. Un còp mandadas, las suggestions seràn repassadas abans validacion." - } - }, - "Albums": { - "link": { - "addMusic": "Ajustar musica" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer los albums" - }, - "placeholder": { - "search": "Picatz lo títol de l’album…" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "label": { - "search": "Recercar", - "tags": "Etiquetas" - }, - "button": { - "search": "Recercar" - } - }, - "Artists": { - "button": { - "upload": "Ajustar musica", - "search": "Recercar" - }, - "label": { - "search": "Nom de l’artista", - "excludeCompilation": "Exclure las compilacions d’artistas", - "tags": "Etiquetas" - }, - "title": "Artistas", - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer los artistas" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "placeholder": { - "search": "Recercar…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artista", - "copyright": "Copyright", - "license": "Licéncia", - "series": "Seria", - "url": "URL", - "year": "An" - }, - "track": { - "bitrate": { - "label": "Debit" - }, - "codec": "Codec", - "downloads": "Telecargaments", - "duration": "Durada", - "size": "Talha" - } - }, - "header": { - "episode": "Detalhs de l’episòdi", - "library": "Bibliotècas associadas", - "playlists": "Listas de lectura associadas", - "release": "Detalhs de publicacion", - "track": "Detalhs de la pista" - }, - "notApplicable": "ND", - "description": { - "library": "Aquesta pista es presenta a las bibliotècas seguentas :" - }, - "link": { - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artistas", - "moderation": "Dobrir dins l’interfàcia de moderacion" - }, - "header": { - "channels": "Cadenas", - "tracks": "Pistas" - } - }, - "ArtistDetail": { - "header": { - "album": "Albums d’aqueste artista", - "track": "Pistas novèlas d’aqueste artista", - "library": "Bibliotècas de l’utilizaire" - }, - "button": { - "more": "Ne cargar mai…", - "filter": "Levar lo filtre" - }, - "link": { - "filter": "Validar mos filtres" - }, - "description": { - "library": "Aqueste artista es present a las bibliotècas seguentas :" - }, - "message": { - "filter": "Amagatz lo contengut ligat a aqueste artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Una error s’es producha pendent lo processús de mandadís. Trobaretz mai d’informacion çai-jos.", - "unknownError": { - "message": "Una error desconeguda s’es producha", - "label": "Error desconeguda" - }, - "invalidMetadata": { - "label": "Metadonada invalida", - "message": "La metadonada inclusa al fichièr es invalida o de camps obligatòris son absents." - } - }, - "button": { - "close": "Tampar" - }, - "table": { - "error": { - "debug": "Informacions de debug", - "errorDetail": "Detalhs de l’error", - "errorType": "Tip d’error", - "help": "Obténer d’ajuda" - } - }, - "header": { - "importDetail": "Detalhs de l’import" - }, - "link": { - "support": "Dobrir un fil de discutida d’assisténcia (donatz las informacions de desbugatge dins vòstre messatge)", - "documentation": "Legissètz nòstra documentacion per aquesta error" - }, - "message": { - "importDetail": "Lo mandadís es encara en espèra e serà lèu tractat pel servidor.", - "importSuccess": "Lo mandadís es estat corrèctament tractat pel servidor." - }, - "warning": { - "importSkipped": "Lo mandadís es estat sautat perque un que li sembla es ja disponible dins una de vòstras bibliotèca." - } - }, - "EditCard": { - "button": { - "approve": "Validar", - "delete": "Suprimir", - "reject": "Regetar" - }, - "status": { - "approved": "Validat", - "applied": "Validada e aplicada", - "pending": "En espèra de validacion", - "rejected": "Regetat" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta règla de moderacion ?" - }, - "content": { - "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." - } - }, - "table": { - "update": { - "header": { - "field": "Camp", - "newValue": "Nòva valor", - "oldValue": "Anciana valor" - }, - "notApplicable": "ND" - } - }, - "header": { - "modification": "Modificacion { id }" - }, - "link": { - "track": "Pista #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer los Podcasts" - }, - "button": { - "cancel": "Anullar", - "channel": "Crear una cadena", - "search": "Recercar", - "subscribe": "S’abonar", - "feed": "S’abonar al flux RSS" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "label": { - "search": "Títol del podcast", - "tags": "Etiquetas" - }, - "title": "Podcasts", - "pagination": { - "results": "Resultats per pagina" - }, - "placeholder": { - "search": "Recercar…" - }, - "modal": { - "subscription": { - "header": "Inscripcion" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer las ràdios", - "instance": "Ràdios de l’instància", - "user": "Ràdios dels utilizaires" - }, - "button": { - "add": "Crear una ràdio", - "create": "Crear vòstra pròpria ràdio" - }, - "placeholder": { - "search": "Escrivètz un nom de ràdio…" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "title": "Ràdios", - "pagination": { - "results": "Resultats per pagina" - }, - "label": { - "search": "Recercar" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Anullar", - "delete": "Suprimir…", - "edit": "Modificar", - "embed": "Integrar", - "more": "Mai…" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste album ?", - "content": { - "warning": "Aqueste album serà tirat, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aqueste album a un site web" - } - }, - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "discogs": "Recercar en Discogs", - "django": "Veire sul panèl d’admin de Django", - "domain": "Veire sus { domain }", - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Anullar", - "delete": "Suprimir…", - "download": "Telecargar", - "edit": "Modificar", - "embed": "Integrar", - "more": "Mai…", - "play": "Legir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta pista ?", - "content": { - "warning": "Aquesta pista serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aquesta pista a un site web" - } - }, - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "discogs": "Recercar en Discogs", - "wikipedia": "Recercar sus Wikipèdia", - "django": "Veire sul panèl d’admin de Django", - "domain": "Veire sus { domain }" - }, - "title": "Pista" - }, - "AlbumEdit": { - "header": { - "edit": "Modificar aqueste album", - "suggest": "Podèm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." - } - }, - "ArtistEdit": { - "header": { - "edit": "Modificar aqueste artista", - "suggest": "Podèm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." - } - }, - "TrackEdit": { - "header": { - "edit": "Modificar aquesta pista", - "suggest": "Podèm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episòdis", - "tracks": "Pistas", - "libraries": "Bibliotècas de l’utilizaire" - }, - "description": { - "libraries": "Aqueste album es present a las bibliotècas seguentas :" - }, - "meta": { - "volume": "Volum { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importar" - } - }, - "FsLogs": { - "empty": { - "notStarted": "L’import a pas encara començat" - } - }, - "Home": { - "title": "Bibliotèca", - "header": { - "newChannels": "Nòvas cadenas", - "playlists": "Listas de lectura", - "recentlyAdded": "Ajustats i a res", - "recentlyFavorited": "Ajustadas als favorits i a res", - "recentlyListened": "Escotadas i a res" - } - }, - "TagSelector": { - "placeholder": { - "search": "Recercar…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favorit | { n } favorits" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "link": { - "library": "Percórrer la bibliotèca" - }, - "loader": { - "loading": "Cargament dels favorits…" - }, - "empty": { - "noFavorites": "I a pas encara de pistas ajustadas a vòstres favorits" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "title": "Vòstres favorits" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Ajustar als favorits", - "remove": "Tirar dels favorits" - }, - "label": { - "inFavorites": "Als favorits" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } fichièr | { n } fichièrs", - "quota": "Espaci liure restant :" - }, - "button": { - "cancel": "Anullar", - "close": "Tampar", - "finishLater": "Acabar mai tard", - "next": "Etapa seguenta", - "previous": "Etapa precedenta", - "publish": "Publicar", - "update": "Actualizar" - }, - "header": { - "uploadFiles": "Fichièrs d’enviar", - "processing": "Tractament dels mandadisses", - "publish": "Publicar àudio", - "uploadDetails": "Detalh de mandadís" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "label": { - "album": "Album", - "series": "Serias" - }, - "option": { - "none": "Cap" - } - }, - "LicenseSelect": { - "link": { - "license": "A prepaus d’aquesta licéncia" - }, - "label": { - "license": "Licéncia" - }, - "option": { - "none": "Cap" - } - }, - "UploadForm": { - "help": { - "license": "Ajustatz una licéncia a vòstre mandadís per assegurar las libertats de vòstre public." - }, - "label": { - "openBrowser": "Percórrer…", - "channel": "Cadena" - }, - "message": { - "dragAndDrop": "Lisatz depausatz los fichièrs aquí o dorbissètz lo navegador per enviar de fichièrs", - "pending": "Avètz de brolhon de mandadisses en espèra de publicacion." - }, - "button": { - "edit": "Modificar", - "ignore": "Ignorar", - "remove": "Tirar", - "resume": "Reprendre", - "retry": "Tornar ensajar" - }, - "header": { - "error": "Error en publicar" - }, - "status": { - "errored": "Perturbat", - "pending": "En espèra", - "uploading": "Mandadís en cors" - }, - "description": { - "extensions": "Extensions compatiblas : { extensions }" - }, - "warning": { - "quota": "Avètz pas mai d’espaci per enviar los fichièrs. Mercés de contactar los moderators." - } - }, - "AlbumModal": { - "button": { - "cancel": "Anullar", - "create": "Crear" - }, - "header": { - "newAlbum": "Album novèl", - "newSeries": "Nòvas serias" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descripcion", - "position": "Posicions", - "tags": "Etiquetas", - "title": "Títol", - "image": "Imatge de la pista" - } - }, - "AlbumForm": { - "header": { - "error": "Error en crear" - }, - "label": { - "albumTitle": "Títol" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "S’abonar", - "unsubscribe": "Quitar de seguir" - }, - "help": { - "auth": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut" - } - } + "title": "A prepaus" }, "AboutPod": { - "stat": { - "hoursOfMusic": "ora de musica | oras de musica", - "activeUsers": "utilizaire actiu | utilizaires actius", - "albumsCount": "album | albums", - "artistsCount": "artista | artistas", - "listeningsCount": "escota | escotas", - "tracksCount": "pista | pistas" + "feature": { + "allowList": "Lista d’autorizacions", + "anonymousAccess": "Accès anonim", + "federation": "Federacion", + "quota": "Quòta de mandadís", + "registrations": "Inscripcions", + "status": { + "closed": "Tampadas", + "disabled": "Desactivada", + "enabled": "Activada", + "open": "Dubèrtas" + }, + "version": "Version de Funkwhale" + }, + "header": { + "about": "A prepaus d’aqueste pod", + "contact": "Contacte", + "features": "Foncionalitats", + "rules": "Règlas", + "statistics": "Estatisticas", + "terms": "Tèrmes e politica de confidencialitat" }, - "title": "A prepaus", "link": { "about": "A prepaus d’aqueste pod", "features": "Foncionalitats", @@ -1438,360 +66,229 @@ "statistics": "Estatisticas", "terms": "Tèrmes e politica de confidencialitat" }, - "header": { - "about": "A prepaus d’aqueste pod", - "contact": "Contacte", - "features": "Foncionalitats", - "rules": "Règlas", - "statistics": "Estatisticas", - "terms": "Tèrmes e politica de confidencialitat" - }, - "feature": { - "allowList": "Lista d’autorizacions", - "anonymousAccess": "Accès anonim", - "status": { - "closed": "Tampadas", - "disabled": "Desactivada", - "enabled": "Activada", - "open": "Dubèrtas" - }, - "federation": "Federacion", - "version": "Version de Funkwhale", - "registrations": "Inscripcions", - "quota": "Quòta de mandadís" + "message": { + "contact": "Enviatz-nos un messatge : {'{{'} contactEmail {'}}'}" }, "notApplicable": "ND", "placeholder": { - "noDescription": "Cap de descripcion pas disponibla.", - "noRules": "Cap de règla pas disponibla.", - "noTerms": "Cap de condicion pas disponibla." + "noDescription": "Cap de descripcion pas disponibla", + "noRules": "Cap de règla pas disponibla", + "noTerms": "Cap de condicion pas disponibla" + }, + "stat": { + "activeUsers": "{0} utilizaire actiu | {0} utilizaires actius", + "albumsCount": "Cap d’albums | {n} album | {n} albums", + "artistsCount": "0 artistas | {n} artista | {n} artistas", + "hoursOfMusic": "0 oras de musica | {n} ora de musica | {n} oras de musica", + "listeningsCount": "{n} escota | {n} escotas", + "tracksCount": "{n} pista | {0} pistas" + }, + "title": "A prepaus" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Aqueste pod executa Funkwhale, un projècte menat per una comunitat que vos permet d’escotar e partejar de musica e d’àudio dins un malhum descentralizat e liure.", + "paragraph2": "Funkwhale es gratuit e desvolopat per de una comunautat de volontaris simpatics." + }, + "quota": "Los utilizaires d’aqueste pod an tanben {quota} d’espaci per enviar lor pròpri contengut !", + "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !" + }, + "header": { + "about": "A prepaus d’aqueste pod Funkwhale", + "aboutFunkwhale": "A prepaus de Funkwhale", + "contact": "Contacte", + "links": "Ligams utils", + "login": "Connexion", + "newAlbums": "Albums ajustats i a res", + "newChannels": "Nòvas cadenas", + "signup": "Inscripcion", + "statistics": "Estatisticas", + "welcome": "La benvengut a {podName} !" + }, + "link": { + "findOtherPod": "Trobar un autre pod", + "funkwhale": "Visitar funkwhale.audio", + "learnMore": "Ne saber mai", + "mobileApps": { + "description": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion", + "label": "Aplicacions mobil" + }, + "publicContent": { + "description": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod.", + "label": "Percórrer lo contengut public" + }, + "rules": "Règlas del servidor", + "userGuides": { + "description": "Descobrissètz tot çò que devètz saber de Funkwhale e de sas foncionalitats", + "label": "Guida de l’utilizaire" + }, + "viewMore": "Ne veire mai…" + }, + "placeholder": { + "noDescription": "Cap de descripcion pas disponibla" + }, + "stat": { + "activeUsers": "{n} utilizaire actiu | {n} utilizaires actius", + "hoursOfMusic": "{n} ora de musica | {n} oras de musica" + }, + "title": "Acuèlh" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Pagina pas trobada !" + }, + "link": { + "home": "Tornar a l’acuèlh" }, "message": { - "contact": "Enviatz-nos un messatge : {'{{'} contactEmail {'}}'}" + "pageNotFound": "O planhèm, la pagina demandada existís pas :" + }, + "title": "Pagina pas trobada" + }, + "Queue": { + "button": { + "clear": "Escafar", + "close": "Tampar", + "stopRadio": "Arrestar la ràdio" + }, + "header": { + "failure": "La pista pòt pas èsser cargada", + "radio": "Escotatz una ràdio" + }, + "label": { + "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", + "duration": "Durada", + "favorite": "Marcar la pista", + "next": "Pista seguenta", + "pause": "Pausa", + "play": "Legir", + "previous": "Pista precedenta", + "queue": "Fila", + "remove": "Tirar", + "restart": "Recomençar la pista", + "selectTrack": "Seleccionar pista" + }, + "message": { + "automaticPlay": "La pista seguenta serà legida automaticament dins una estona…", + "radio": "Las novèlas pistas seràn automaticament ajustadas aquí." + }, + "meta": { + "end": "Fin", + "queuePosition": "Pista ({index} de {length})", + "startTime": "00:00", + "unknownAlbum": "Album desconegut", + "unknownArtist": "Artista desconegut" + }, + "warning": { + "connectivity": "Poiriá arribar qu’ajatz de problèma de connexion." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } sus { total } element seleccionat | { n } sus { total } elements seleccionats", - "allSelected": "{ n } sus { total } element seleccionat | { n } sus { total } elements seleccionats", - "go": "Zo", - "launch": "Aviar", - "refresh": "Actualizar lo contengut de la tabla", - "select": "Seleccionar", - "selectAll": "Seleccionar totes los elements", - "selectElement": "Seleccionar un element | Seleccionar l’ensemble dels { n } elements", - "selectCurrentPage": "Seleccionar solament la pagina actuala" + "RemoteSearchForm": { + "button": { + "fediverse": "Fedivers", + "rss": "RSS", + "search": "Recercar" + }, + "description": { + "fediverse": "Utilizatz aqueste formulari per vos abonar a una cadena endacòm sul fediverse.", + "rss": "Utilizatz aqueste formulari per vos abonar a un flux RSS via una adreça URL." + }, + "error": { + "fetchFailed": "Se pòt pas recuperar aqueste objècte" + }, + "header": { + "fetchFailed": "Error en recuperar l’objècte" + }, + "label": { + "fediverse": { + "fieldLabel": "Objècte del Fedivers", + "title": "S’abonar a un podcast albergat sul fediverse" }, - "message": { - "success": "L’action { action } es estada lançada corrèctament sus { n } element | L’action { action } es estada lançada corrèctament sus { n } elements", - "needsRefresh": "Lo contengut es estat actualizat, clicar per tornar cargar e veire lo contengut a jorn" - }, - "label": { - "actions": "Accions", - "performAction": "Executar las accions" - }, - "modal": { - "performAction": { - "header": "Volètz lançar l’accion « { action } » sus { n } element ? | Volètz lançar l’accion « { action } » sus { n } elements ?", - "content": { - "warning": "Aquesta operacion pòt afectar mantun elements o pòt pas èsser anullada, mercés de verificar s’es ben çò que desiratz." - } - } - }, - "header": { - "error": "Error en tractar l’accion" + "rss": { + "fieldLabel": "Emplaçament del flux RSS", + "fieldPlaceholder": "https://siteweb.exemple/rss.xml", + "title": "S’abonar al flux RSS d’un podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "A prepaus", - "chat": "Sala de discutida", - "docs": "Documentacion", - "forum": "Forum", - "support": "Ajuda", - "git": "Traçador de problèmas", - "login": "Connexion", - "logout": "Desconnexion", - "notifications": "Notificacions", - "profile": "Perfil", - "settings": "Paramètres", - "signup": "Inscripcion" - }, - "label": { - "shortcuts": "Acorchis clavièr", - "language": "Lenga", - "theme": "Tèma" - } - }, - "UserModal": { - "link": { - "about": "A prepaus", - "chat": "Sala de discutida", - "forum": "Forum", - "support": "Ajuda", - "git": "Traçador de problèmas", - "login": "Connexion", - "logout": "Desconnexion", - "notifications": "Notificacions", - "profile": "Perfil", - "settings": "Paramètres", - "signup": "Inscripcion" - }, - "label": { - "shortcuts": "Acorchis clavièr", - "language": "Lenga", - "theme": "Tèma" - }, - "header": { - "options": "Opcions" - }, - "button": { - "switchInstance": "Utilizar una autra instància" - } - }, - "DangerousButton": { - "button": { - "cancel": "Anullar", - "confirm": "Confirmar" - }, - "header": { - "confirm": "Volètz confirmar aquesta accion ?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Anullar", - "edit": "Modificar", - "less": "Ne veire mens", - "more": "Ne veire mai", - "update": "Actualizar la descripcion" - }, - "header": { - "failure": "Error en actualizar la descripcion" - }, - "empty": { - "noDescription": "Cap de descripcion pas disponibla" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Escafar" - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Plegar", - "expand": "Desplegar" - } - }, - "CopyInput": { - "button": { - "copy": "Copiar" - }, - "message": { - "success": "Tèxte copiat al quichapapièr !" - } - }, - "LoginModal": { - "link": { - "login": "Connexion", - "signup": "Inscripcion" - }, - "header": { - "unauthenticated": "Desconnectat" - }, - "description": { - "noAccess": "Avètz pas accès a aquò !" - } - }, - "ContentForm": { - "help": { - "markdown": "Podètz utilizar la sintaxi Markdown." - }, - "empty": { - "noContent": "I a pas res a previsualizar." - }, - "button": { - "preview": "Apercebut", - "write": "Escriure" - }, - "placeholder": { - "input": "Escrivètz quicòm aquí…" - } - }, - "EmptyState": { - "header": { - "noResults": "Cap de resultat pas trobat." - }, - "button": { - "refresh": "Actualizar" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG o JPG. Las dimensions devon èsser entre 1400x1400px e 3000x3000px. La talha maximala autorizada es 5 Mo." - }, - "button": { - "remove": "Tirar" - }, - "label": { - "upload": "Enviar un nòu imatge…" - }, - "loader": { - "uploading": "Mandadís del fichièr…" - }, - "header": { - "failure": "Impossible de salvagardar vòstra pèça-junta" - } - }, - "ExpandableDiv": { - "button": { - "less": "Ne veire mens", - "more": "Ne veire mai" - } + "warning": { + "unsupported": "Aqueste tipe d’objècte es pas encara compatible" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - } + "SetInstanceModal": { + "button": { + "cancel": "Anullar", + "submit": "Validar" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } es ja dins { 1 }." - }, - "button": { - "addDuplicate": "Ajustar pr’aquò", - "addToPlaylist": "Ajustar a aquesta lista de lectura", - "addTrack": "Ajustar una pista", - "cancel": "Anullar", - "edit": "Modificar" - }, - "header": { - "addToPlaylist": "Ajustar a la lista de lectura", - "available": "Listas de lectura disponiblas", - "manage": "Gerir las listas de lectura", - "noResults": "Cap de resultat correspondent a aqueste filtre", - "addFailure": "Podèm pas ajustar aquesta pista a una lista de lectura" - }, - "table": { - "edit": { - "header": { - "edit": "Modificar", - "lastModification": "Darrièra modificacion", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "placeholder": { - "filterPlaylist": "Escrivètz lo nom de lista de lectura" - }, - "label": { - "filter": "Filtrar" - }, - "empty": { - "noPlaylists": "Cap de lista de lectura creada pel moment" - } + "header": { + "chooseInstance": "Causissètz vòstra instància", + "failure": "Connexion impossibla a l’URL donada", + "suggestions": "Suggestions" }, - "Editor": { - "button": { - "addDuplicate": "Ajustar pr’aquò", - "clear": "Escafar la lista de lectura", - "copy": "Copiar las pistas de la fila a la lista de lectura", - "insertFromQueue": "Inserir de la fila estant ({ n } pista) | Inserir de la fila estant ({ n } pistas)" - }, - "error": { - "sync": "Una error s’es producha en enregistrar vòstras modificacions" - }, - "message": { - "sync": "Cambiament sincronizat amb lo servidor" - }, - "modal": { - "clearPlaylist": { - "header": "Volètz voidar la lista de lectura « { playlist } » ?", - "content": { - "warning": "Aquò escafarà totas las pistas de la lista de lectura e poirà pas èsser anullat." - } - } - }, - "help": { - "reorder": "Lisatz las linhas per triar las pistas de la lista de lectura" - }, - "header": { - "editor": "Editor de lista de lectura" - }, - "warning": { - "duplicate": "Unas pistas de la fila son ja dins aquesta lista de lectura :" - }, - "loading": { - "sync": "Sincronizacion dels cambiaments amb lo servidor…" - } + "help": { + "notFunkwhaleServer": "L’adreça donada es pas un servidor Funkwhale", + "selectPod": "Per contunhar, seleccionatz una instància Funkwhale que volètz vos i connectar. Picatz l’adreça dirèctament, o seleccionatz-ne una dins las en suggestion.", + "serverDown": "Se pòt que lo servidor siá atudat" }, - "TrackPlaylistIcon": { - "button": { - "add": "Ajustar a la lista de lectura…" - } + "label": { + "url": "URL de l’instància" }, - "Form": { - "header": { - "createPlaylist": "Crear una nòva lista de lectura", - "createSuccess": "Lista de lectura creada", - "updateSuccess": "Lista de lectura actualizada", - "createFailure": "Lista de lectura creada" - }, - "button": { - "create": "Crear la lista de lectura", - "update": "Actualizar la lista de lectura" - }, - "placeholder": { - "name": "Ma lista de lectura tròp crana" - }, - "label": { - "name": "Nom de la lista de lectura", - "visibility": "Visibilitat de la lista de lectura" - } - }, - "Widget": { - "button": { - "create": "Crear una lista de lectura", - "more": "Ne veire mai" - }, - "placeholder": { - "noPlaylists": "Cap de lista de lectura creada pel moment" - } + "message": { + "newUrl": "Utilizatz una instància Funkwhale a {url}" } }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } acceptèt vòstra demanda de seguiment de la bibliotèca « { library } »", - "libraryFollow": "{ username } seguís vòstra bibliotèca « { library } »", - "libraryPendingFollow": "{ username } vòl seguir vòstra bibliotèca « { library } »" + "ShortcutsModal": { + "button": { + "close": "Tampar" + }, + "header": { + "modal": "Acorchis clavièr" + }, + "shortcut": { + "audio": { + "clearQueue": "Voidar la fila", + "decreaseVolume": "Reduire lo volum", + "expandQueue": "Espandir fila/vista del lector", + "increaseVolume": "Aumentar lo volum", + "label": "Acorchis del lector àudio", + "playNext": "Legir la pista seguenta", + "playPause": "Pausar/Legir la pista actuala", + "playPrevious": "Legir la pista precedenta", + "seekBack30": "Recular de 30s", + "seekBack5": "Recular de 5s", + "seekForward30": "Avançar de 30s", + "seekForward5": "Avançar de 5s", + "shuffleQueue": "Mesclar la fila", + "toggleFavorite": "Ajustar/Tirar dels favorits", + "toggleLoop": "Cambiar lo tipe de lectura de la lista", + "toggleMute": "Copar/Restablir lo son" }, - "button": { - "approve": "Validar", - "markRead": "Marcar coma legidas", - "markUnread": "Marcar coma pas legidas", - "reject": "Regetar" + "general": { + "focus": "Anar a la recèrca", + "label": "Acrochis generals", + "show": "Mostrar los acorchis clavièr disponibles", + "unfocus": "Sortir de la recèrca" } } }, "Sidebar": { + "header": { + "administration": "Administracion", + "explore": "Explorar", + "library": "Ma bibliotèca", + "main": "Navigacion principala", + "more": "Mai" + }, + "label": { + "add": "Ajustar de contengut", + "administration": "Administracion", + "edits": "Fichièrs en espèra", + "follows": "Demandas d’abonament en espèra", + "language": "Lenga", + "main": "Menú màger", + "play": "Legir aquesta pista", + "theme": "Tèma" + }, "link": { "about": "A prepaus d’aquesta instància", "albums": "Albums", @@ -1810,43 +307,1968 @@ "search": "Recercar", "settings": "Paramètres", "users": "Utilizaires" - }, - "label": { - "add": "Ajustar de contengut", - "administration": "Administracion", - "language": "Lenga", - "main": "Menú màger", - "follows": "Demandas d’abonament en espèra", - "edits": "Fichièrs en espèra", - "play": "Legir aquesta pista", - "theme": "Tèma" - }, - "header": { - "administration": "Administracion", - "explore": "Explorar", - "main": "Navigacion principala", - "more": "Mai", - "library": "Ma bibliotèca" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Enregistrar" + }, + "header": { + "error": "Error en enregistrar los paramètres.", + "image": "Imatge actual" + }, + "message": { + "success": "Paramètres corrèctament modificats." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Ajustar un camp novèl", + "edit": "Modificar lo formulari", + "preview": "Apercebut del formulari" + }, + "help": { + "additionalFields": "Camps addicionals pel formulari. Se veson sonque se la validacion de l’inscripcion es activada.", + "helpText": "Un tèxte opcional a afichar a la debuta del formulari d’inscripcion." + }, + "label": { + "additionalField": "Camp addicional", + "additionalFields": "Camps addicionals", + "delete": "Suprimir", + "helpText": "Tèxt d’ajuda", + "moveDown": "Desplaçar enbàs", + "moveUp": "Desplaçar ennaut" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Accions", + "label": "Nom del camp", + "required": "Obligatòri", + "type": "Tipe de camp" + }, + "required": { + "false": "Non", + "true": "Òc" + }, + "type": { + "long": "Tèxt grand", + "short": "Tèxt cort" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "tracks": "{n} pista | {n} pistas" + }, + "title": "Actualizat lo {date}" + }, + "ChannelEntries": { + "help": { + "subscribe": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut." + } + }, + "ChannelForm": { + "header": { + "error": "Error en enregistrar la cadena." + }, + "help": { + "discography": "Publicatz la musica que fasètz coma una bona discografia d’albums e singles.", + "podcast": "Albergatz vòstres episòdis e mantenètz vòstre comunitat al fial.", + "podcastFields": "Utilizat pels camps itunes:email e itunes:name, requerits per d’unas platafòrmas coma Spotify o iTunes.", + "username": "Utilizat dins las URL e per seguir aquesta cadena sul Fedivers. O podètz pas cambiar mai tard." + }, + "label": { + "category": "Categoria", + "description": "Descripcion", + "discography": "Discografia de l’artista", + "email": "Adreça electronica del proprietari", + "image": "Imatge de la cadena", + "language": "Lenga", + "name": "Nom", + "owner": "Nom del proprietari", + "podcast": "Podcast", + "subcategory": "Subcategoria", + "tags": "Etiquetas", + "username": "Identificant del Fedivers" + }, + "legend": { + "purpose": "A qué servirà aquesta cadena ?" + }, + "loader": { + "loading": "Cargament" + }, + "placeholder": { + "name": "Nom crane de la cadena", + "username": "nomcranedelacadena" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{n} episòdi | {n} episòdis" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Ne veire mai" + }, + "help": { + "subscribe": "Vos cal benlèu vos abonar a aquesta cadena per ne veire lo contengut." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Ne veire mai" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copiar" + }, + "header": { + "preview": "Apercebut" + }, + "help": { + "anonymous": "Mercés de contactar vòstres administrators e de lor demandar d’actualizar lo paramètres ligat.", + "embed": "Copiatz / Pegatz aqueste còdi al vòstre site HTML", + "width": "Daissar void per un widget adaptatiu" + }, + "label": { + "embed": "Còdi d’integracion", + "height": "Nautor del widget", + "width": "Largor del widget" + }, + "message": { + "copy": "Tèxte copiat al quichapapièr !" + }, + "warning": { + "anonymous": "Lo partatge foncionarà pas perque aqueste pod autoriza pas los utilizaires anonimes a accedir al contengut." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Anullar la demanda d’abonament", + "follow": "Seguir", + "unfollow": "Quitar de seguir" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista actuala", + "discretePlay": "Legir", + "episodeDetails": "Detalhs de l’episòdi", + "hideArtist": "Amagar lo contengut d’aqueste artista", + "playAlbum": "Legir l’album", + "playArtist": "Legir çò de l’artista", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "playPlaylist": "Legir la lista de lectura", + "playTrack": "Legir la pista", + "playTracks": "Legir las pistas", + "report": "Senhalar…", + "startRadio": "Legir de cançons similaras", + "trackDetails": "Detalhs de la pista" + }, + "title": { + "more": "Mai…", + "unavailable": "Aquesta pista es pas disponibla dins cap de las bibliotècas qu’avètz accès" + } + }, + "Player": { + "header": { + "player": "Lector àudio e contraròtle" + }, + "label": { + "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", + "audioPlayer": "Lector mèdia", + "clearQueue": "Voidar la fila", + "expandQueue": "Desplegar la fila", + "loopingDisabled": "Repeticion desactivada. Clicatz per activar la repeticion de la pista actuala.", + "loopingSingle": "Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la fila.", + "loopingWholeQueue": "Repeticion de tota la fila, clicatz per desactivar la repeticion.", + "mute": "Copar lo son", + "nextTrack": "Pista seguenta", + "pause": "Pausa", + "play": "Legir", + "previousTrack": "Pista precedenta", + "shuffleQueue": "Mesclar la fila", + "unmute": "Restablir lo son" + }, + "meta": { + "position": "({index} de {length})", + "unknownAlbum": "Album desconegut", + "unknownArtist": "Artista desconegut" + } + }, + "PlayerControls": { + "labels": { + "next": "Pista seguenta", + "pause": "Pausa", + "play": "Lectura", + "previous": "Pista precedenta" + } + }, + "Search": { + "empty": { + "noAlbums": "Cap d’album correspond pas a vòstra recèrca", + "noArtists": "Cap d’artista correspond pas a vòstra recèrca" + }, + "header": { + "albums": "Albums", + "artists": "Artistas", + "search": "Recercar de musica" + }, + "placeholder": { + "search": "Artista, album, pista…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Pas cap de resultats per aquesta recèrca" + }, + "header": { + "noResults": "Cap de correspondéncia pas trobada" + }, + "label": { + "album": "Album", + "artist": "Artista", + "category": { + "federation": "Federacion", + "podcasts": "Podcast" + }, + "search": "Recercar de contengut", + "tag": "Etiqueta", + "track": "Pista" + }, + "link": { + "fediverse": "Recercar sul fediverse", + "more": "Mai de resultats 🡒", + "rss": "S’abonar a un podcast via RSS" + }, + "placeholder": { + "search": "Recercar d’artistas, d’albums, de pistas…" + } + }, + "VolumeControl": { + "button": { + "mute": "Copar lo son", + "unmute": "Restablir lo son" + }, + "label": { + "slider": "Ajustar lo volum" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "tracks": "{n} pista | {n} pistas" + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostrar las accions de la pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Ajustar als favorits", + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista", + "albumDetails": "Veire l’album", + "artistDetails": "Veire l’artista", + "channelDetails": "Veire la cadena", + "episodeDetails": "Detalhs de l’episòdi", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "removeFromFavorites": "Tirar dels favorits", + "seriesDetails": "Veire las serias", + "startRadio": "Legir la pista", + "trackDetails": "Detalhs de la pista" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostrar las accions de la pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Ajustar als favorits", + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista", + "albumDetails": "Veire l’album", + "artistDetails": "Veire l’artista", + "channelDetails": "Veire la cadena", + "episodeDetails": "Detalhs de l’episòdi", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "removeFromFavorites": "Tirar dels favorits", + "seriesDetails": "Veire las serias", + "startRadio": "Legir la pista", + "trackDetails": "Detalhs de la pista" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artista", + "title": "Títol" + } + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + }, + "empty": { + "noResults": "Cap de resultat pas trobat" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Tornar generar lo geton" + }, + "header": { + "appDetails": "Detalhs de l’aplicacion", + "editApp": "Modificar l’aplicacion" + }, + "help": { + "appDetails": "L’ID e lo secrèt de l’aplicacion son de donadas vertadièrament sensiblas e devon èsser consideradas coma de senhals. Partegetz-las pas amb degun." + }, + "label": { + "accessToken": "Geton d’accès", + "appId": "ID de l’aplicacion", + "appSecret": "Secret de l’aplicacion" + }, + "link": { + "settings": "Tornar als paramètres" + }, + "title": "Modificar l’aplicacion" + }, + "ApplicationForm": { + "button": { + "create": "Crear una aplicacion", + "update": "Actualizar l’aplicacion" + }, + "header": { + "failure": "Podèm pas enregistrar vòstras modificacions" + }, + "help": { + "redirectUri": "Utilizatz « urn:ietf:wg:oauth:2.0:oob » coma URI de redireccion se vòstra aplicacion es pas disponibla en linha." + }, + "label": { + "name": "Nom", + "redirectUri": "URI de redireccion", + "scopes": { + "description": "Causir l’autorizacion «Lectura» o «Escritura» sul parent implica l’accès a totes los jos elements correspondents.", + "read": { + "description": "Accès lectura sola de las donadas utilizaire", + "label": "Lectura" + }, + "write": { + "description": "Accès escritura sola de las donadas utilizaire", + "label": "Escritura" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Tornar als paramètres" + }, + "title": "Crear una nòva aplicacion" + }, + "Authorize": { + "button": { + "authorize": "Autorizar {app}" + }, + "header": { + "access": "{app_name} vòl accedir a vòstre compte Funkwhale", + "allScopes": "Accès complèt", + "authorize": "Autorizar una tèrça aplicacion", + "authorizeFailure": "Error en autorizar l’aplicacion", + "fetchFailure": "Error en recuperar las donadas de l’aplicacion", + "readOnly": "Lectura sola", + "writeOnly": "Escritura sola" + }, + "help": { + "copyCode": "Vos mostrarem un còdi de copiar-pegar dins l’aplicacion", + "pasteCode": "Copiatz-pegatz lo còdi seguent dins l’aplicacion :", + "redirect": "Seretz mandat a { 0 }" + }, + "message": { + "unknownPermissions": "L’aplicacion demanda tanben las autorizacions desconegudas seguentas :" + }, + "title": "Autorizar l’aplicacion" + }, + "LoginForm": { + "button": { + "login": "Connexion" + }, + "header": { + "loginFailure": "Error pendent la connexion" + }, + "help": { + "approvalRequired": "Se vos sètz marcat fa pas gaire, benlèu que vos cal esperar que nòstra còla de moderacion repasse vòstre compte, o verifique vòstra adreça electronica.", + "invalidCredentials": "Mercés de verificar que lo nom d’utilizaire e lo senhal son corrèctes e asseguratz-vos d’aver verificat vòstre corrièl." + }, + "label": { + "password": "Senhal", + "username": "Nom d’utilizaire o corrièl" + }, + "link": { + "createAccount": "Crear un compte", + "resetPassword": "Reïnicializar lo senhal" + }, + "placeholder": { + "username": "Escrivètz vòstre nom d’utilizaire o corrièl" + } + }, + "Logout": { + "button": { + "logout": "Òc-ben, desconnectatz-me !" + }, + "header": { + "confirm": "Volètz vertadièrament vos desconnectar ?", + "unauthenticated": "Sètz pas connectat actualament" + }, + "link": { + "login": "Connectatz-vos !" + }, + "message": { + "loggedIn": "Sètz connectat coma {username}" + }, + "title": "Desconnexion" + }, + "Plugin": { + "button": { + "save": "Enregistrar", + "scan": "Explorar" + }, + "description": { + "library": "Bibliotèca ont los fichièrs devon èsser importats." + }, + "header": { + "failure": "Error en enregistrant lo modul" + }, + "label": { + "library": "Bibliotèca", + "pluginEnabled": "Activada" + }, + "link": { + "documentation": "Documentacion" + } + }, + "Settings": { + "button": { + "delete": "Suprimir", + "deleteAccount": "Suprimir mon compte…", + "deleteAccountConfirm": "Suprimir mon compte", + "disableSubsonic": "Desactivar l’accès", + "edit": "Modificar", + "password": "Cambiar lo senhal", + "refresh": "Actualizar", + "remove": "Tirar", + "removeApp": "Suprimir l’aplicacion", + "revoke": "Revocar", + "revokeAccess": "Revocar l’accès", + "update": "Actualizar", + "updateSettings": "Actualizar los paramètres" + }, + "description": { + "authorizedApps": "Aquò es la lista de las aplicacions qu’an accès a las donadas de vòstre compte.", + "changeEmail": "Cambiar l’adreça email ligada a vòstre compte. Mandarem una confirmacion a l’adreça novèla.", + "changePassword": { + "paragraph1": "L’actualizacion de vòstra senhal cambiarà tanben lo de l’API Subsonic se n’avètz un.", + "paragraph2": "Vos caldrà actualizar lo senhal sus totes los clients qu’utilizan aqueste senhal." + }, + "contentFilters": "Los filtres de contengut vos ajudan a amagar los contenguts que volètz pas veire sus aqueste servici.", + "deleteAccount": "Podètz suprimir vòstre compte e totas las donadas d’un biais permanent e irreversible en utilizar lo formulari çai-jos. Vos demandarem una confirmacion.", + "plugins": "Utilizatz d’extension per agrandir las possibilitat de Funkwhale e obténer mai de foncionalitats.", + "yourApps": "Aquò es la lista de las aplicacions qu’avètz creadas." + }, + "header": { + "accountFailure": "Podèm pas suprimir vòstre compte", + "accountSettings": "Paramètres del compte", + "authorizedApps": "Aplicacions autorizadas", + "avatar": "Avatar", + "avatarFailure": "L’avatar pòt pas èsser enregistrat", + "changeEmail": "Cambiar mon adreça electronica", + "changePassword": "Cambiar lo senhal", + "contentFilters": "Filtres de contengut", + "deleteAccount": "Suprimir mon compte", + "emailFailure": "Podèm pas cambiar vòstra d’adreça mail", + "hiddenArtists": "Artistas amagats", + "noApps": "Avètz pas cap d‘aplicacion connectada a aqueste compte.", + "noPersonalApps": "Avètz pas cap d‘aplicacion creada pel moment.", + "passwordFailure": "Lo senhal pòt pas èsser cambiat", + "plugins": "Moduls", + "settingsUpdated": "Paramètres actualizats", + "updateFailure": "Impossible d’actualizar vòstres paramètres", + "yourApps": "Vòstras aplicacions" + }, + "help": { + "changePassword": "Mercés de verificar que lo senhal es corrèct", + "noApps": "S’autorizatz de tèrças aplicacions a accedir a vòstras donadas, seràn listadas aquí.", + "noPersonalApps": "Marcatz-ne ua per integrar Funkwhale amb de tèrças aplicacions." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Senhal actual", + "newEmail": "Adreça electronica novèla", + "newPassword": "Nòu senhal", + "password": "Senhal" + }, + "link": { + "managePlugins": "Gerir los moduls", + "newApp": "Crear una nòva aplicacion" + }, + "message": { + "confirmDelete": "Vòstra demanda de supression es estada enviada, vòstre compte e lo contengut seràn lèu suprimits", + "currentEmail": "Vòstra adreça electronica actuala es {email}." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Sètz per èsser desconnectat d’aquesta session e vos caldrà vos connectar amb lo nòu senhal", + "subsonic": "Vòstre senhal Subsonic serà remplaçat per un nòu aleatòri, aquò vos desconnectarà de totes los periferics qu’utilizan l’ancian senhal", + "warning": "Lo cambiament de senhal a las consequéncias seguentas" + }, + "header": "Cambiar lo senhal ?" + }, + "deleteAccount": { + "content": { + "warning": "Aquò es irreversible e suprimirà d’un biais permanent vòstras donadas de nòstres servidors. Seretz immediatament desconnectat." + }, + "header": "Volètz suprimir vòstre compte ?" + }, + "deleteApp": { + "content": { + "warning": "Aquò escafarà aquesta aplicacion per totjorn e totes los getons ligats." + }, + "header": "Suprimir l’aplicacion « {app} » ?" + }, + "revokeApp": { + "content": { + "warning": "Aquò empacha aquesta aplicacion d’accedir al servici en vòstre nom." + }, + "header": "Revocar l’accès a l’aplicacion « {app} » ?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data de creacion", + "name": "Nom" + } + }, + "authorizedApps": { + "header": { + "application": "Aplicacion", + "permissions": "Autorizacions" + } + }, + "yourApps": { + "header": { + "application": "Aplicacion", + "creationDate": "Data de creacion", + "scopes": "Visibilitats" + } + } + }, + "title": "Paramètres del compte", + "warning": { + "deleteAccount": "Vòstre compte serà suprimit de nòstres servidors d’aquí unas minutas. Avisarem tanben los autres servidors que pòdon aver una còpia de certanas donda per que realizen la supression. Remarcatz qu’unes d’aqueles pòdon èsser fòra linha o voler pas o far." + } + }, + "SignupForm": { + "button": { + "create": "Crear mon compte" + }, + "header": { + "login": "Connectatz-vos a vòstre compte Funkwhale", + "signupFailure": "Lo compte pòt pas èsser creat." + }, + "label": { + "email": "Adreça electronica", + "password": "Senhal", + "username": "Nom d’utilizaire" + }, + "message": { + "accountCreated": "Lo compte es estat corrèctament creat. Volgatz verificar vòstra bóstia de recepcion abans d’ensajar de vos connectar.", + "awaitingReview": "Vòstra demanda de compte es estada corrèctament enviada. Vos notificarem per corrièl un còp que nòstra equipa de moderacion aja repassat la demanda.", + "registrationClosed": "Las inscripcions son tampadas sus aquesta instància. Auretz de téner un còdi d’invitacion per vos marcar.", + "requiresReview": "Las inscripcions sus aquesta instància son dobèrtas, mas l’equipa de moderacion repassa las demanda." + }, + "placeholder": { + "email": "Picatz vòstra adreça electronica", + "invitation": "Escrivètz vòstre còdi d’invitacion (pas sensible a la cassa)", + "username": "Escrivètz vòstre nom d’utilizaire" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Desactivar l’accès", + "confirmNewPassword": "Demandar un senhal", + "disable": "Desactivar l’accès via Subsonic", + "newPassword": "Demandar un nòu senhal" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale es compatible amb d’autres lectors de musica compatibles amb l’API Subsonic.", + "paragraph2": "Podètz los utilizar per profeitar de vòstras listas de lectura e de vòstra musica en mòde fòra linha sus vòstre mobil, tableta, per exemple.", + "paragraph3": "Pr’aquò, accedir a Funkwhale d’un client estant demanda un senhal diferent que podètz configurar çai-jos." + } + }, + "header": { + "error": "Error", + "subsonic": "Senhal de l’API Subsonic" + }, + "label": { + "subsonicField": "Senhal de l’API Subsonic" + }, + "link": { + "apps": "Aprenètz a utilizar Funkwhale amb d’autras aplicacions" + }, + "message": { + "accessDisabled": "Accès desactivat", + "passwordUpdated": "Senhal actualizat", + "unavailable": "L’API Subsonic es pas disponibla per aquesta instància Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Aquò desactivarà complètament l’accès a l’API Subsonic de vòstre compte estant." + }, + "header": "Desactivar l’accès a l’API Subsonic ?" + }, + "newPassword": { + "content": { + "warning": "Aquò vos desconnectarà de totes los periferics qu’utilizan aqueste senhal." + }, + "header": "Demandar un nòu senhal per l’API Subsonic ?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Error en crear" + }, + "label": { + "albumTitle": "Títol" + } + }, + "AlbumModal": { + "button": { + "cancel": "Anullar", + "create": "Crear" + }, + "header": { + "newAlbum": "Album novèl", + "newSeries": "Nòvas serias" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Serias" + }, + "meta": { + "tracks": "{n} pista | {n} pistas" + }, + "option": { + "none": "Cap" + } + }, + "LicenseSelect": { + "label": { + "license": "Licéncia" + }, + "link": { + "license": "A prepaus d’aquesta licéncia" + }, + "option": { + "none": "Cap" + } + }, + "SubscribeButton": { + "help": { + "auth": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut" + }, + "title": { + "subscribe": "S’abonar", + "unsubscribe": "Quitar de seguir" + } + }, + "UploadForm": { + "button": { + "edit": "Modificar", + "ignore": "Ignorar", + "remove": "Tirar", + "resume": "Reprendre", + "retry": "Tornar ensajar" + }, + "description": { + "extensions": "Extensions compatiblas : {extensions}" + }, + "header": { + "error": "Error en publicar" + }, + "help": { + "license": "Ajustatz una licéncia a vòstre mandadís per assegurar las libertats de vòstre public." + }, + "label": { + "channel": "Cadena", + "openBrowser": "Percórrer…" + }, + "message": { + "dragAndDrop": "Lisatz depausatz los fichièrs aquí o dorbissètz lo navegador per enviar de fichièrs", + "pending": "Avètz de brolhon de mandadisses en espèra de publicacion." + }, + "status": { + "errored": "Perturbat", + "pending": "En espèra", + "uploading": "Mandadís en cors" + }, + "warning": { + "quota": "Avètz pas mai d’espaci per enviar los fichièrs. Mercés de contactar los moderators." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descripcion", + "image": "Imatge de la pista", + "position": "Posicions", + "tags": "Etiquetas", + "title": "Títol" + } + }, + "UploadModal": { + "button": { + "cancel": "Anullar", + "close": "Tampar", + "finishLater": "Acabar mai tard", + "next": "Etapa seguenta", + "previous": "Etapa precedenta", + "publish": "Publicar", + "update": "Actualizar" + }, + "header": { + "processing": "Tractament dels mandadisses", + "publish": "Publicar àudio", + "uploadDetails": "Detalh de mandadís", + "uploadFiles": "Fichièrs d’enviar" + }, + "meta": { + "files": "{n} fichièr | {n} fichièrs", + "quota": "Espaci liure restant : {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{n} de { total } element seleccionat | {n} de { total } elements seleccionats", + "go": "Zo", + "launch": "Aviar", + "refresh": "Actualizar lo contengut de la tabla", + "select": "Seleccionar", + "selectAll": "Seleccionar totes los elements", + "selectCurrentPage": "Seleccionar solament la pagina actuala", + "selectElement": "Seleccionar un element | Seleccionar l’ensemble dels {n} elements", + "selected": "{n} de {total} element seleccionat | {n} de {total} elements seleccionats" + }, + "header": { + "error": "Error en tractar l’accion" + }, + "label": { + "actions": "Accions", + "performAction": "Executar las accions" + }, + "message": { + "needsRefresh": "Lo contengut es estat actualizat, clicar per tornar cargar e veire lo contengut a jorn", + "success": "L’action {action} es estada lançada corrèctament sus {n} element | L’action {action} es estada lançada corrèctament sus {n} elements" + }, + "modal": { + "performAction": { + "content": { + "warning": "Aquesta operacion pòt afectar mantun elements o pòt pas èsser anullada, mercés de verificar s’es ben çò que desiratz." + }, + "header": "Volètz lançar l’accion « {action} » sus {n} element ? | Volètz lançar l’accion « {action} » sus {n} elements ?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Tirar" + }, + "header": { + "failure": "Impossible de salvagardar vòstra pèça-junta" + }, + "help": { + "upload": "PNG o JPG. Las dimensions devon èsser entre 1400x1400px e 3000x3000px. La talha maximala autorizada es 5 Mo." + }, + "label": { + "upload": "Enviar un nòu imatge…" + }, + "loader": { + "uploading": "Mandadís del fichièr…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Plegar", + "expand": "Desplegar" + } + }, + "ContentForm": { + "button": { + "preview": "Apercebut", + "write": "Escriure" + }, + "empty": { + "noContent": "I a pas res a previsualizar" + }, + "help": { + "markdown": "Podètz utilizar la sintaxi Markdown" + }, + "placeholder": { + "input": "Escrivètz quicòm aquí…" + } + }, + "CopyInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "success": "Tèxte copiat al quichapapièr !" + } + }, + "DangerousButton": { + "button": { + "cancel": "Anullar", + "confirm": "Confirmar" + }, + "header": { + "confirm": "Volètz confirmar aquesta accion ?" + } + }, + "Duration": { + "meta": { + "hours": "{hours} h {minutes} min", + "minutes": "{minutes} min" + } + }, + "EmptyState": { + "button": { + "refresh": "Actualizar" + }, + "header": { + "noResults": "Cap de resultat pas trobat." + } + }, + "ExpandableDiv": { + "button": { + "less": "Ne veire mens", + "more": "Ne veire mai" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Escafar" + }, + "label": { + "search": "Recercar" + }, + "placeholder": { + "search": "Recercar…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Avètz pas accès a aquò" + }, + "header": { + "unauthenticated": "Desconnectat" + }, + "link": { + "login": "Connexion", + "signup": "Inscripcion" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Anullar", + "edit": "Modificar", + "less": "Ne veire mens", + "more": "Ne veire mai", + "update": "Actualizar la descripcion" + }, + "empty": { + "noDescription": "Cap de descripcion pas disponibla" + }, + "header": { + "failure": "Error en actualizar la descripcion" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Lenga", + "shortcuts": "Acorchis clavièr", + "theme": "Tèma" + }, + "link": { + "about": "A prepaus", + "chat": "Sala de discutida", + "docs": "Documentacion", + "forum": "Forum", + "git": "Traçador de problèmas", + "login": "Connexion", + "logout": "Desconnexion", + "notifications": "Notificacions", + "profile": "Perfil", + "settings": "Paramètres", + "signup": "Inscripcion", + "support": "Ajuda" + } + }, + "UserModal": { + "button": { + "switchInstance": "Utilizar una autra instància" + }, + "header": { + "options": "Opcions" + }, + "label": { + "language": "Lenga", + "shortcuts": "Acorchis clavièr", + "theme": "Tèma" + }, + "link": { + "about": "A prepaus", + "chat": "Sala de discutida", + "docs": "Documentacion", + "forum": "Forum", + "git": "Traçador de problèmas", + "login": "Connexion", + "logout": "Desconnexion", + "notifications": "Notificacions", + "profile": "Perfil", + "settings": "Paramètres", + "signup": "Inscripcion", + "support": "Ajuda" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "I a pas encara de pistas ajustadas a vòstres favorits" + }, + "header": { + "favorites": "{n} favorit | {n} favorits" + }, + "link": { + "library": "Percórrer la bibliotèca" + }, + "loader": { + "loading": "Cargament dels favorits…" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "title": "Vòstres favorits" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Ajustar als favorits", + "remove": "Tirar dels favorits" + }, + "label": { + "inFavorites": "Als favorits" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Tampar", + "reload": "Tampar e tornar cargar la pagina" + }, + "description": { + "failure": "Una error s’es producha en actualizar las donadas :", + "pending": "La requèsta d’actualizacion es pas estada tractada a temps per nòstre servidor. Serà executada mai tard.", + "skipped": "Lo servidor alonhat a respondut, mas las donadas enviadas son pas suportadas er Funkwhale.", + "success": "Las donadas son estadas actualizadas corrèctament del servidors alonhat estant." + }, + "header": { + "failure": "Error en actualizar", + "pending": "Actualizar las info del nos", + "refresh": "Actualizacion de l’objècte del servidor alonhat estant…", + "saveFailure": "Error en enregistrar los paramètres", + "skipped": "L’actualizada es estada passada", + "success": "Actualizacion reüssida" + }, + "loader": { + "awaitingResult": "En espèra dels resultats…", + "fetchRequest": "Demanda de recuperacion…" + }, + "table": { + "error": { + "label": { + "detail": "Detalhs de l’error", + "type": "Tip d’error" + }, + "value": { + "connectionError": "Connexion impossibla al servidor alonhat", + "httpError": "Una error HTTP s’es producha en contactar lo servidor alonhat", + "httpStatus": "Lo servidor alonhat a respondut amb lo còdi HTTP {status}", + "invalidAttributesError": "Las donadas tornadas pel servidor alonhat an d’atributs mancants o invalids", + "invalidJsonError": "Lo servidor alonhat a respondut amb de donadas JSON o JSON-LD invalidas", + "timeoutError": "Lo servidor alonhat a tròp tardat a respondre", + "unknownError": "Error desconeguda" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Ne veire mai" + }, + "empty": { + "noMatch": "Cap de bibliotèca correspondenta." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "copy": "Tèxte copiat al quichapapièr !" + }, + "title": "Mostrar/amagar lo senhal" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Ajustar una descripcion…" + }, + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "tracks": "{n} pista | {n} pistas" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "Aqueste album es present a las bibliotècas seguentas :" + }, + "header": { + "episodes": "Episòdis", + "libraries": "Bibliotècas de l’utilizaire", + "tracks": "Pistas" + }, + "meta": { + "volume": "Volum {number}" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Anullar", + "delete": "Suprimir", + "edit": "Modificar", + "embed": "Integrar", + "more": "Mai…" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panèl d’admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "musicbrainz": "Veire sus MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Aqueste album serà tirat, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste album ?" + }, + "embed": { + "header": "Integrar aqueste album a un site web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Modificar aqueste album", + "suggest": "Podèm pas cargar aquesta pisata" + }, + "message": { + "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." + } + }, + "Albums": { + "button": { + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer los albums" + }, + "label": { + "search": "Recercar", + "tags": "Etiquetas" + }, + "link": { + "addMusic": "Ajustar musica" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Picatz lo títol de l’album…" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Anullar", + "edit": "Modificar", + "embed": "Integrar", + "more": "Mai…", + "play": "Legir totes los albums" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panèl d’admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "musicbrainz": "Veire sus MusicBrainz", + "wikipedia": "Recercar sus Wikipèdia" + }, + "meta": { + "albums": "{n} albums | {n} albums", + "tracks": "{count} pista dins | {count} pistas dins" + }, + "modal": { + "embed": { + "header": "Integrar aquesta pista a vòstre site web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Levar lo filtre", + "more": "Ne cargar mai…" + }, + "description": { + "library": "Aqueste artista es present a las bibliotècas seguentas :" + }, + "header": { + "album": "Albums d’aqueste artista", + "library": "Bibliotècas de l’utilizaire", + "track": "Pistas novèlas d’aqueste artista" + }, + "link": { + "filter": "Validar mos filtres" + }, + "message": { + "filter": "Amagatz lo contengut ligat a aqueste artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Modificar aqueste artista", + "suggest": "Podèm pas cargar aquesta pisata" + }, + "message": { + "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." + } + }, + "Artists": { + "button": { + "search": "Recercar", + "upload": "Ajustar musica" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer los artistas" + }, + "label": { + "excludeCompilation": "Exclure las compilacions d’artistas", + "search": "Nom de l’artista", + "tags": "Etiquetas" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Recercar…" + }, + "title": "Artistas" + }, + "EditCard": { + "button": { + "approve": "Validar", + "delete": "Suprimir", + "reject": "Regetar" + }, + "header": { + "modification": "Modificacion {id}" + }, + "link": { + "track": "Pista #{id} - {name}" + }, + "modal": { + "content": { + "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." + }, + "delete": { + "header": "Suprimir aquesta règla de moderacion ?" + } + }, + "status": { + "applied": "Validada e aplicada", + "approved": "Validat", + "pending": "En espèra de validacion", + "rejected": "Regetat" + }, + "table": { + "update": { + "header": { + "field": "Camp", + "newValue": "Nòva valor", + "oldValue": "Anciana valor" + }, + "notApplicable": "ND" + } + } + }, + "EditForm": { + "button": { + "cancel": "Anullar", + "clear": "Escafar", + "new": "Enviar una modificacion de mai", + "reset": "Tornar a la valor iniciala", + "showAll": "Mostrar totas las modificacions", + "showUnreviewed": "Restrénher a las modificacions pas repassadas", + "submit": "Enviar e aplicar la modificacion", + "suggest": "Enviar la suggestion" + }, + "empty": { + "suggestEdit": "Suggerir un cambiament en utilizar lo formulari çai-jos" + }, + "header": { + "failure": "Error en enviar la modificacion", + "recentEdits": "Modificacions recentas", + "success": "La modificacion es estada corrèctament enviada.", + "unreviewed": "Modificacions recentas en espèra de relectura" + }, + "label": { + "summary": "Resumit (opcional)" + }, + "message": { + "noPermission": "Avètz pas l’autorizacion de modificar aqueste objècte, mas podètz suggerir de cambiaments. Un còp mandadas, las suggestions seràn repassadas abans validacion." + }, + "notApplicable": "ND", + "placeholder": { + "summary": "Una descripcion pichona per explicar vòstres cambiaments." + } + }, + "FileUpload": { + "button": { + "cancel": "Anullar", + "retry": "Tornar ensajar los mandadisses fracassats" + }, + "description": { + "import": "Resultats d’import", + "previousImport": "Resultats de vòstre import precedent :" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error en aviant l’import", + "local": "Importar de la musica de vòstre emmagazinatge local", + "server": "Estatut de l’import", + "status": "Estatut de l’import" + }, + "label": { + "extensions": "Extensions compatiblas : {extensions}", + "remainingSpace": "Espaci liure", + "uploadWidget": "Clicatz per causir los fichièrs d’enviar o lisatz los fichièrs o repertòris" + }, + "link": { + "picard": "Vos recomandam d’utilizar lo logicial Picard per aquò far.", + "processing": "Tractament", + "uploading": "Mandadís en cors" + }, + "message": { + "local": { + "copyright": "Envietz pas cap de contengut jos dreches a una bibliotèca publica, autrament enfranhètz la lei", + "format": "Los fichièrs musicals que sètz a enviar son al format OGG, Flac, MP3 o AIFF", + "message": "Sètz a man d’enviar de la musica a vòstra bibliotèca. Abans de començar, mercés de vos assegurar que :", + "tag": "Los fichièrs musicals que sètz a enviar son etiquetats coma cal." + } + }, + "table": { + "upload": { + "header": { + "actions": "Accions", + "filename": "Nom del fichièr", + "size": "Talha", + "status": "Estatut" + }, + "progress": "{percent}%", + "status": { + "pending": "En espèra", + "uploaded": "Enviat", + "uploading": "Mandadís…" + } + } + }, + "tooltip": { + "denied": "Mandadís refusat, asseguratz-vos que lo fichièr es pas tròp grand e qu’avètz pas atenhut vòstre quòta", + "extension": "Tipe de fichièr pas valid, asseguratz-vos d’enviar un fichièr àudio. Las extensions compatiblas son {extensions}", + "network": "Una error de ret s’es producha en enviar aqueste fichièr", + "retry": "Tornar ensajar", + "size": "Mandadís del fichièr impossible, asseguratz-vos qu’es pas tròp pesuc", + "timeout": "Temps de transferiment expirat, ensajatz tornamai" + } + }, + "FsBrowser": { + "button": { + "import": "Importar" + } + }, + "FsLogs": { + "empty": { + "notStarted": "L’import a pas encara començat" + } + }, + "Home": { + "header": { + "newChannels": "Nòvas cadenas", + "playlists": "Listas de lectura", + "recentlyAdded": "Ajustats i a res", + "recentlyFavorited": "Ajustadas als favorits i a res", + "recentlyListened": "Escotadas i a res" + }, + "title": "Bibliotèca" + }, + "ImportStatusModal": { + "button": { + "close": "Tampar" + }, + "error": { + "importFailure": "Una error s’es producha pendent lo processús de mandadís. Trobaretz mai d’informacion çai-jos.", + "invalidMetadata": { + "label": "Metadonada invalida", + "message": "La metadonada inclusa al fichièr es invalida o de camps obligatòris son absents." + }, + "unknownError": { + "label": "Error desconeguda", + "message": "Una error desconeguda s’es producha" + } + }, + "header": { + "importDetail": "Detalhs de l’import" + }, + "link": { + "documentation": "Legissètz nòstra documentacion per aquesta error", + "support": "Dobrir un fil de discutida d’assisténcia (donatz las informacions de desbugatge dins vòstre messatge)" + }, + "message": { + "importDetail": "Lo mandadís es encara en espèra e serà lèu tractat pel servidor.", + "importSuccess": "Lo mandadís es estat corrèctament tractat pel servidor." + }, + "table": { + "error": { + "debug": "Informacions de debug", + "errorDetail": "Detalhs de l’error", + "errorType": "Tip d’error", + "help": "Obténer d’ajuda" + } + }, + "warning": { + "importSkipped": "Lo mandadís es estat sautat perque un que li sembla es ja disponible dins una de vòstras bibliotèca." + } + }, + "Podcasts": { + "button": { + "cancel": "Anullar", + "channel": "Crear una cadena", + "feed": "S’abonar al flux RSS", + "search": "Recercar", + "subscribe": "S’abonar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer los Podcasts" + }, + "label": { + "search": "Títol del podcast", + "tags": "Etiquetas" + }, + "modal": { + "subscription": { + "header": "Inscripcion" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Recercar…" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Crear una ràdio", + "create": "Crear vòstra pròpria ràdio", + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer las ràdios", + "instance": "Ràdios de l’instància", + "user": "Ràdios dels utilizaires" + }, + "label": { + "search": "Recercar" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Escrivètz un nom de ràdio…" + }, + "title": "Ràdios" + }, + "TagDetail": { + "header": { + "channels": "Cadenas", + "tracks": "Pistas" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "moderation": "Dobrir dins l’interfàcia de moderacion" + } + }, + "TagSelector": { + "placeholder": { + "search": "Recercar…" + } + }, + "TrackBase": { + "button": { + "cancel": "Anullar", + "delete": "Suprimir", + "download": "Telecargar", + "edit": "Modificar", + "embed": "Integrar", + "more": "Mai…", + "play": "Legir" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panèl d’admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "wikipedia": "Recercar sus Wikipèdia" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta pista serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aquesta pista ?" + }, + "embed": { + "header": "Integrar aquesta pista a un site web" + } + }, + "title": "Pista" + }, + "TrackDetail": { + "description": { + "library": "Aquesta pista es presenta a las bibliotècas seguentas :" + }, + "header": { + "episode": "Detalhs de l’episòdi", + "library": "Bibliotècas associadas", + "playlists": "Listas de lectura associadas", + "release": "Detalhs de publicacion", + "track": "Detalhs de la pista" + }, + "link": { + "musicbrainz": "Veire sus MusicBrainz" + }, + "notApplicable": "ND", + "table": { + "release": { + "album": "Album", + "artist": "Artista", + "copyright": "Copyright", + "license": "Licéncia", + "series": "Seria", + "url": "URL", + "year": "An" + }, + "track": { + "bitrate": { + "label": "Debit", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Telecargaments", + "duration": "Durada", + "size": "Talha" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Modificar aquesta pista", + "suggest": "Podèm pas cargar aquesta pisata" + }, + "message": { + "remote": " Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Ajustar lo filtre", + "save": "Enregistrar" + }, + "description": { + "builder": "Podètz utilizar aquesta interfàcia per realizar vòstra pròpria ràdio personalizada, que jogarà las listas segon los critèris indicats." + }, + "header": { + "builder": "Editor", + "created": "Nom de la ràdio", + "matches": "{n} pista correspond als filtres seleccionats | {n} pistas correspondon als filtres seleccionats", + "updated": "Ràdio actualizada" + }, + "label": { + "description": "Descripcion", + "filter": "Ajustar de filtres per dire de personalizar vòstra ràdio", + "name": "Nom de la ràdio", + "public": "Mostrar publicament" + }, + "option": { + "filter": "Seleccionar un filtre" + }, + "placeholder": { + "description": "Ma descripcion tròp crana", + "name": "Ma ràdio tròp crana" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data d’accès", - "account": "Compte", - "creationDate": "Data de creacion", - "domain": "Domenu", - "importStatus": "Estatut de l’import", - "library": "Bibliotèca", - "name": "Nom", - "size": "Talha", - "visibility": "Visibilitat" + "actions": "Accions", + "candidates": "Pistas candidatas", + "config": "Configuracion", + "exclude": "Exclure", + "name": "Nom del filtre" } } }, + "title": "Editor de ràdio" + }, + "Filter": { + "cancelButton": "Anullar", + "excludeLabel": "Exclure", + "matchingTracksModalHeader": "Pistas correspondentas al filtre", + "removeButton": "Tirar" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoria", + "search": "Recercar" + }, + "link": { + "local": "Local", + "moderation": "Dobrir dins l’interfàcia de moderacion" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, nom d’utilizaire, compte…" + }, + "table": { + "channel": { + "header": { + "account": "Compte", + "albums": "Albums", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Los albums seleccionats seràn tirats, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "link": { + "local": "Local", + "moderation": "Dobrir dins l’interfàcia de moderacion" + }, + "notApplicable": "ND", + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, ID MusicBrainz…" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Títol", + "releaseDate": "Data de sortida", + "tracks": "Pistas" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Los artistas seleccionats seràs tirats, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "category": "Categoria", + "search": "Recercar" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, nom, ID MusicBrainz,…" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "all": "Tot", + "approved": "Validat", + "pending": "En espèra de validacion", + "rejected": "Regetat" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, domeni…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Las bibliotècas seleccionadas seràs tiradas, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + } + }, + "label": { + "search": "Recercar", + "visibility": "Visibilitat" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, actor, nom, descripcion…" + }, + "table": { + "library": { + "header": { + "account": "Compte", + "creationDate": "Data de creacion", + "domain": "Domenu", + "followers": "Seguidors", + "name": "Nom", + "uploads": "Mandadís", + "visibility": "Visibilitat" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "L’etiqueta seguenta serà tirada e desligada del contengut existent, se cal. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per nom" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artistas", + "creationDate": "Data de creacion", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Las pistas seleccionadas seràn tiradas, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "link": { + "local": "Local" + }, + "notApplicable": "ND", + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, album, ID MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artista", + "creationDate": "Data de creacion", + "domain": "Domenu", + "license": "Licéncia", + "title": "Títol" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar", + "status": "Estatut", + "visibility": "Visibilitat" + }, + "link": { + "local": "Local" + }, + "notApplicable": "ND", "option": { "all": "Tot", "failed": "Fracàs", @@ -1862,396 +2284,68 @@ }, "label": "Òrdre" }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar", - "status": "Estatut", - "visibility": "Visibilitat" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { "search": "Recercar per domeni, actor, nom, referéncia, sorga…" }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data d’accès", "account": "Compte", "creationDate": "Data de creacion", "domain": "Domenu", - "followers": "Seguidors", + "importStatus": "Estatut de l’import", + "library": "Bibliotèca", "name": "Nom", - "uploads": "Mandadís", + "size": "Talha", "visibility": "Visibilitat" } } - }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Las bibliotècas seleccionadas seràs tiradas, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Recercar", - "visibility": "Visibilitat" - }, - "placeholder": { - "search": "Recercar per domeni, actor, nom, descripcion…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artista", - "creationDate": "Data de creacion", - "domain": "Domenu", - "license": "Licéncia", - "title": "Títol" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Las pistas seleccionadas seràn tiradas, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per títol, artista, album, ID MusicBrainz…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "label": { - "category": "Categoria", - "search": "Recercar" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Los artistas seleccionats seràs tirats, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Recercar per domeni, nom, ID MusicBrainz,…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artistas", - "creationDate": "Data de creacion", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "L’etiqueta seguenta serà tirada e desligada del contengut existent, se cal. Aquesta accion es irreversibla." - } - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per nom" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Tot", - "approved": "Validat", - "pending": "En espèra de validacion", - "rejected": "Regetat" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "placeholder": { - "search": "Recercar per títol, artista, domeni…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - }, - "label": { - "status": "Estatut" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Títol", - "releaseDate": "Data de sortida", - "tracks": "Pistas" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Los albums seleccionats seràn tirats, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local", - "moderation": "Dobrir dins l’interfàcia de moderacion" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per títol, artista, ID MusicBrainz…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Compte", - "domain": "Domenu", - "local": "Local", - "owner": "Proprietari", - "type": "Tipe" - }, - "status": { - "assignedTo": "Atribuit a", - "internalNotes": "Nòtas intèrnas", - "resolutionDate": "Data de resolucion", - "resolved": "Resolgut", - "status": "Estatut", - "unresolved": "Pas resolgut" - }, - "report": { - "category": "Categoria", - "creationDate": "Data de creacion", - "submittedBy": "Enviat per" + "AccountsTable": { + "action": { + "purge": { + "label": "Purgar" } }, - "header": { - "actions": "Accions", - "notes": "Nòtas intèrnas", - "message": "Messatge", - "reportedObject": "Objècte senhalat" - }, - "button": { - "confirmDelete": "Suprimir", - "delete": "Escafar l’objècte senhalat", - "resolve": "Resòlver", - "unresolve": "Pas resolgut" - }, - "modal": { - "delete": { - "header": "Escafar l’objècte senhalat ?", - "content": { - "warning": "Aquò suprimirà l’objècte ligat amb aqueste senhalament e lo marcarà coma resolgut. Aquesta supression es irreversibla." - } - } - }, - "notApplicable": "ND", - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "report": "Senhalar { id }", - "publicPage": "Veire la pagina publica" - }, - "warning": { - "objectDeleted": "L’objècte d’aqueste senhalament es estat suprimit." - } - }, - "UserRequestCard": { - "header": { - "actions": "Accions", - "notes": "Nòtas intèrnas", - "signup": "Messatge" - }, - "button": { - "approve": "Validar", - "reject": "Regetar" - }, - "table": { - "status": { - "approved": "Validat", - "assignedTo": "Atribuit a", - "internalNotes": "Nòtas intèrnas", - "pending": "En espèra", - "refused": "Regetada", - "status": "Estatut" - }, - "request": { - "creationDate": "Data de creacion", - "submittedBy": "Enviat per" - } - }, - "notApplicable": "ND", - "link": { - "request": "Demandar { id }" - }, - "message": { - "signup": "Aqueste utilizaire vòl se marcar a vòstra instància." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Ajustar una nòva règla de moderacion", - "editRule": "Actualizar las règlas de moderacion", - "failure": "Error en crear la règla" - }, "label": { - "blockAll": "O blocar tot", - "policyDisabled": "Desactivada", - "policyEnabled": "Activada", - "silenceActivity": "Amagar l’activitat", - "silenceNotifications": "Amagar las notificacions", - "customizeRule": "O personalizatz aquesta règla", - "policyReason": "Rason", - "rejectMedia": "Regetar lo mèdia" + "search": "Recercar" }, - "tooltip": { - "blockAll": "O blocar tot d’aqueste compte estant. Empacharà totas interaccion amb l’entitat e purgarà lo contengut ligat (pistas, bibliotèca, seguiments, etc.)", - "rejectMedia": "Telecargar pas cap de mèdia (àudio, album, tampa, avatar de compte…) d’aqueste compte o domeni. Purgarà tanben lo contengut existent.", - "summary": "Explicatz perque aplicatz aquesta politica : vos ajudarà a vos remembrar perque apondèretz aquesta règla. Segon la configuracion de l’instància, aquò pòt èsser mostrat publicament per ajudar als utilizaires a comprendre qualas règlas de moderacion son en plaça.", - "silenceActivity": "Amagar lo contengut del compte o del demoni, levat pels seguidors.", - "silenceNotifications": "Empacha lo compte o domeni de far veire de notificacions, levat pels seguidors.", - "isActive": "Utilizatz aqueste paramètre per activar/desactivar temporàriament la règla sens la suprimir complètament." + "link": { + "local": "Compte local" }, - "button": { - "cancel": "Anullar", - "create": "Crear", - "delete": "Suprimir", - "confirm": "Suprimir la règla de moderacion", - "update": "Actualizar" + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" }, - "modal": { - "delete": { - "header": "Suprimir aquesta règla de moderacion ?", - "content": { - "warning": "Aquesta accion se pòt pas anullar." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Ajustar una nòta" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { - "summary": "Descrivètz quinas accions son estadas presas, o tota autra mesa a jorn ligada…" + "search": "Recercar per domeni, nom d’utilizaire, bio…" }, - "header": { - "failure": "Error en enviar la nòta" + "table": { + "account": { + "header": { + "domain": "Domeni", + "firstSeen": "Primièra aparicion", + "lastSeen": "Darrièra visita", + "moderationRule": "Jos règla de moderacion", + "name": "Nom", + "uploads": "Mandadís" + }, + "moderationRule": "Òc" + } } }, "DomainsTable": { @@ -2266,6 +2360,16 @@ "label": "Tirar de la lista de las autorizacions" } }, + "empty": { + "noPods": "Cap de podcast pas trobat" + }, + "label": { + "inList": "Es present dins la lista d’autorizacion", + "search": "Recercar" + }, + "link": { + "list": "Aqueste domeni es present dins vòstra lista d’autorizacion" + }, "option": { "all": "Tot", "no": "Non", @@ -2279,76 +2383,32 @@ }, "label": "Òrdre" }, - "table": { - "domain": { - "header": { - "firstSeen": "Primièra aparicion", - "name": "Nom", - "receivedMessages": "Messatges recebuts", - "moderationRule": "Jos règla de moderacion", - "users": "Utilizaires" - }, - "moderationRule": "Òc" - } - }, - "label": { - "inList": "Es present dins la lista d’autorizacion", - "search": "Recercar" - }, - "empty": { - "noPods": "Cap de podcast pas trobat" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { "search": "Recercar per nom…" }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - }, - "link": { - "list": "Aqueste domeni es present dins vòstra lista d’autorizacion" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domenu", "firstSeen": "Primièra aparicion", - "lastSeen": "Darrièra visita", - "name": "Nom", "moderationRule": "Jos règla de moderacion", - "uploads": "Mandadís" + "name": "Nom", + "receivedMessages": "Messatges recebuts", + "users": "Utilizaires" }, "moderationRule": "Òc" } - }, - "link": { - "local": "Compte local" - }, - "action": { - "purge": { - "label": "Purgar" - } - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per domeni, nom d’utilizaire, bio…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Modificar" + }, + "header": { + "rule": "Règla" + }, "label": { "blockAll": "O blocar tot", "muteActivity": "Amagar l’activitat", @@ -2356,15 +2416,49 @@ "reason": "Rason", "rejectMedia": "Regetar lo mèdia" }, - "button": { - "edit": "Modificar" - }, "status": { "enabled": "Activada", "paused": "En pausa" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir la règla de moderacion", + "create": "Crear", + "delete": "Suprimir", + "update": "Actualizar" }, "header": { - "rule": "Règla" + "addRule": "Ajustar una nòva règla de moderacion", + "editRule": "Actualizar las règlas de moderacion", + "failure": "Error en crear la règla" + }, + "label": { + "blockAll": "O blocar tot", + "customizeRule": "O personalizatz aquesta règla", + "policyDisabled": "Desactivada", + "policyEnabled": "Activada", + "policyReason": "Rason", + "rejectMedia": "Regetar lo mèdia", + "silenceActivity": "Amagar l’activitat", + "silenceNotifications": "Amagar las notificacions" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta accion se pòt pas anullar" + }, + "header": "Suprimir aquesta règla de moderacion ?" + } + }, + "tooltip": { + "blockAll": "O blocar tot d’aqueste compte estant. Empacharà totas interaccion amb l’entitat e purgarà lo contengut ligat (pistas, bibliotèca, seguiments, etc.)", + "isActive": "Utilizatz aqueste paramètre per activar/desactivar temporàriament la règla sens la suprimir complètament.", + "rejectMedia": "Telecargar pas cap de mèdia (àudio, album, tampa, avatar de compte…) d’aqueste compte o domeni. Purgarà tanben lo contengut existent.", + "silenceActivity": "Amagar lo contengut del compte o del demoni, levat pels seguidors.", + "silenceNotifications": "Empacha lo compte o domeni de far veire de notificacions, levat pels seguidors.", + "summary": "Explicatz perque aplicatz aquesta politica : vos ajudarà a vos remembrar perque apondèretz aquesta règla. Segon la configuracion de l’instància, aquò pòt èsser mostrat publicament per ajudar als utilizaires a comprendre qualas règlas de moderacion son en plaça." } }, "InstancePolicyModal": { @@ -2374,161 +2468,129 @@ }, "modal": { "manage": { - "header": "Gerir las règlas de moderacion per { obj }", "content": { "warning": "Aquesta entitat es somesa a de règlas de moderacion especificadas" - } + }, + "header": "Gerir las règlas de moderacion per {obj}" } } }, + "NoteForm": { + "button": { + "add": "Ajustar una nòta" + }, + "header": { + "failure": "Error en enviar la nòta" + }, + "placeholder": { + "summary": "Descrivètz quinas accions son estadas presas, o tota autra mesa a jorn ligada…" + } + }, "NotesThread": { "button": { "delete": "Suprimir" }, "modal": { "delete": { - "header": "Suprimir aqueste nòta ?", "content": { "warning": "La nòta serà tirada. Aquesta accion es irreversibla." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Compte", - "albums": "Albums", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Nom", - "tracks": "Pistas" + }, + "header": "Suprimir aqueste nòta ?" } } }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" + "ReportCard": { + "button": { + "confirmDelete": "Suprimir", + "delete": "Escafar l’objècte senhalat", + "resolve": "Resòlver", + "unresolve": "Pas resolgut" }, - "label": "Òrdre" + "header": { + "actions": "Accions", + "message": "Messatge", + "notes": "Nòtas intèrnas", + "reportedObject": "Objècte senhalat" + }, + "link": { + "moderation": "Dobrir dins l’interfàcia de moderacion", + "publicPage": "Veire la pagina publica", + "report": "Senhalar {id}" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquò suprimirà l’objècte ligat amb aqueste senhalament e lo marcarà coma resolgut. Aquesta supression es irreversibla." + }, + "header": "Escafar l’objècte senhalat ?" + } + }, + "notApplicable": "ND", + "table": { + "object": { + "account": "Compte", + "domain": "Domeni", + "local": "Local", + "owner": "Proprietari", + "type": "Tipe" + }, + "report": { + "category": "Categoria", + "creationDate": "Data de creacion", + "submittedBy": "Enviat per" + }, + "status": { + "assignedTo": "Atribuit a", + "internalNotes": "Nòtas intèrnas", + "resolutionDate": "Data de resolucion", + "resolved": "Resolgut", + "status": "Estatut", + "unresolved": "Pas resolgut" + } + }, + "warning": { + "objectDeleted": "L’objècte d’aqueste senhalament es estat suprimit." + } }, - "label": { - "category": "Categoria", - "search": "Recercar" - }, - "link": { - "local": "Local", - "moderation": "Dobrir dins l’interfàcia de moderacion" - }, - "placeholder": { - "search": "Recercar per domeni, nom d’utilizaire, compte…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" + "UserRequestCard": { + "button": { + "approve": "Validar", + "reject": "Regetar" + }, + "header": { + "actions": "Accions", + "notes": "Nòtas intèrnas", + "signup": "Messatge" + }, + "link": { + "request": "Demandar {id}" + }, + "message": { + "signup": "Aqueste utilizaire vòl se marcar a vòstra instància." + }, + "notApplicable": "ND", + "table": { + "request": { + "creationDate": "Data de creacion", + "submittedBy": "Enviat per" + }, + "status": { + "approved": "Validat", + "assignedTo": "Atribuit a", + "internalNotes": "Nòtas intèrnas", + "pending": "En espèra", + "refused": "Regetada", + "status": "Estatut" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Estat del compte", - "email": "Corrièl", - "lastActivity": "Darrièra activitat", - "permissions": "Autorizacions", - "signup": "Inscripcion", - "status": "Estatut", - "username": "Nom d’utilizaire" - }, - "accountStatus": { - "active": "Actiu", - "inactive": "Actiu" - }, - "status": { - "admin": "Admin", - "regular": "Utilizaire estandard", - "staff": "Membre de la còla" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "permission": { - "library": "Bibliotèca", - "moderation": "Moderacion", - "settings": "Paramètres" - }, - "notApplicable": "ND", - "placeholder": { - "search": "Recercar per nom d’utilizaire, corrièl, nom…" - }, - "pagination": { - "results": "Afichatge d’un resultat | Afichatge dels resultats { start } fins a { end } de { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Tot", - "expired": "Expirada/utilizada", - "open": "Accès liure" - }, - "table": { - "invitation": { - "header": { - "code": "Còdi", - "creationDate": "Data de creacion", - "expirationDate": "Data d’expiracion", - "owner": "Proprietari", - "status": "Estatut" - } - } - }, - "action": { - "delete": "Suprimir" - }, - "label": { - "expired": "Expirada", - "unused": "Pas utilizat", - "search": "Recercar", - "status": "Estatut", - "used": "Utilizat" - }, - "ordering": { - "label": "Òrdre" - }, - "placeholder": { - "search": "Recercar per nom d’utilizaire, corrièl, còdi…" - }, - "pagination": { - "results": "Afichatge d’un resultat | Afichatge dels resultats { start } fins a { end } de { total }" - } - }, "InvitationForm": { "button": { "clear": "Escafar", "new": "Obténer una novèla invitacion" }, - "table": { - "invitation": { - "header": { - "code": "Còdi", - "link": "Ligam de partatge" - } - } - }, "header": { "failure": "Error en crear l’invitacion" }, @@ -2537,523 +2599,59 @@ }, "placeholder": { "invitation": "Daissar void per obténer un còdi aleatòri" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Accions", - "label": "Nom del camp", - "type": "Tipe de camp", - "required": "Obligatòri" - }, - "type": { - "long": "Tèxt grand", - "short": "Tèxt cort" - }, - "required": { - "false": "Non", - "true": "Òc" - } - } - }, - "button": { - "add": "Ajustar un camp novèl", - "edit": "Modificar lo formulari", - "preview": "Apercebut del formulari" - }, - "label": { - "additionalField": "Camp addicional", - "additionalFields": "Camps addicionals", - "delete": "Suprimir", - "helpText": "Tèxt d’ajuda", - "moveDown": "Desplaçar enbàs", - "moveUp": "Desplaçar ennaut" - }, - "help": { - "additionalFields": "Camps addicionals pel formulari. Se veson sonque se la validacion de l’inscripcion es activada.", - "helpText": "Un tèxte opcional a afichar a la debuta del formulari d’inscripcion." - } - }, - "SettingsGroup": { - "header": { - "image": "Imatge actual", - "error": "Error en enregistrar los paramètres" - }, - "button": { - "save": "Enregistrar" - }, - "message": { - "success": "Paramètres corrèctament modificats." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Tot" - }, - "label": { - "category": "Categoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Los senhalaments anonims son desactivats, marcatz-vos per realizar un senhalament.", - "modal": "Volètz senhalar aqueste objècte ?", - "submissionFailure": "Error en enviar lo senhalament" - }, - "button": { - "cancel": "Anullar", - "submit": "Enviar" - }, - "label": { - "email": "Corrièl", - "forwardToDomain": "Transferir a { domain}", - "message": "Messatge" - }, - "description": { - "forwardToDomain": "Transferir una còpi anonimizada del senhalement al servidor qu’alerga aqueste element.", - "message": "Utilizatz aqueste camp per provesir mai de contèxt al moderator que gerirà lo senhalament.", - "modal": "Utilizatz aqueste formulari per enviar un senhalament als nòstres moderators.", - "email": "Utilizarem aquesta adreça se nos fa besonh vos contactar tocant aqueste senhalament." - }, - "message": { - "submissionSuccess": "Senhalament corrèctament enviat, mercés" - } - }, - "FilterModal": { - "button": { - "cancel": "Anullar", - "hide": "Amagar lo contengut" - }, - "message": { - "success": "Filtre de contengut corrèctament ajustat" - }, - "header": { - "modal": "Volètz rescondre lo contengut de l’artista « { name } » ?", - "failure": "Error en crear lo filtre" - }, - "warning": { - "createFilter": { - "listItem2": "Dins lo widget « Ajustada i a res »", - "listItem3": "Dins las listas d’artistas e d’albums", - "listItem1": "Dins los favorits e istorics d’escota d’autres utilizaires", - "listItem4": "Dins las suggestions de ràdios", - "listIntro": "Veiretz pas mai las pistas, albums e las activitats d’utilizaires ligadas a aqueste artista :" - } - }, - "help": { - "createFilter": "Podètz gerir e actualizar los filtres quand volgatz dels paramètres de compte estant." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Una error s’es producha en actualizar las donadas :", - "success": "Las donadas son estadas actualizadas corrèctament del servidors alonhat estant.", - "pending": "La requèsta d’actualizacion es pas estada tractada a temps per nòstre servidor. Serà executada mai tard.", - "skipped": "Lo servidor alonhat a respondut, mas las donadas enviadas son pas suportadas er Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Una error HTTP s’es producha en contactar lo servidor alonhat", - "invalidAttributesError": "Las donadas tornadas pel servidor alonhat an d’atributs mancants o invalids", - "connectionError": "Connexion impossibla al servidor alonhat", - "httpStatus": "Lo servidor alonhat a respondut amb lo còdi HTTP { status }", - "timeoutError": "Lo servidor alonhat a tròp tardat a respondre", - "invalidJsonError": "Lo servidor alonhat a respondut amb de donadas JSON o JSON-LD invalidas", - "unknownError": "Error desconeguda" - }, - "label": { - "detail": "Detalhs de l’error", - "type": "Tip d’error" - } - } - }, - "button": { - "close": "Tampar", - "reload": "Tampar e tornar cargar la pagina" - }, - "header": { - "saveFailure": "Error en enregistrar los paramètres", - "failure": "Error en actualizar", - "pending": "Actualizar las info del nos", - "success": "Actualizacion reüssida", - "skipped": "L’actualizada es estada passada", - "refresh": "Actualizacion de l’objècte del servidor alonhat estant…" - }, - "loader": { - "fetchRequest": "Demanda de recuperacion…", - "awaitingResult": "En espèra dels resultats…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Cap de bibliotèca correspondenta." - }, - "button": { - "showMore": "Ne veire mai" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Acorchis del lector àudio", - "clearQueue": "Voidar la fila", - "decreaseVolume": "Reduire lo volum", - "expandQueue": "Espandir fila/vista del lector", - "increaseVolume": "Aumentar lo volum", - "playPause": "Pausar/Legir la pista actuala", - "playNext": "Legir la pista seguenta", - "playPrevious": "Legir la pista precedenta", - "seekBack30": "Recular de 30s", - "seekBack5": "Recular de 5s", - "seekForward30": "Avançar de 30s", - "seekForward5": "Avançar de 5s", - "shuffleQueue": "Mesclar la fila", - "toggleFavorite": "Ajustar/Tirar dels favorits", - "toggleMute": "Copar/Restablir lo son", - "toggleLoop": "Cambiar lo tipe de lectura de la lista" - }, - "general": { - "focus": "Anar a la recèrca", - "label": "Acrochis generals", - "show": "Mostrar los acorchis clavièr disponibles", - "unfocus": "Sortir de la recèrca" - } - }, - "button": { - "close": "Tampar" - }, - "header": { - "modal": "Acorchis clavièr" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Anullar", - "submit": "Validar" - }, - "header": { - "chooseInstance": "Causissètz vòstra instància", - "failure": "Connexion impossibla a l’URL donada", - "suggestions": "Suggestions" - }, - "label": { - "url": "URL de l’instància" - }, - "help": { - "notFunkwhaleServer": "L’adreça donada es pas un servidor Funkwhale", - "serverDown": "Se pòt que lo servidor siá atudat", - "selectPod": "Per contunhar, seleccionatz una instància Funkwhale que volètz vos i connectar. Picatz l’adreça dirèctament, o seleccionatz-ne una dins las en suggestion." - }, - "message": { - "newUrl": "Utilizatz una instància Funkwhale a { url }" - } - }, - "Queue": { - "button": { - "clear": "Escafar", - "close": "Tampar", - "stopRadio": "Arrestar la ràdio" - }, - "label": { - "duration": "Durada", - "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", - "next": "Pista seguenta", - "pause": "Pausa", - "play": "Legir", - "previous": "Pista precedenta", - "queue": "Fila", - "remove": "Tirar", - "restart": "Recomençar la pista" - }, - "message": { - "radio": "Las novèlas pistas seràn automaticament ajustadas aquí.", - "automaticPlay": "La pista seguenta serà legida automaticament dins una estona…" - }, - "header": { - "failure": "La pista pòt pas èsser cargada", - "radio": "Escotatz una ràdio" - }, - "meta": { - "queuePosition": "Pista ({ index } sus { length })" - }, - "warning": { - "connectivity": "Poiriá arribar qu’ajatz de problèma de connexion." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copiar" - }, - "title": "Mostrar/amagar lo senhal", - "message": { - "copy": "Tèxte copiat al quichapapièr !" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Modificar" - } - }, - "Button": { - "startRadio": "Legir la pista", - "stopRadio": "Arrestar la ràdio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Error en recuperar l’objècte" - }, - "button": { - "fediverse": "Fedivers", - "rss": "RSS", - "search": "Recercar" - }, - "label": { - "fediverse": { - "fieldLabel": "Objècte del Fedivers", - "title": "S’abonar a un podcast albergat sul fediverse" - }, - "rss": { - "fieldPlaceholder": "https://siteweb.exemple/rss.xml", - "fieldLabel": "Emplaçament del flux RSS", - "title": "S’abonar al flux RSS d’un podcast" - } - }, - "warning": { - "unsupported": "Aqueste tipe d’objècte es pas encara compatible" - }, - "error": { - "fetchFailed": "Se pòt pas recuperar aqueste objècte" - }, - "description": { - "fediverse": "Utilizatz aqueste formulari per vos abonar a una cadena endacòm sul fediverse.", - "rss": "Utilizatz aqueste formulari per vos abonar a un flux RSS via una adreça URL." - } - }, - "PageNotFound": { - "link": { - "home": "Tornar a l’acuèlh" - }, - "title": "Pagina pas trobada", - "header": { - "pageNotFound": "Pagina pas trobada !" - }, - "message": { - "pageNotFound": "O planhèm, la pagina demandada existís pas :" - } - }, - "vui": { - "Pagination": { - "next": "Pagina seguenta", - "label": "Paginacion", - "previous": "Pagina precedenta" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostrar 1 etiqueta de mai | Mostrar { n } etiquetas de mai" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "listenings": "{ n } escota | { n } escotas", - "subscribers": "{ n } abonat | { n } abonats", - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "channelEpisodes": "Totes los episòdis", - "mirrored": "miralh de { domain }", - "moderation": "Dobrir dins l’interfàcia de moderacion", - "channelOverview": "Vista d’ensemble", - "channelTracks": "Pistas", - "domainView": "Veire sus { domain }" - }, - "header": { - "artistChannel": "Cadena de l’artista", - "podcastChannel": "Cadena del podcast" - }, - "button": { - "cancel": "Anullar", - "confirm": "Suprimir", - "delete": "Suprimir…", - "edit": "Modificar…", - "embed": "Integrar", - "play": "Legir", - "updateChannel": "Actualizar la cadena", - "upload": "Enviar" - }, - "title": "Cadena", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copiatz-pegatz l’URL seguenta dins vòstra aplicacion de podcast preferida :" - }, - "header": "S’abonar via RSS" - }, - "fediverse": { - "content": { - "help": "S’utilizatz Mastodon o una autra aplicacion del fediverse, podètz tanben vos abonar a aqueste compte :" - }, - "header": "S’abonar sul fediverse" - }, - "funkwhale": { - "header": "S’abonar a Funkwhale" - }, - "header": "S’abonar a aquesta cadena" }, - "delete": { - "header": "Suprimir aqueste cadena ?", - "content": { - "warning": "Aquesta cadena serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aquesta pista a vòstre site web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Ajustar nòu", - "erroredUploads": "Veire los mandadisses en error", - "skippedUploads": "Veire los mandadisses sautats" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Darrièrs episòdis", - "latestTracks": "Darrièras pistas", - "series": "Serias", - "uploadsFailure": "Impossible de publicar unes mandadisses", - "uploadsProcessing": "Tractament dels mandadisses", - "uploadsSuccess": "Mandadisses corrèctament publicats" - }, - "meta": { - "progress": "Bibliotèca e mandadís :" - }, - "message": { - "processing": "Funkwhale tracta vòstres mandadisses e seràn lèu publicats." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Ajustar nòu" - }, - "button": { - "cancel": "Anullar", - "subscribe": "S’abonar" - }, - "placeholder": { - "search": "Filtrar per nom…" - }, - "title": "Cadenas seguidas", - "modal": { - "subscription": { - "header": "Inscripcion" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "details": "Detalhs de la bibliotèca" - }, - "label": { - "size": "Talha totala dels fichièrs d’aquesta bibliotèca" - }, - "button": { - "upload": "Mandadís" - } - }, - "Quota": { - "label": { - "currentUsage": "{ count } utilizat sus { total } autorizat", - "errored": "Fichièrs amb errors", - "pending": "Fichièrs en espèra", - "skipped": "Fichièrs ignorats" - }, - "header": { - "currentUsage": "Utilizacion actuala" - }, - "loading": { - "currentUsage": "Cargament de l’utilizacion de las donadas…" - }, - "button": { - "purge": "Purgar" - }, - "modal": { - "purgeErrored": { - "header": "Purgar los fichièrs amb errors ?", - "content": { - "description": "Las pistas enviadas mas pas complètament tractadas pel servidor seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." - } - }, - "purgePending": { - "header": "Purgar los fichièrs en espèra ?", - "content": { - "description": "Las pistas importadas que lo servidor a pas encara tractadas seràn complètament suprimidas. Lo quòta correspondent vos serà tornat." - } - }, - "purgeSkipped": { - "header": "Purgar los fichièrs ignorats ?", - "content": { - "description": "Las pistas enviadas mas ignoradas pendent lo processús d’importacion per mantun rasons seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." - } - } - }, - "link": { - "viewFiles": "Veire los fichièrs" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artista", - "duration": "Durada", - "importStatus": "Estatut de l’import", - "size": "Talha", - "title": "Títol", - "uploadDate": "Data de mandadís" + "code": "Còdi", + "link": "Ligam de partatge" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Suprimir" + }, + "label": { + "expired": "Expirada", + "search": "Recercar", + "status": "Estatut", + "unused": "Pas utilizat", + "used": "Utilizat" }, "option": { - "status": { - "all": "Tot", - "draft": "Borrolhon", - "failed": "Fracàs", - "finished": "Acabat", - "pending": "En espèra", - "skipped": "Ignorat" - } + "all": "Tot", + "expired": "Expirada/utilizada", + "open": "Accès liure" }, + "ordering": { + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge d’un resultat | Afichatge dels resultats {start} fins a {end} de {total}" + }, + "placeholder": { + "search": "Recercar per nom d’utilizaire, corrièl, còdi…" + }, + "table": { + "invitation": { + "header": { + "code": "Còdi", + "creationDate": "Data de creacion", + "expirationDate": "Data d’expiracion", + "owner": "Proprietari", + "status": "Estatut", + "user": "Utilizaire" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Recercar" + }, + "notApplicable": "ND", "ordering": { "direction": { "ascending": "Ascendent", @@ -3062,397 +2660,554 @@ }, "label": "Òrdre" }, - "action": { - "delete": "Suprimir", - "restartImport": "Relançar l’import" + "pagination": { + "results": "Afichatge d’un resultat | Afichatge dels resultats {start} fins a {end} de {total}" }, - "label": { - "importStatus": "Estatut de l’import", - "search": "Recercar" - }, - "notApplicable": "ND", - "empty": { - "noTracks": "I a pas encara de pistas ajustadas a aquesta bibliotèca" + "permission": { + "library": "Bibliotèca", + "moderation": "Moderacion", + "settings": "Paramètres" }, "placeholder": { - "search": "Recercar per títol, artista, album…" + "search": "Recercar per nom d’utilizaire, corrièl, nom…" }, - "button": { - "showStatus": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aquesta pista" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crear una nòva bibliotèca" - }, - "loading": { - "libraries": "Cargament de las bibliotècas…" - }, - "empty": { - "noLibrary": "Sembla qu’avètz pas cap de bibliotèca pel moment, es ora de ne crear una." - }, - "header": { - "libraries": "Mas bibliotècas" - } - }, - "Form": { - "button": { - "create": "Crear una bibliotèca", - "delete": "Suprimir", - "confirm": "Suprimir la bibliotèca", - "update": "Actualizar la bibliotèca" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta bibliotèca ?", - "content": { - "warning": "Aquesta bibliotèca e totas sas pistas seràn suprimidas. Aquesta accion se pòt pas anullar." + "table": { + "user": { + "accountStatus": { + "active": "Actiu", + "inactive": "Actiu" + }, + "header": { + "accountStatus": "Estat del compte", + "email": "Corrièl", + "lastActivity": "Darrièra activitat", + "permissions": "Autorizacions", + "signup": "Inscripcion", + "status": "Estatut", + "username": "Nom d’utilizaire" + }, + "status": { + "admin": "Admin", + "regular": "Utilizaire estandard", + "staff": "Membre de la còla" } } - }, - "label": { - "description": "Descripcion", - "name": "Nom", - "visibility": "Visibilitat" - }, - "header": { - "failure": "Error" - }, - "description": { - "library": "Las bibliotècas vos ajudan a organizar e partejar vòstras colleccions de musica. Podètz enviar vòstra pròpria collecion musicala a Funkwhale e la partejar amb vòstres amics e vòstra familha.", - "visibility": "Poiretz partejar vòstra bibiotèca amb d’autres gents, sens importància de sa visibilitat." - }, - "message": { - "libraryCreated": "Bibliotèca creada", - "libraryDeleted": "Bibliotèca suprimida", - "libraryUpdated": "Bibliotèca actualizada" - }, - "placeholder": { - "name": "Ma bibliotèca tròp crana", - "description": "Aquesta bibliotèca conten ma musica personala, espèri que vos agradarà." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas", - "failedTracks": "Pistas en error :", - "lastUpdate": "Darrièra actualizacion :" - }, - "modal": { - "unfollow": { - "content": { - "warning": "En quitar de seguir aquesta bibliotèca, perdretz l’accès a son contengut." - }, - "header": "Quitar de seguir aquesta bibliotèca ?" - } - }, - "button": { - "cancel": "Anullar lad emanda d’abonament", - "follow": "Seguir", - "pending": "Abonament en espèra de validacion", - "unfollow": "Quitar de seguir" - }, - "link": { - "scanDetails": "Detalhs", - "scan": "Explorar ara" - }, - "label": { - "scanFailure": "Error en explorant", - "scanPending": "Analisi en espèra", - "scanSuccess": "Explorat", - "scanPartialSuccess": "Explorada amb d’errors", - "scanProgress": "Exploracion… ({ progress }%)", - "sharingLink": "Ligam de partatge" - }, - "message": { - "scanLaunched": "Exploracion lançada", - "scanSkipped": "Exploracion sautada (la darrièra es tròp recenta)" - }, - "tooltip": { - "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", - "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" - } - }, - "ScanForm": { - "header": { - "failure": "Error en recuperar la bibliotèca alonhada" - }, - "placeholder": { - "url": "Picatz l’URL d’una bibliotèca" - }, - "label": { - "search": "Cercar una bibliotèca alonhada" - }, - "button": { - "submit": "Enviar la recèrca" - } - }, - "Home": { - "header": { - "knownLibraries": "Bibliotècas conegudas", - "remoteLibraries": "Bibliotècas alonhadas" - }, - "loading": { - "remoteLibraries": "Cargament de las bibliotècas alonhadas…" - }, - "button": { - "refresh": "Actualizar" - }, - "description": { - "remoteLibraries": "Las bibliotècas alonhadas apertenon a d’autres utilizaires del malhum. I podètz accedir tant que sián publicas o qu’ajatz l’autorizacion." - } - } - }, - "Home": { - "title": "Ajustar e gerir lo contengut", - "description": { - "follow": "Podètz seguir las bibliotècas d’autres utilizaires per accedir a de nòvas musicas. Las bibliotècas publicas pòdon èsser seguidas còp sec, mentre qu’una bibliotèca privada demanda una aprovacion de sus proprietaris.", - "channel": { - "1": "Se sètz musician o creator de podcasts, las cadenas son fachas per vos !", - "2": "Partejatz vòstre trabalh publicament e obtenètz de seguidors sus Funkwhale, sul Fediverse o de las aplicacions de podcast estant." - }, - "upload": "Enviatz vòstra bibliotèca musicala personala a Funkwhale e aprofechatz-ne pertot e partejatz-la amb vòstres amics e familha." - }, - "header": { - "follow": "Seguir de bibliotècas alonhadas", - "channel": "Publicar vòstre trabalh dins una cadena", - "upload": "Enviar de contengut tèrces a la bibliotèca" - }, - "button": { - "start": "Començar" - }, - "help": { - "uploadQuota": "Aquesta instància provesís fins a {quota} d’espaci per cada utilizaire." - } - }, - "Base": { - "title": "Ajustar de contengut", - "link": { - "libraries": "Bibliotècas", - "tracks": "Pistas" - }, - "menu": { - "secondary": "Menú segondari" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "moderation": "Dobrir dins l’interfàcia de moderacion", - "owner": "Lo proprietari es { username }", - "tracks": "Pistas", - "domain": "Veire sus { domain }" - }, - "button": { - "edit": "Modificar", - "upload": "Mandadís" - }, - "title": "Bibliotèca", - "label": { - "private": "Privada", - "public": "Public", - "instance": "Restrenches", - "sharingLink": "Ligam de partatge" - }, - "description": { - "sharingLink": "Partejatz aqueste ligam amb d’autres utilizaires per que pòscan accedir a vòstra bibliotèca en lo copiar-pegar dins la barra de recèrca de lor instància." - }, - "tooltip": { - "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", - "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament", - "instance": "Aquesta bibliotèca es restrencha als utilizaires d’aquesta instància solament" - } - }, - "Edit": { - "button": { - "accept": "Acceptar", - "reject": "Regetar" - }, - "table": { - "action": { - "status": { - "accepted": "Acceptat", - "pending": "En espèra de validacion", - "rejected": "Regetat" - }, - "header": { - "action": "Accion", - "date": "Data", - "status": "Estatut", - "user": "Utilizaire" - } - } - }, - "header": { - "followers": "Seguidors", - "libraryContents": "Contengut de la bibliotèca" - }, - "loading": { - "followers": "Cargament dels seguidors…" - }, - "empty": { - "noFollowers": "Degun sèc pas aquesta bibliotèca" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !", - "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut." - } - }, - "DetailOverview": { - "empty": { - "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !", - "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut." - } - }, - "DetailTracks": { - "empty": { - "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !", - "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Perfil de { username }", - "link": { - "activity": "Activitat", - "moderation": "Dobrir dins l’interfàcia de moderacion", - "overview": "Vista d’ensemble", - "domainView": "Veire sus { domain }" - }, - "label": { - "self": "Sètz vos !" - } - }, - "PasswordReset": { - "label": { - "email": "Adreça electronica del compte" - }, - "button": { - "requestReset": "Demandar un nòu senhal" - }, - "link": { - "back": "Tornar a la pagina de connexion" - }, - "placeholder": { - "email": "Picatz l’adreça de corrièl ligada a vòstre compte" - }, - "header": { - "failure": "Error en demandar un novèl senhal", - "reset": "Reïnicializar lo senhal" - }, - "title": "Reïnicializar lo senhal", - "help": { - "form": "Garnissètz aqueste formulari per demandar un nòu senhal. Auretz un corrièl a vòstra adreça indicada contenent las consignas per reïnicializar lo senhal." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Ajustar nòu" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Cadena de l’artista" - }, - "header": "Crear una cadena", - "podcast": { - "header": "Cadena del podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Anullar", - "createChannel": "Crear una cadena", - "next": "Etapa seguenta", - "previous": "Etapa precedenta" + "hide": "Amagar lo contengut" }, "header": { - "channels": "Cadenas", - "sharedLibraries": "Aqueste utilizaire partegèt las bibliotècas seguentas", - "libraries": "Bibliotècas de l’utilizaire" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Tornar a la pagina de connexion", - "login": "Contunhar cap a la pagina de connexion" + "failure": "Error en crear lo filtre", + "modal": "Volètz rescondre lo contengut de l’artista « {name} » ?" }, - "title": "Cambiar lo senhal", - "header": { - "failure": "Error en cambiar lo senhal", - "success": "Senhal corrèctament modificat" + "help": { + "createFilter": "Podètz gerir e actualizar los filtres quand volgatz dels paramètres de compte estant." }, "message": { - "requestSent": "Se l’adreça qu’avètz provesida a las etapas precedentas es valida e associada a un compte utilizaire, sètz per recebre un messatge amb las consignas de reïnicializacion d’aquí una estona.", - "success": "Vòstre senhal es corrèctament cambiat." + "success": "Filtre de contengut corrèctament ajustat" }, + "warning": { + "createFilter": { + "listIntro": "Veiretz pas mai las pistas, albums e las activitats d’utilizaires ligadas a aqueste artista :", + "listItem1": "Dins los favorits e istorics d’escota d’autres utilizaires", + "listItem2": "Dins lo widget « Ajustada i a res »", + "listItem3": "Dins las listas d’artistas e d’albums", + "listItem4": "Dins las suggestions de ràdios" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Nòu senhal" + "category": "Categoria" }, + "option": { + "all": "Tot" + } + }, + "ReportModal": { "button": { - "update": "Actualizar vòstre senhal" - } - }, - "EmailConfirm": { - "title": "Confirmar vòstra adreça electronica", - "label": { - "confirmationCode": "Còdi de confirmacion" + "cancel": "Anullar", + "submit": "Enviar" + }, + "description": { + "email": "Utilizarem aquesta adreça se nos fa besonh vos contactar tocant aqueste senhalament.", + "forwardToDomain": "Transferir una còpi anonimizada del senhalement al servidor qu’alerga aqueste element.", + "message": "Utilizatz aqueste camp per provesir mai de contèxt al moderator que gerirà lo senhalament.", + "modal": "Utilizatz aqueste formulari per enviar un senhalament als nòstres moderators" }, "header": { - "failure": "Confirmacion vòstra adreça electronica impossibla", - "success": "Corrièl confirmat" + "disabled": "Los senhalaments anonims son desactivats, marcatz-vos per realizar un senhalament.", + "modal": "Volètz senhalar aqueste objècte ?", + "submissionFailure": "Error en enviar lo senhalament" }, - "link": { - "login": "Contunhar cap a la pagina de connexion", - "back": "Tornar a la pagina de connexion" + "label": { + "email": "Corrièl", + "forwardToDomain": "Transferir a {domain}", + "message": "Messatge" }, "message": { - "success": "Podètz ara utilizar lo servici sens cap de limitacions." - } - }, - "Signup": { - "header": { - "createAccount": "Crear un compte funkwhale" - }, - "title": "Inscripcion" - }, - "Login": { - "title": "Connexion", - "header": { - "login": "Connectatz-vos a vòstre compte Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Connexion…" - } - }, - "Plugins": { - "title": "Gerir los moduls" - }, - "ProfileActivity": { - "header": { - "playlists": "Listas de lectura", - "recentlyFavorited": "Ajustadas als favorits i a res", - "recentlyListened": "Escotadas i a res" + "submissionSuccess": "Senhalament corrèctament enviat, mercés" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Validar", + "markRead": "Marcar coma legidas", + "markUnread": "Marcar coma pas legidas", + "reject": "Regetar" + }, + "message": { + "libraryAcceptFollow": "{username} acceptèt vòstra demanda de seguiment de la bibliotèca « {library} »", + "libraryFollow": "{username} seguís vòstra bibliotèca « {library} »", + "libraryPendingFollow": "{username} vòl seguir vòstra bibliotèca « {library} »" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "Editor": { + "button": { + "addDuplicate": "Ajustar pr’aquò", + "clear": "Escafar la lista de lectura", + "copy": "Copiar las pistas de la fila a la lista de lectura", + "insertFromQueue": "Inserir de la fila estant ({n} pista) | Inserir de la fila estant ({n} pistas)" + }, + "error": { + "sync": "Una error s’es producha en enregistrar vòstras modificacions" + }, + "header": { + "editor": "Editor de lista de lectura" + }, + "help": { + "reorder": "Lisatz las linhas per triar las pistas de la lista de lectura" + }, + "loading": { + "sync": "Sincronizacion dels cambiaments amb lo servidor…" + }, + "message": { + "sync": "Cambiament sincronizat amb lo servidor" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Aquò escafarà totas las pistas de la lista de lectura e poirà pas èsser anullat." + }, + "header": "Volètz voidar la lista de lectura « {playlist} » ?" + } + }, + "warning": { + "duplicate": "Unas pistas de la fila son ja dins aquesta lista de lectura :" + } + }, + "Form": { + "button": { + "create": "Crear la lista de lectura", + "update": "Actualizar la lista de lectura" + }, + "header": { + "createFailure": "Lista de lectura creada", + "createPlaylist": "Crear una nòva lista de lectura", + "createSuccess": "Lista de lectura creada", + "updateSuccess": "Lista de lectura actualizada" + }, + "label": { + "name": "Nom de la lista de lectura", + "visibility": "Visibilitat de la lista de lectura" + }, + "placeholder": { + "name": "Ma lista de lectura tròp crana" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Ajustar pr’aquò", + "addToPlaylist": "Ajustar a aquesta lista de lectura", + "addTrack": "Ajustar una pista", + "cancel": "Anullar", + "edit": "Modificar" + }, + "empty": { + "noPlaylists": "Cap de lista de lectura creada pel moment" + }, + "header": { + "addFailure": "Podèm pas ajustar aquesta pista a una lista de lectura", + "addToPlaylist": "Ajustar a la lista de lectura", + "available": "Listas de lectura disponiblas", + "manage": "Gerir las listas de lectura", + "noResults": "Cap de resultat correspondent a aqueste filtre", + "track": "{title}, per {artist}" + }, + "label": { + "filter": "Filtrar" + }, + "placeholder": { + "filterPlaylist": "Escrivètz lo nom de lista de lectura" + }, + "table": { + "edit": { + "header": { + "edit": "Modificar", + "lastModification": "Darrièra modificacion", + "name": "Nom", + "tracks": "Pistas" + } + } + }, + "warning": { + "duplicate": "{ 0 } es ja dins { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Ajustar a la lista de lectura…" + } + }, + "Widget": { + "button": { + "create": "Crear una lista de lectura", + "more": "Ne veire mai" + }, + "placeholder": { + "noPlaylists": "Cap de lista de lectura creada pel moment" + } + } + }, + "radios": { + "Button": { + "startRadio": "Legir la pista", + "stopRadio": "Arrestar la ràdio" + }, + "Card": { + "button": { + "edit": "Modificar" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostrar 1 etiqueta de mai | Mostrar {n} etiquetas de mai" + } + } + }, + "vui": { + "Pagination": { + "label": "Paginacion", + "next": "Pagina seguenta", + "previous": "Pagina precedenta" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{n} pista ajustada a la fila | {n} pistas ajustadas a la fila" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musica", + "other": "Autre", + "podcast": "Podcast" + }, + "label": "Categoria del contengut" + }, + "importStatus": { + "choices": { + "draft": { + "help": "La pista es enviada mas pas encara prevista per tractament pel servidor pel moment", + "label": "Borrolhon" + }, + "errored": { + "help": "Una error s’es producha en tractar aquesta pista, asseguratz-vos qu’es corrèctament etiquetada", + "label": "Perturbat" + }, + "finished": { + "help": "Importat", + "label": "Acabat" + }, + "pending": { + "help": "La pista es enviada mas pas encara tractada pel servidor", + "label": "En espèra" + }, + "skipped": { + "help": "La pista ja presenta dins una de vòstras bibliotècas", + "label": "Ignorat" + } + }, + "label": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aqueste mandadís" + }, + "privacyLevel": { + "choices": { + "instance": "Lo monde d’aquesta instància", + "private": "Degun fòra ieu", + "public": "Tot lo monde, per totas las instàncias" + }, + "help": "Determinatz lo nivèl de visibilitat de vòstra activitat", + "label": "Visibilitat de l’activitat", + "shortChoices": { + "instance": "Instància", + "private": "Privat", + "public": "Tot lo monde" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contengut illegal", + "invalidMetadata": "Metadonada invalida", + "offensiveContent": "Contengut ofensiu", + "other": "Autre", + "takedownRequest": "Demanda de retrait" + }, + "label": "Categoria" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data d’accès", + "albumTitle": "Nom de l’album", + "artistName": "Nom de l’artista", + "bitrate": "Debit", + "creationDate": "Data de creacion", + "dateJoined": "Data d’inscripcion", + "domain": "Domenin", + "duration": "Durada", + "expirationDate": "Data d’expiracion", + "firstSeen": "Data de primièra aparicion", + "followers": "Seguidors", + "itemsCount": "Elements", + "lastActivity": "Darrièra activitat", + "lastSeen": "Darrièra visita", + "modificationDate": "Data de modificacion", + "name": "Nom", + "receivedMessages": "Messatges recebuts", + "releaseDate": "Data de sortida", + "size": "Talha", + "trackTitle": "Nom de la pista", + "uploads": "Mandadís", + "username": "Nom d’utilizaire", + "users": "Utilizaires" + }, + "scopes": { + "edits": { + "description": "Accès a las modificacions", + "label": "Modificacions" + }, + "favorites": { + "label": "Favorits" + }, + "filters": { + "description": "Accès als filtre de contengut", + "label": "Filtres de contengut" + }, + "follows": { + "description": "Accès al seguiment", + "label": "Seguir" + }, + "libraries": { + "description": "Accès als fichièrs àudio, bibliotècas, artistas, albums e pistas", + "label": "Bibliotèca e mandadís" + }, + "listenings": { + "description": "Accès a l’istoric d’escota", + "label": "Escotas" + }, + "notifications": { + "description": "Accès a las notificacions", + "label": "Notificacions" + }, + "playlists": { + "description": "Accès a las listas de lectura", + "label": "Listas de lectura" + }, + "profile": { + "description": "Accès als corrièls, nom d’utilizaire e informacions del perfil", + "label": "Perfil" + }, + "radios": { + "description": "Accès a las ràdios", + "label": "Ràdios" + }, + "reports": { + "description": "Accès als senhalaments de moderacion", + "label": "Senhalaments" + }, + "security": { + "description": "Accedir als paramètres de seguretat coma lo senhal e las autorizacions", + "label": "Seguretat" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data de sortida", + "title": "Títol" + }, + "artist": { + "name": "Nom" + }, + "cover": { + "label": "Jaqueta" + }, + "description": { + "label": "Descripcion" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "license": "Licéncia", + "position": "Posicions", + "title": "Títol" + } + }, + "useReport": { + "account": { + "typeLabel": "Compte" + }, + "album": { + "label": "Senhalar aqueste album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Senhalar aqueste artista…", + "typeLabel": "Artista" + }, + "channel": { + "label": "Senhalar aquesta cadena…", + "typeLabel": "Cadena" + }, + "library": { + "label": "Senhalar aquesta bibliotèca…", + "typeLabel": "Bibliotèca" + }, + "playlist": { + "label": "Senhalar aquesta lista de lectura…", + "typeLabel": "Lista de lectura" + }, + "track": { + "label": "Senhalar aquesta pista…", + "typeLabel": "Pista" + } + }, + "useReportConfigs": { + "account": { + "label": "Compte", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Data de sortida", + "title": "Títol" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Cadena" + }, + "creationDate": { + "label": "Data de creacion" + }, + "library": { + "description": "Descripcion", + "label": "Bibliotèca" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Nom" + }, + "playlist": { + "label": "Lista de lectura" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "label": "Pista", + "license": "Licéncia", + "position": "Posicions", + "title": "Títol" + }, + "visibility": { + "label": "Visibilitat" + } + } + }, + "useThemeList": { + "darkTheme": "Escur", + "lightTheme": "Clar" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar d’aquí {delay}", + "rateLimitLater": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar mai tard" + }, + "sentry": { + "allow": "Autorizar", + "deny": "Refusar" + }, + "serviceWorker": { + "actions": { + "later": "Mai tard", + "update": "Actualizar" + }, + "newAppVersion": "Una nòva version de l’aplicacion es disponibla." + } + }, + "views": { "Notifications": { + "button": { + "read": "Las marcar totas coma legidas", + "submit": "Comprés !" + }, + "empty": { + "notifications": "Cap de notificacion de mostrar" + }, + "header": { + "funkwhaleSupport": "Vos agrada Funkwhale ?", + "instanceSupport": "Sosténer aqueste pod Funkwhale", + "messages": "Vòstre messatge", + "notifications": "Vòstras notificacions" + }, + "label": { + "reminder": "Me tornar avisar d’aquí :", + "showRead": "Mostrar las notificacions legidas" + }, + "link": { + "donate": "Donar", + "help": "Descobrissètz d’autras biaisses d’ajudar" + }, + "loading": { + "notifications": "Cargament de las notificacions…" + }, + "message": { + "funkwhaleSupport": "Avèm remarcat que sètz aquí dempuèi un brieu. Se Funkwhale vos es util, poiriam utilizar vòstra ajuda per lo far venir encara melhor !" + }, "option": { "delay": { "30": "30 jorns", @@ -3461,584 +3216,63 @@ "never": "Jamai" } }, - "link": { - "help": "Descobrissètz d’autras biaisses d’ajudar", - "donate": "Donar" + "title": "Notificacions" + }, + "Search": { + "button": { + "submit": "Enviar la requèsta" }, "header": { - "funkwhaleSupport": "Vos agrada Funkwhale ?", - "instanceSupport": "Sosténer aqueste pod Funkwhale", - "messages": "Vòstre messatge", - "notifications": "Vòstras notificacions" + "remote": "Cercar un objècte distant", + "rss": "S’abonar al flux RSS d’un podcast", + "search": "Recercar" }, - "button": { - "submit": "Comprés !", - "read": "Las marcar totas coma legidas" - }, - "loading": { - "notifications": "Cargament de las notificacions…" - }, - "empty": { - "notifications": "Cap de notificacion de mostrar." - }, - "title": "Notificacions", "label": { - "reminder": "Me tornar avisar d’aquí :", - "showRead": "Mostrar las notificacions legidas" - }, - "message": { - "funkwhaleSupport": "Avèm remarcat que sètz aquí dempuèi un brieu. Se Funkwhale vos es util, poiriam utilizar vòstra ajuda per lo far venir encara melhor !" + "albums": "Albums", + "artists": "Artistas", + "playlists": "Listas de lectura", + "podcasts": "Podcast", + "radios": "Ràdios", + "series": "Serias", + "tags": "Etiquetas", + "tracks": "Pistas" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nom d’utilizaire", - "loginStatus": { - "disabled": "Desactivada", - "enabled": "Activada", - "label": "Estat del compte" - }, - "displayName": "Nom public", - "email": "Adreça electronica", - "lastActivity": "Darrièra activitat", - "lastChecked": "Darrièra verificacion", - "permissions": "Autorizacions", - "signupDate": "Data d’inscripcion", - "userType": "Tipe" - }, - "audioContent": { - "cachedSize": "Talha del cache", - "megabyte": "Mo", - "totalSize": "Talha totala", - "uploadQuota": "Quòta de mandadís" - }, - "activity": { - "emittedFollows": "Seguiments de bibliotècas enviats", - "emittedMessages": "Messatge emés", - "firstSeen": "Primièra aparicion", - "receivedFollows": "Seguiments de bibliotècas recebuts" - } - }, - "header": { - "accountData": "Donadas del compte", - "activity": "Activitat", - "audioContent": "Contengut àudio", - "localAccount": "Compte local", - "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", - "noPolicy": "Avètz pas cap de règla en plaça per aqueste compte." - }, - "button": { - "addPolicy": "Ajustar una règla de moderacion" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "domain": "Domenu", - "libraries": "Bibliotècas", - "linkedReports": "Senhalaments ligats", - "openProfile": "Dobrir lo perfil", - "remoteProfile": "Dobrir lo perfil alonhat", - "requests": "Demandas", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "tooltip": { - "uploadQuota": "Definissètz la quantitat de contengut que l’utilizaire pòt enviar. Daissatz void per emplegar las valors per defaut de l’instància." - }, - "option": { - "permission": { - "library": "Bibliotèca", - "moderation": "Moderacion", - "settings": "Paramètres" - } - }, - "description": { - "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat." - }, - "notApplicable": "ND", - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "Base": { - "link": { - "accounts": "Comptes", - "domains": "Domenis", - "reports": "Senhalaments", - "userRequests": "Demandas de l’utilizaire" - }, - "title": "Moderacion", - "menu": { - "secondary": "Menú segondari" - } - }, - "DomainsDetail": { - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "instanceData": "Donadas de l’instància", - "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", - "noPolicy": "Avètz pas cap de règla en plaça per aqueste domeni." - }, - "button": { - "addPolicy": "Ajustar una règla de moderacion", - "addToAllowList": "Ajustar a la lista d’autorizacion", - "refreshNodeInfo": "Actualizar las info del nos", - "removeFromAllowList": "Tirar de la lista de las autorizacions" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "knownAccounts": "Comptes coneguts", - "libraries": "Bibliotècas", - "website": "Dobrir lo site web", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "activity": { - "emittedFollows": "Seguiments de bibliotècas enviats", - "emittedMessages": "Messatge emés", - "firstSeen": "Primièra aparicion", - "receivedFollows": "Seguiments de bibliotècas recebuts" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Error en recuperar las informacions del nos", - "label": "Estatut" - }, - "inAllowList": { - "label": "Es present dins la lista d’autorizacion", - "false": "Non", - "true": "Òc" - }, - "lastChecked": "Darrièra verificacion", - "domainName": "Nom", - "software": { - "label": "Logicial" - }, - "totalUsers": "Utilizaires totals" - } - }, - "description": { - "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat." - }, - "notApplicable": "ND", - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "DomainsList": { - "button": { - "add": "Ajustar" - }, - "label": { - "addDomain": "Ajustar un domeni", - "addToAllowList": "Ajustar a la lista d’autorizacion" - }, - "title": "Domenis", - "header": { - "domains": "Domenis", - "failure": "Error en crear lo domeni" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Tot", - "resolved": "Resolgut", - "unresolved": "Pas resolgut" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "title": "Senhalaments", - "header": { - "reports": "Senhalaments" - }, - "label": { - "search": "Recercar", - "status": "Estatut" - }, - "placeholder": { - "search": "Recercar per títol, artista, domeni…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Tot", - "approved": "Validat", - "pending": "En espèra", - "refused": "Regetada" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "label": { - "search": "Recercar", - "status": "Estatut" - }, - "placeholder": { - "search": "Recercar per nom d’utilizaire…" - }, - "title": "Demandas de l’utilizaire", - "header": { - "userRequests": "Demandas de l’utilizaire" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data d’accès", - "firstSeen": "Primièra aparicion" - }, - "audioContent": { - "bitrate": { - "label": "Debit" - }, - "cachedSize": "Talha del cache", - "duration": "Durada", - "size": "Talha", - "track": "Pista" - }, - "upload": { - "name": "Nom" - } - }, - "link": { - "account": "Compte", - "domain": "Domenu", - "importStatus": "Estatut de l’import", - "library": "Bibliotèca", - "remoteProfile": "Dobrir lo perfil alonhat", - "type": "Tipe", - "django": "Veire sul panèl d’admin de Django", - "visibility": "Visibilitat" - }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "local": "Local", - "uploadData": "Data de mandadís" - }, - "button": { - "delete": "Suprimir", - "download": "Telecargar" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste mandadís ?", - "content": { - "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." - } - } - }, - "notApplicable": "ND" - }, - "LibraryDetail": { - "link": { - "account": "Compte", - "albums": "Albums", - "artists": "Artistas", - "domain": "Domenu", - "reports": "Senhalaments ligats", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django", - "visibility": "Visibilitat" - }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "libraryData": "Donadas de bibliotèca", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "library": { - "description": "Descripcion", - "name": "Nom" - }, - "activity": { - "firstSeen": "Primièra aparicion", - "followers": "Seguidors" - } - }, - "button": { - "delete": "Suprimir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta bibliotèca ?", - "content": { - "warning": "Aquesta bibliotèca serà tirada, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "AlbumDetail": { - "header": { - "activity": "Activitat", - "albumData": "Donadas de l’album", - "audioContent": "Contengut àudio", - "local": "Local" - }, - "link": { - "artist": "Artista", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "album": { - "description": "Descripcion", - "title": "Títol" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste album ?", - "content": { - "warning": "L’album serà tirat, e mai los mandadisses, pistas, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "ArtistDetail": { - "header": { - "activity": "Activitat", - "artistData": "Donadas de l’artista", - "audioContent": "Contengut àudio", - "local": "Local" - }, - "link": { - "albums": "Albums", - "category": "Categoria", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "artist": { - "description": "Descripcion", - "name": "Nom" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste artista ?", - "content": { - "warning": "L’artista serà tirat, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "TagDetail": { - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "tagData": "Donada de l’etiqueta" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "localProfile": "Dobrir lo perfil local", - "tracks": "Pistas", - "django": "Veire sul panèl d’admin de Django" - }, - "button": { - "delete": "Suprimir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta etiqueta ?", - "content": { - "warning": "L’etiqueta seguenta serà tirada e desligada de las entitats existentas. Aquesta accion es irreversibla." - } - } - }, - "table": { - "activity": { - "firstSeen": "Primièra aparicion" - }, - "tag": { - "name": "Nom" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Activitat", - "local": "Local", - "trackData": "Donada de la pista" - }, - "link": { - "album": "Album", - "albumArtist": "Artista d’aqueste album", - "artist": "Artista", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "trackData": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "track": { - "copyright": "Copyright", - "description": "Descripcion", - "discNumber": "Numèro del disc", - "license": "Licéncia", - "position": "Posicions", - "title": "Títol" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta pista ?", - "content": { - "warning": "La pista serà tirada, e mai las pistas, mandadisses, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "tags": "Etiquetas", - "tracks": "Pistas", - "uploads": "Mandadís" - }, - "title": "Gerir la bibliotèca", - "menu": { - "secondary": "Menú segondari" - } - }, - "EditsList": { - "title": "Modificacions", - "header": { - "edits": "Modificacions de la bibliotèca" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Suprimir", + "openRemote": "Dobrir lo perfil alonhat", + "refresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "channelData": "Donadas de la cadena" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "Veire sul panèl d’admin de Django", + "localProfile": "Dobrir lo perfil local" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta cadena serà tirada, e mai los mandadisses, pistas e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste cadena ?" + } + }, "table": { - "channelData": { - "account": "Compte", - "category": "Categoria", - "description": "Descripcion", - "domain": "Domenu", - "name": "Nom", - "rss": "Flux RSS", - "url": "URL" + "activity": { + "edits": "Modificacions", + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "linkedReports": "Senhalaments ligats", + "listenings": "Escotas", + "playlists": "Listas de lectura" }, "audioContent": { "albums": "Albums", @@ -4047,40 +3281,16 @@ "tracks": "Pistas", "uploads": "Mandadís" }, - "activity": { - "edits": "Modificacions", - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "linkedReports": "Senhalaments ligats", - "listenings": "Escotas", - "playlists": "Listas de lectura" + "channelData": { + "account": "Compte", + "category": "Categoria", + "description": "Descripcion", + "domain": "Domenu", + "name": "Nom", + "rss": "Flux RSS", + "url": "URL" } }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "channelData": "Donadas de la cadena" - }, - "button": { - "delete": "Suprimir", - "openRemote": "Dobrir lo perfil alonhat", - "refresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste cadena ?", - "content": { - "warning": "Aquesta cadena serà tirada, e mai los mandadisses, pistas e abonaments ligats. Aquesta accions es irreversibla." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Dobrir lo perfil local", - "django": "Veire sul panèl d’admin de Django" - }, "warning": { "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" } @@ -4104,53 +3314,1201 @@ "channels": "Cadenas", "federation": "Federacion", "instanceInfo": "Info. de l’instància", - "settings": "Paramètres de l’intància", "moderation": "Moderacion", "music": "Musica", "playlists": "Listas de lectura", "sections": "Seccions", "security": "Seguretat", + "settings": "Paramètres de l’intància", "signups": "Inscripcions", "stats": "Estatisticas", "subsonic": "Subsonic", "ui": "Interfàcia utilizaire" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "albumData": "Donadas de l’album", + "audioContent": "Contengut àudio", + "local": "Local" + }, + "link": { + "artist": "Artista", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "modal": { + "delete": { + "content": { + "warning": "L’album serà tirat, e mai los mandadisses, pistas, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste album ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "album": { + "description": "Descripcion", + "title": "Títol" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "ArtistDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "artistData": "Donadas de l’artista", + "audioContent": "Contengut àudio", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Categoria", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "modal": { + "delete": { + "content": { + "warning": "L’artista serà tirat, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste artista ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "artist": { + "description": "Descripcion", + "name": "Nom" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "tags": "Etiquetas", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "menu": { + "secondary": "Menú segondari" + }, + "title": "Gerir la bibliotèca" + }, + "EditsList": { + "header": { + "edits": "Modificacions de la bibliotèca" + }, + "title": "Modificacions" + }, + "LibraryDetail": { + "button": { + "delete": "Suprimir" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "libraryData": "Donadas de bibliotèca", + "local": "Local" + }, + "link": { + "account": "Compte", + "albums": "Albums", + "artists": "Artistas", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "Mandadís", + "visibility": "Visibilitat" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta bibliotèca serà tirada, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aquesta bibliotèca ?" + } + }, + "table": { + "activity": { + "firstSeen": "Primièra aparicion", + "followers": "Seguidors" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + }, + "library": { + "description": "Descripcion", + "name": "Nom" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "TagDetail": { + "button": { + "delete": "Suprimir" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "tagData": "Donada de l’etiqueta" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "django": "Veire sul panèl d’admin de Django", + "localProfile": "Dobrir lo perfil local", + "tracks": "Pistas" + }, + "modal": { + "delete": { + "content": { + "warning": "L’etiqueta seguenta serà tirada e desligada de las entitats existentas. Aquesta accion es irreversibla." + }, + "header": "Suprimir aquesta etiqueta ?" + } + }, + "table": { + "activity": { + "firstSeen": "Primièra aparicion" + }, + "tag": { + "name": "Nom" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "local": "Local", + "trackData": "Donada de la pista" + }, + "link": { + "album": "Album", + "albumArtist": "Artista d’aqueste album", + "artist": "Artista", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "uploads": "Mandadís" + }, + "modal": { + "delete": { + "content": { + "warning": "La pista serà tirada, e mai las pistas, mandadisses, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aquesta pista ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "track": { + "copyright": "Copyright", + "description": "Descripcion", + "discNumber": "Numèro del disc", + "license": "Licéncia", + "position": "Posicions", + "title": "Títol" + }, + "trackData": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "UploadDetail": { + "button": { + "delete": "Suprimir", + "download": "Telecargar" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "local": "Local", + "uploadData": "Data de mandadís" + }, + "link": { + "account": "Compte", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "importStatus": "Estatut de l’import", + "library": "Bibliotèca", + "remoteProfile": "Dobrir lo perfil alonhat", + "type": "Tipe", + "visibility": "Visibilitat" + }, + "modal": { + "delete": { + "content": { + "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste mandadís ?" + } + }, + "notApplicable": "ND", + "table": { + "activity": { + "accessedDate": "Data d’accès", + "firstSeen": "Primièra aparicion" + }, + "audioContent": { + "bitrate": { + "label": "Debit", + "value": "{bitrate}/s" + }, + "cachedSize": "Talha del cache", + "duration": "Durada", + "size": "Talha", + "track": "Pista" + }, + "upload": { + "name": "Nom" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Ajustar una règla de moderacion" + }, + "description": { + "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat" + }, + "header": { + "accountData": "Donadas del compte", + "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", + "activity": "Activitat", + "audioContent": "Contengut àudio", + "localAccount": "Compte local", + "noPolicy": "Avètz pas cap de règla en plaça per aqueste compte." + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "libraries": "Bibliotècas", + "linkedReports": "Senhalaments ligats", + "openProfile": "Dobrir lo perfil", + "remoteProfile": "Dobrir lo perfil alonhat", + "requests": "Demandas", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "notApplicable": "ND", + "option": { + "permission": { + "library": "Bibliotèca", + "moderation": "Moderacion", + "settings": "Paramètres" + } + }, + "table": { + "accountData": { + "displayName": "Nom public", + "email": "Adreça electronica", + "lastActivity": "Darrièra activitat", + "lastChecked": "Darrièra verificacion", + "loginStatus": { + "disabled": "Desactivada", + "enabled": "Activada", + "label": "Estat del compte" + }, + "permissions": "Autorizacions", + "signupDate": "Data d’inscripcion", + "userType": "Tipe", + "username": "Nom d’utilizaire" + }, + "activity": { + "emittedFollows": "Seguiments de bibliotècas enviats", + "emittedMessages": "Messatge emés", + "firstSeen": "Primièra aparicion", + "receivedFollows": "Seguiments de bibliotècas recebuts" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "megabyte": "Mo", + "totalSize": "Talha totala", + "uploadQuota": "Quòta de mandadís" + } + }, + "tooltip": { + "uploadQuota": "Definissètz la quantitat de contengut que l’utilizaire pòt enviar. Daissatz void per emplegar las valors per defaut de l’instància." + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "Base": { + "link": { + "accounts": "Comptes", + "domains": "Domenis", + "reports": "Senhalaments", + "userRequests": "Demandas de l’utilizaire" + }, + "menu": { + "secondary": "Menú segondari" + }, + "title": "Moderacion" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Ajustar una règla de moderacion", + "addToAllowList": "Ajustar a la lista d’autorizacion", + "refreshNodeInfo": "Actualizar las info del nos", + "removeFromAllowList": "Tirar de la lista de las autorizacions" + }, + "description": { + "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat" + }, + "header": { + "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", + "activity": "Activitat", + "audioContent": "Contengut àudio", + "instanceData": "Donadas de l’instància", + "noPolicy": "Avètz pas cap de règla en plaça per aqueste domeni." + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "django": "Veire sul panèl d’admin de Django", + "knownAccounts": "Comptes coneguts", + "libraries": "Bibliotècas", + "tracks": "Pistas", + "uploads": "Mandadís", + "website": "Dobrir lo site web" + }, + "notApplicable": "ND", + "table": { + "activity": { + "emittedFollows": "Seguiments de bibliotècas enviats", + "emittedMessages": "Messatge emés", + "firstSeen": "Primièra aparicion", + "receivedFollows": "Seguiments de bibliotècas recebuts" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + }, + "instanceData": { + "domainName": "Nom", + "inAllowList": { + "false": "Non", + "label": "Es present dins la lista d’autorizacion", + "true": "Òc" + }, + "lastChecked": "Darrièra verificacion", + "nodeInfoStatus": { + "label": "Estatut", + "value": "Error en recuperar las informacions del nos" + }, + "software": { + "label": "Logicial", + "value": "{name} ({version})" + }, + "totalUsers": "Utilizaires totals" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "DomainsList": { + "button": { + "add": "Ajustar" + }, + "header": { + "domains": "Domenis", + "failure": "Error en crear lo domeni" + }, + "label": { + "addDomain": "Ajustar un domeni", + "addToAllowList": "Ajustar a la lista d’autorizacion" + }, + "title": "Domenis" + }, + "ReportsList": { + "header": { + "reports": "Senhalaments" + }, + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "status": { + "all": "Tot", + "resolved": "Resolgut", + "unresolved": "Pas resolgut" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "placeholder": { + "search": "Recercar per títol, artista, domeni…" + }, + "title": "Senhalaments" + }, + "RequestsList": { + "header": { + "userRequests": "Demandas de l’utilizaire" + }, + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "status": { + "all": "Tot", + "approved": "Validat", + "pending": "En espèra", + "refused": "Regetada" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "placeholder": { + "search": "Recercar per nom d’utilizaire" + }, + "title": "Demandas de l’utilizaire" + } + }, "users": { "Base": { "link": { "invitations": "Invitacions", "users": "Utilizaires" }, - "title": "Gerir los utilizaires", "menu": { "secondary": "Menú segondari" + }, + "title": "Gerir los utilizaires" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Connexion…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Confirmacion vòstra adreça electronica impossibla", + "success": "Corrièl confirmat" + }, + "label": { + "confirmationCode": "Còdi de confirmacion" + }, + "link": { + "back": "Tornar a la pagina de connexion", + "login": "Contunhar cap a la pagina de connexion" + }, + "message": { + "success": "Podètz ara utilizar lo servici sens cap de limitacions" + }, + "title": "Confirmar vòstra adreça electronica" + }, + "Login": { + "header": { + "login": "Connectatz-vos a vòstre compte Funkwhale" + }, + "title": "Connexion" + }, + "PasswordReset": { + "button": { + "requestReset": "Demandar un nòu senhal" + }, + "header": { + "failure": "Error en demandar un novèl senhal", + "reset": "Reïnicializar lo senhal" + }, + "help": { + "form": "Garnissètz aqueste formulari per demandar un nòu senhal. Auretz un corrièl a vòstra adreça indicada contenent las consignas per reïnicializar lo senhal." + }, + "label": { + "email": "Adreça electronica del compte" + }, + "link": { + "back": "Tornar a la pagina de connexion" + }, + "placeholder": { + "email": "Picatz l’adreça de corrièl ligada a vòstre compte" + }, + "title": "Reïnicializar lo senhal" + }, + "PasswordResetConfirm": { + "button": { + "update": "Actualizar vòstre senhal" + }, + "header": { + "failure": "Error en cambiar lo senhal", + "success": "Senhal corrèctament modificat" + }, + "label": { + "newPassword": "Nòu senhal" + }, + "link": { + "back": "Tornar a la pagina de connexion", + "login": "Contunhar cap a la pagina de connexion" + }, + "message": { + "requestSent": "Se l’adreça qu’avètz provesida a las etapas precedentas es valida e associada a un compte utilizaire, sètz per recebre un messatge amb las consignas de reïnicializacion d’aquí una estona.", + "success": "Vòstre senhal es corrèctament cambiat." + }, + "title": "Cambiar lo senhal" + }, + "Plugins": { + "title": "Gerir los moduls" + }, + "ProfileActivity": { + "header": { + "playlists": "Listas de lectura", + "recentlyFavorited": "Ajustadas als favorits i a res", + "recentlyListened": "Escotadas i a res" + } + }, + "ProfileBase": { + "label": { + "self": "Sètz vos !" + }, + "link": { + "activity": "Activitat", + "domainView": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "overview": "Vista d’ensemble" + }, + "title": "Perfil de {username}" + }, + "ProfileOverview": { + "button": { + "cancel": "Anullar", + "createChannel": "Crear una cadena", + "next": "Etapa seguenta", + "previous": "Etapa precedenta" + }, + "header": { + "channels": "Cadenas", + "libraries": "Bibliotècas de l’utilizaire", + "sharedLibraries": "Aqueste utilizaire partegèt las bibliotècas seguentas" + }, + "link": { + "addNew": "Ajustar nòu" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Cadena de l’artista" + }, + "header": "Crear una cadena", + "podcast": { + "header": "Cadena del podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crear un compte funkwhale" + }, + "title": "Inscripcion" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir", + "delete": "Suprimir…", + "edit": "Modificar…", + "embed": "Integrar", + "play": "Legir", + "updateChannel": "Actualizar la cadena", + "upload": "Enviar" + }, + "header": { + "artistChannel": "Cadena de l’artista", + "podcastChannel": "Cadena del podcast" + }, + "link": { + "channelEpisodes": "Totes los episòdis", + "channelOverview": "Vista d’ensemble", + "channelTracks": "Pistas", + "domainView": "Veire sus {domain}", + "mirrored": "Miralh de {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion" + }, + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "listenings": "{n} escota | {n} escotas", + "subscribers": "{n} abonat | {n} abonats", + "tracks": "{n} pista | {n} pistas" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta cadena serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste cadena ?" + }, + "embed": { + "header": "Integrar aquesta pista a vòstre site web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "S’utilizatz Mastodon o una autra aplicacion del fediverse, podètz tanben vos abonar a aqueste compte :" + }, + "header": "S’abonar sul fediverse" + }, + "funkwhale": { + "header": "S’abonar a Funkwhale" + }, + "header": "S’abonar a aquesta cadena", + "rss": { + "content": { + "help": "Copiatz-pegatz l’URL seguenta dins vòstra aplicacion de podcast preferida :" + }, + "header": "S’abonar via RSS" + } + } + }, + "title": "Cadena" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Darrièrs episòdis", + "latestTracks": "Darrièras pistas", + "series": "Serias", + "uploadsFailure": "Impossible de publicar unes mandadisses", + "uploadsProcessing": "Tractament dels mandadisses", + "uploadsSuccess": "Mandadisses corrèctament publicats" + }, + "link": { + "addAlbum": "Ajustar nòu", + "erroredUploads": "Veire los mandadisses en error", + "skippedUploads": "Veire los mandadisses sautats" + }, + "message": { + "processing": "Funkwhale tracta vòstres mandadisses e seràn lèu publicats." + }, + "meta": { + "progress": "Bibliotèca e mandadís : {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Anullar", + "subscribe": "S’abonar" + }, + "link": { + "addNew": "Ajustar nòu" + }, + "modal": { + "subscription": { + "header": "Inscripcion" + } + }, + "placeholder": { + "search": "Filtrar per nom…" + }, + "title": "Cadenas seguidas" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Bibliotècas", + "tracks": "Pistas" + }, + "menu": { + "secondary": "Menú segondari" + }, + "title": "Ajustar de contengut" + }, + "Home": { + "button": { + "start": "Començar" + }, + "description": { + "channel": { + "1": "Se sètz musician o creator de podcasts, las cadenas son fachas per vos !", + "2": "Partejatz vòstre trabalh publicament e obtenètz de seguidors sus Funkwhale, sul Fediverse o de las aplicacions de podcast estant." + }, + "follow": "Podètz seguir las bibliotècas d’autres utilizaires per accedir a de nòvas musicas. Las bibliotècas publicas pòdon èsser seguidas còp sec, mentre qu’una bibliotèca privada demanda una aprovacion de sus proprietaris.", + "upload": "Enviatz vòstra bibliotèca musicala personala a Funkwhale e aprofechatz-ne pertot e partejatz-la amb vòstres amics e familha." + }, + "header": { + "channel": "Publicar vòstre trabalh dins una cadena", + "follow": "Seguir de bibliotècas alonhadas", + "upload": "Enviar de contengut tèrces a la bibliotèca" + }, + "help": { + "uploadQuota": "Aquesta instància provesís fins a {quota} d’espaci per cada utilizaire." + }, + "title": "Ajustar e gerir lo contengut" + }, + "libraries": { + "Card": { + "button": { + "upload": "Mandadís" + }, + "label": { + "size": "Talha totala dels fichièrs d’aquesta bibliotèca" + }, + "link": { + "details": "Detalhs de la bibliotèca" + }, + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "FilesTable": { + "action": { + "delete": "Suprimir", + "restartImport": "Relançar l’import" + }, + "button": { + "showStatus": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aquesta pista" + }, + "empty": { + "noTracks": "I a pas encara de pistas ajustadas a aquesta bibliotèca" + }, + "label": { + "importStatus": "Estatut de l’import", + "search": "Recercar" + }, + "notApplicable": "ND", + "option": { + "status": { + "all": "Tot", + "draft": "Borrolhon", + "failed": "Fracàs", + "finished": "Acabat", + "pending": "En espèra", + "skipped": "Ignorat" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artista", + "duration": "Durada", + "importStatus": "Estatut de l’import", + "size": "Talha", + "title": "Títol", + "uploadDate": "Data de mandadís" + } + } + } + }, + "Form": { + "button": { + "confirm": "Suprimir la bibliotèca", + "create": "Crear una bibliotèca", + "delete": "Suprimir", + "update": "Actualizar la bibliotèca" + }, + "description": { + "library": "Las bibliotècas vos ajudan a organizar e partejar vòstras colleccions de musica. Podètz enviar vòstra pròpria collecion musicala a Funkwhale e la partejar amb vòstres amics e vòstra familha.", + "visibility": "Poiretz partejar vòstra bibiotèca amb d’autres gents, sens importància de sa visibilitat." + }, + "header": { + "failure": "Error" + }, + "label": { + "description": "Descripcion", + "name": "Nom", + "visibility": "Visibilitat" + }, + "message": { + "libraryCreated": "Bibliotèca creada", + "libraryDeleted": "Bibliotèca suprimida", + "libraryUpdated": "Bibliotèca actualizada" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta bibliotèca e totas sas pistas seràn suprimidas. Aquesta accion se pòt pas anullar." + }, + "header": "Suprimir aquesta bibliotèca ?" + } + }, + "placeholder": { + "description": "Aquesta bibliotèca conten ma musica personala, espèri que vos agradarà.", + "name": "Ma bibliotèca tròp crana" + } + }, + "Home": { + "empty": { + "noLibrary": "Sembla qu’avètz pas cap de bibliotèca pel moment, es ora de ne crear una." + }, + "header": { + "libraries": "Mas bibliotècas" + }, + "link": { + "createLibrary": "Crear una nòva bibliotèca" + }, + "loading": { + "libraries": "Cargament de las bibliotècas…" + } + }, + "Quota": { + "button": { + "purge": "Purgar" + }, + "header": { + "currentUsage": "Utilizacion actuala" + }, + "label": { + "currentUsage": "{amount} utilizat de {max} autorizat", + "errored": "Fichièrs amb errors", + "pending": "Fichièrs en espèra", + "percentUsed": "{progress}%", + "skipped": "Fichièrs ignorats" + }, + "link": { + "viewFiles": "Veire los fichièrs" + }, + "loading": { + "currentUsage": "Cargament de l’utilizacion de las donadas…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Las pistas enviadas mas pas complètament tractadas pel servidor seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." + }, + "header": "Purgar los fichièrs amb errors ?" + }, + "purgePending": { + "content": { + "description": "Las pistas importadas que lo servidor a pas encara tractadas seràn complètament suprimidas. Lo quòta correspondent vos serà tornat." + }, + "header": "Purgar los fichièrs en espèra ?" + }, + "purgeSkipped": { + "content": { + "description": "Las pistas enviadas mas ignoradas pendent lo processús d’importacion per mantun rasons seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." + }, + "header": "Purgar los fichièrs ignorats ?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Anullar lad emanda d’abonament", + "follow": "Seguir", + "pending": "Abonament en espèra de validacion", + "unfollow": "Quitar de seguir" + }, + "label": { + "scanFailure": "Error en explorant", + "scanPartialSuccess": "Explorada amb d’errors", + "scanPending": "Analisi en espèra", + "scanProgress": "Exploracion ({progress})", + "scanSuccess": "Explorat", + "sharingLink": "Ligam de partatge" + }, + "link": { + "scan": "Explorar ara ", + "scanDetails": "Detalhs" + }, + "message": { + "scanLaunched": "Exploracion lançada", + "scanSkipped": "Exploracion sautada (la darrièra es tròp recenta)" + }, + "meta": { + "failedTracks": "Pistas en error : {tracks}", + "lastUpdate": "Darrièra actualizacion : ", + "tracks": "Cap de pista | {n} pista | {n} pistas" + }, + "modal": { + "unfollow": { + "content": { + "warning": "En quitar de seguir aquesta bibliotèca, perdretz l’accès a son contengut." + }, + "header": "Quitar de seguir aquesta bibliotèca ?" + } + }, + "tooltip": { + "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", + "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" + } + }, + "Home": { + "button": { + "refresh": "Actualizar" + }, + "description": { + "remoteLibraries": "Las bibliotècas alonhadas apertenon a d’autres utilizaires del malhum. I podètz accedir tant que sián publicas o qu’ajatz l’autorizacion." + }, + "header": { + "knownLibraries": "Bibliotècas conegudas", + "remoteLibraries": "Bibliotècas alonhadas" + }, + "loading": { + "remoteLibraries": "Cargament de las bibliotècas alonhadas…" + } + }, + "ScanForm": { + "button": { + "submit": "Enviar la recèrca" + }, + "header": { + "failure": "Error en recuperar la bibliotèca alonhada" + }, + "label": { + "search": "Cercar una bibliotèca alonhada" + }, + "placeholder": { + "url": "Picatz l’URL d’una bibliotèca" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artistas", - "playlists": "Listas de lectura", - "podcasts": "Podcast", - "radios": "Ràdios", - "series": "Serias", - "tags": "Etiquetas", - "tracks": "Pistas" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut.", + "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !" + } }, - "header": { - "search": "Recercar", - "remote": "Cercar un objècte distant", - "rss": "S’abonar al flux RSS d’un podcast" + "DetailOverview": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut.", + "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !" + } }, - "button": { - "submit": "Enviar la requèsta" + "DetailTracks": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut.", + "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !" + } + }, + "Edit": { + "button": { + "accept": "Acceptar", + "reject": "Regetar" + }, + "empty": { + "noFollowers": "Degun sèc pas aquesta bibliotèca" + }, + "header": { + "followers": "Seguidors", + "libraryContents": "Contengut de la bibliotèca" + }, + "loading": { + "followers": "Cargament dels seguidors…" + }, + "table": { + "action": { + "header": { + "action": "Accion", + "date": "Data", + "status": "Estatut", + "user": "Utilizaire" + }, + "status": { + "accepted": "Acceptat", + "pending": "En espèra de validacion", + "rejected": "Regetat" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Modificar", + "upload": "Mandadís" + }, + "description": { + "sharingLink": "Partejatz aqueste ligam amb d’autres utilizaires per que pòscan accedir a vòstra bibliotèca en lo copiar-pegar dins la barra de recèrca de lor instància." + }, + "label": { + "instance": "Restrenches", + "private": "Privada", + "public": "Public", + "sharingLink": "Ligam de partatge" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "owner": "Lo proprietari es {username}", + "tracks": "Pistas" + }, + "meta": { + "tracks": "Cap de pista | {n} pista | {n} pistas" + }, + "title": "Bibliotèca", + "tooltip": { + "instance": "Aquesta bibliotèca es restrencha als utilizaires d’aquesta instància solament", + "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", + "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir la lista de lectura", + "delete": "Suprimir", + "edit": "Modificar", + "embed": "Integrar", + "playAll": "O legir tot", + "stopEdit": "Arrestar la modificacion" + }, + "empty": { + "noTracks": "I a pas encara de pistas ajustadas a aquesta lista de lectura" + }, + "header": { + "tracks": "Pistas" + }, + "meta": { + "tracks": "Lista de lectura contenent {n} pista, per {username} | Lista de lectura contenent {n} pistas, per {username}" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquò escafarà aquesta lista de lectura per totjorn e poirà pas èsser anullat." + }, + "header": "Volètz suprimir la lista de lectura « {playlist} » ?" + }, + "embed": { + "header": "Integrar aquesta lista de lectura a un site web" + } + }, + "title": "Lista de lectura" + }, "List": { + "button": { + "create": "Crear una lista de lectura", + "manage": "Gerir vòstras listas de lectura", + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer las listas de lectura", + "playlists": "Listas de lectura" + }, + "label": { + "search": "Recercar" + }, "ordering": { "direction": { "ascending": "Ascendent", @@ -4159,58 +4517,11 @@ }, "label": "Òrdre" }, - "header": { - "browse": "Percórrer las listas de lectura", - "playlists": "Listas de lectura" - }, - "button": { - "create": "Crear una lista de lectura", - "manage": "Gerir vòstras listas de lectura", - "search": "Recercar" - }, - "placeholder": { - "search": "Escrivètz un nom de lista de lectura…" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, "pagination": { "results": "Resultats per pagina" }, - "label": { - "search": "Recercar" - } - }, - "Detail": { - "button": { - "cancel": "Anullar", - "delete": "Suprimir", - "confirm": "Suprimir la lista de lectura", - "edit": "Modificar", - "embed": "Integrar", - "playAll": "O legir tot", - "stopEdit": "Arrestar la modificacion" - }, - "modal": { - "delete": { - "header": "Volètz suprimir la lista de lectura « { playlist } » ?", - "content": { - "warning": "Aquò escafarà aquesta lista de lectura per totjorn e poirà pas èsser anullat." - } - }, - "embed": { - "header": "Integrar aquesta lista de lectura a un site web" - } - }, - "title": "Lista de lectura", - "meta": { - "tracks": "Lista de lectura contenent { n } pista, per { username } | Lista de lectura contenent { n } pistas, per { username }" - }, - "empty": { - "noTracks": "I a pas encara de pistas ajustadas a aquesta lista de lectura" - }, - "header": { - "tracks": "Pistas" + "placeholder": { + "search": "Escrivètz un nom de lista de lectura…" } } }, @@ -4218,289 +4529,25 @@ "Detail": { "button": { "confirm": "Suprimir la ràdio", + "delete": "Suprimir", "edit": "Modificar…" }, - "modal": { - "delete": { - "header": "Volètz suprimir la ràdio « { playlist } » ?", - "content": { - "warning": "Aquò escafarà aquesta ràdio per totjorn e poirà pas èsser anullat." - } - } - }, "empty": { "noTracks": "I a pas encara de pistas ajustadas a aquesta ràdio" }, - "title": "Ràdio", "header": { "tracks": "Pistas" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } pista ajustada a la fila | { n } pistas ajustadas a la fila" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Accès als fichièrs àudio, bibliotècas, artistas, albums e pistas", - "label": "Bibliotèca e mandadís" - }, - "filters": { - "description": "Accès als filtre de contengut", - "label": "Filtres de contengut" - }, - "profile": { - "description": "Accès als corrièls, nom d’utilizaire e informacions del perfil", - "label": "Perfil" - }, - "edits": { - "description": "Accès a las modificacions", - "label": "Modificacions" - }, - "follows": { - "description": "Accès al seguiment", - "label": "Seguir" - }, - "listenings": { - "description": "Accès a l’istoric d’escota", - "label": "Escotas" - }, - "reports": { - "description": "Accès als senhalaments de moderacion", - "label": "Senhalaments" - }, - "notifications": { - "description": "Accès a las notificacions", - "label": "Notificacions" - }, - "playlists": { - "description": "Accès a las listas de lectura", - "label": "Listas de lectura" - }, - "radios": { - "description": "Accès a las ràdios", - "label": "Ràdios" - }, - "security": { - "description": "Accedir als paramètres de seguretat coma lo senhal e las autorizacions", - "label": "Seguretat" - }, - "favorites": { - "label": "Favorits" - } }, - "filters": { - "accessedDate": "Data d’accès", - "albumTitle": "Nom de l’album", - "artistName": "Nom de l’artista", - "bitrate": "Debit", - "creationDate": "Data de creacion", - "domain": "Domenu", - "duration": "Durada", - "expirationDate": "Data d’expiracion", - "firstSeen": "Data de primièra aparicion", - "followers": "Seguidors", - "itemsCount": "Elements", - "lastActivity": "Darrièra activitat", - "lastSeen": "Darrièra visita", - "modificationDate": "Data de modificacion", - "name": "Nom", - "receivedMessages": "Messatges recebuts", - "releaseDate": "Data de sortida", - "dateJoined": "Data d’inscripcion", - "size": "Talha", - "trackTitle": "Nom de la pista", - "uploads": "Mandadís", - "username": "Nom d’utilizaire", - "users": "Utilizaires" - }, - "fields": { - "privacyLevel": { - "label": "Visibilitat de l’activitat", - "help": "Determinatz lo nivèl de visibilitat de vòstra activitat", - "shortChoices": { - "public": "Tot lo monde", - "instance": "Instància", - "private": "Privat" + "modal": { + "delete": { + "content": { + "warning": "Aquò escafarà aquesta ràdio per totjorn e poirà pas èsser anullat." }, - "choices": { - "instance": "Lo monde d’aquesta instància", - "public": "Tot lo monde, per totas las instàncias", - "private": "Degun fòra ieu" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoria", - "choices": { - "illegalContent": "Contengut illegal", - "invalidMetadata": "Metadonada invalida", - "offensiveContent": "Contengut ofensiu", - "other": "Autre", - "takedownRequest": "Demanda de retrait" - } - }, - "importStatus": { - "label": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aqueste mandadís", - "choices": { - "draft": { - "label": "Borrolhon", - "help": "La pista es enviada mas pas encara prevista per tractament pel servidor pel moment" - }, - "errored": { - "label": "Perturbat", - "help": "Una error s’es producha en tractar aquesta pista, asseguratz-vos qu’es corrèctament etiquetada" - }, - "finished": { - "label": "Acabat", - "help": "Importat" - }, - "pending": { - "label": "En espèra", - "help": "La pista es enviada mas pas encara tractada pel servidor" - }, - "skipped": { - "label": "Ignorat", - "help": "La pista ja presenta dins una de vòstras bibliotècas" - } - } - }, - "contentCategory": { - "label": "Categoria del contengut", - "choices": { - "music": "Musica", - "other": "Autre", - "podcast": "Podcast" - } + "header": "Volètz suprimir la ràdio « {radio} » ?" } - } + }, + "title": "Ràdio" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Compte" - }, - "album": { - "typeLabel": "Album", - "label": "Senhalar aqueste album…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Senhalar aqueste artista…" - }, - "channel": { - "typeLabel": "Cadena", - "label": "Senhalar aquesta cadena…" - }, - "library": { - "typeLabel": "Bibliotèca", - "label": "Senhalar aquesta bibliotèca…" - }, - "playlist": { - "typeLabel": "Lista de lectura", - "label": "Senhalar aquesta lista de lectura…" - }, - "track": { - "label": "Senhalar aquesta pista…", - "typeLabel": "Pista" - } - }, - "useReportConfigs": { - "account": { - "label": "Compte", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Data de sortida", - "title": "Títol" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Cadena" - }, - "track": { - "copyright": "Copyright", - "license": "Licéncia", - "position": "Posicions", - "title": "Títol", - "label": "Pista" - }, - "creationDate": { - "label": "Data de creacion" - }, - "library": { - "description": "Descripcion", - "label": "Bibliotèca" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Nom" - }, - "playlist": { - "label": "Lista de lectura" - }, - "tags": { - "label": "Etiquetas" - }, - "visibility": { - "label": "Visibilitat" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "Licéncia", - "position": "Posicions", - "title": "Títol" - }, - "cover": { - "label": "Jaqueta" - }, - "description": { - "label": "Descripcion" - }, - "artist": { - "name": "Nom" - }, - "album": { - "releaseDate": "Data de sortida", - "title": "Títol" - }, - "tags": { - "label": "Etiquetas" - } - } - }, - "useThemeList": { - "darkTheme": "Escur", - "lightTheme": "Clar" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Una nòva version de l’aplicacion es disponibla.", - "actions": { - "later": "Mai tard", - "update": "Actualizar" - } - }, - "axios": { - "rateLimitDelay": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar d’aquí { delay }", - "rateLimitLater": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar mai tard" } } } diff --git a/front/src/locales/pl.json b/front/src/locales/pl.json index 910ec87d2..a9d56cb93 100644 --- a/front/src/locales/pl.json +++ b/front/src/locales/pl.json @@ -1,427 +1,363 @@ { + "App": { + "loading": "Ładowanie…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "Aplikacja { app } chciałaby uzyskać dostęp do twojego konta Funkwhale", - "authorize": "Autoryzuj zewnętrzną aplikację", - "authorizeFailure": "Wystąpił błąd podczas autoryzowania aplikacji", - "fetchFailure": "Wystąpił błąd podczas pobierania danych aplikacji", - "allScopes": "Pełen dostęp", - "readOnly": "Tylko do odczytu", - "writeOnly": "Tylko do zapisu" - }, - "title": "Autoryzuj aplikację", - "button": { - "authorize": "Autoryzuj { app }" - }, - "help": { - "pasteCode": "Wklej następujący kod do aplikacji:", - "redirect": "Zostaniesz przekierowany na { 0 }", - "copyCode": "Pokazany zostanie kod do wklejenia w aplikacji." - }, - "message": { - "unknownPermissions": "Aplikacja prosi też o następujące nieznane uprawnienia:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Dostęp wyłączony", - "passwordUpdated": "Zaktualizowano hasło", - "unavailable": "API Subsonic nie jest dostępne na tej instancji Funkwhale." - }, - "button": { - "confirmDisable": "Wyłącz dostęp", - "disable": "Wyłącz dostęp Subsonic", - "newPassword": "Poproś o nowe hasło", - "confirmNewPassword": "Poproś o hasło" - }, - "modal": { - "disableSubsonic": { - "header": "Wyłączyć dostęp do API Subsonic?", - "content": { - "warning": "To całkowicie wyłączy dostęp do API Subsonic z tego konta." - } - }, - "newPassword": { - "header": "Poprosić o nowe hasło do API Subsonic?", - "content": { - "warning": "To wyloguje Cię z urządzeń na których jesteś obecnie zalogowany." - } - } - }, - "link": { - "apps": "Odkryj, jak korzystać z Funkwhale za pomocą innych aplikacji" - }, - "header": { - "error": "Błąd", - "subsonic": "Hasło do API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsługującymi API Subsonic.", - "paragraph3": "Korzystanie z Funkwhale za pomocą tych aplikacji wymaga jednak oddzielnego hasła, które możesz ustawić poniżej.", - "paragraph2": "Możesz użyć tego, aby cieszyć się swoją muzyką w trybie offline, na przykład na smartfonie czy tablecie." - } - }, - "label": { - "subsonicField": "Twoje hasło do API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token dostępowy", - "appId": "Identyfikator aplikacji", - "appSecret": "Sekret aplikacji" - }, - "header": { - "appDetails": "Szczegóły aplikacji", - "editApp": "Edytuj aplikację" - }, - "help": { - "appDetails": "Identyfikator i sekret aplikacji są danymi wrażliwymi i powinny być traktowane jak hasła. Nie powinieneś się nimi z nikim dzielić." - }, - "link": { - "settings": "Wróć do ustawień" - }, - "title": "Edytuj aplikację", - "button": { - "regenerateToken": "Stwórz nowy token" - } - }, - "Settings": { - "title": "Ustawienia konta", - "header": { - "accountSettings": "Ustawienia konta", - "authorizedApps": "Autoryzowane aplikacje", - "avatar": "Awatar", - "changeEmail": "Zmień swój adres e-mail", - "changePassword": "Zmień swoje hasło", - "contentFilters": "Filtry treści", - "deleteAccount": "Usuń moje konto", - "hiddenArtists": "Ukryci wykonawcy", - "plugins": "Rozszerzenia", - "settingsUpdated": "Zapisano ustawienia", - "emailFailure": "Nie udało się zmienić Twojego adresu e-mail", - "accountFailure": "Nie udało się usunąć Twojego konta", - "noApps": "Żadna aplikacja nie jest połączona z Twoim kontem.", - "noPersonalApps": "Nie zarejestrowałeś jeszcze żadnej aplikacji.", - "yourApps": "Twoje aplikacje", - "avatarFailure": "Nie można było zapisać twojego awatara", - "passwordFailure": "Twoje hasło nie mogło zostać zmienione", - "updateFailure": "Twoje ustawienia nie mogły zostać zapisane" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplikacja", - "permissions": "Uprawnienia" - } - }, - "yourApps": { - "header": { - "application": "Aplikacja", - "creationDate": "Data utworzenia", - "scopes": "Zakresy dostępu" - } - }, - "artists": { - "header": { - "creationDate": "Data utworzenia", - "name": "Nazwa" - } - } - }, - "label": { - "avatar": "Awatar", - "currentPassword": "Aktualne hasło", - "newEmail": "Nowy adres e-mail", - "newPassword": "Nowe hasło", - "password": "Hasło" - }, - "button": { - "password": "Zmień hasło", - "delete": "Usuń", - "deleteAccountConfirm": "Usuń moje konto", - "deleteAccount": "Usuń moje konto…", - "disableSubsonic": "Wyłącz dostęp", - "edit": "Edytuj", - "refresh": "Odśwież", - "remove": "Usuń", - "removeApp": "Usuń aplikację", - "revoke": "Odwołaj", - "revokeAccess": "Odwołaj dostęp", - "update": "Zapisz", - "updateSettings": "Zapisz ustawienia" - }, - "description": { - "changeEmail": "Zmień adres e-mail powiązany z tym kontem. Na nowy adres zostanie wysłane potwierdzenie.", - "changePassword": { - "paragraph1": "Zmiana Twojego hasła zmieni też hasło do API Subsonic, jeśli je uzyskałeś(-aś).", - "paragraph2": "Będziesz musiał zaktualizować hasło w aplikacjach które go używają." - }, - "contentFilters": "Filtry treści pomogą Ci ukryć treści, których nie chcesz widzieć w serwisie.", - "authorizedApps": "To jest lista aplikacji, które mają dostęp do informacji Twojego konta.", - "yourApps": "To jest lista aplikacji, które zarejestrowałeś(-aś).", - "plugins": "Użyj rozszerzeń do Funkwhale i zyskaj dodatkowe funkcjonalności.", - "deleteAccount": "Możesz permanentnie i nieodwracalnie skasować swoje konto i wszystkie powiązane informacje używając pól poniżej. Zostaniesz poproszony o potwierdzenie tej czynności." - }, - "modal": { - "changePassword": { - "header": "Zmienić Twoje hasło?", - "content": { - "warning": "Zmiana hasła będzie miała następujące konsekwencje:", - "logout": "Zostaniesz wylogowany i będziesz musiał zalogować się nowym hasłem", - "subsonic": "Twoje hasło do API Subsonic zostanie zmienione na nowe, losowe i zostaniesz wylogowany z urządzeń korzystających ze starego hasła do API Subsonic" - } - }, - "deleteAccount": { - "header": "Czy na pewno chcesz usunąć swoje konto?", - "content": { - "warning": "To jest nieodwracalne i permanentnie usunie Twoje dane z naszych serwerów. Zostaniesz natychmiast wylogowany(-a)." - } - }, - "deleteApp": { - "header": "Usunąć aplikację „{ application }”?", - "content": { - "warning": "To permanentnie usunie aplikację i wszystkie powiązane tokeny." - } - }, - "revokeApp": { - "header": "Czy odwołać dostęp dla aplikacji „{ application }”?", - "content": { - "warning": "To uniemożliwi tej aplikacji dostęp do usługi w Twoim imieniu." - } - } - }, - "help": { - "noApps": "Jeśli zezwolisz jakimś zewnętrznym aplikacjom na dostęp do twoich danych, te aplikacje pojawią się tutaj.", - "changePassword": "Upewnij się, że Twoje hasło jest poprawne", - "noPersonalApps": "Zarejestruj jakąś, aby zintegrować Funkwhale z innymi aplikacjami." - }, - "link": { - "managePlugins": "Zarządzaj rozszerzeniami", - "newApp": "Zarejestruj nową aplikację" - }, - "warning": { - "deleteAccount": "Twoje konto zostanie usunięte z naszych serwerów w ciągu kilku minut. Poinformujemy też inne serwery, które mogą mieć kopię twoich danych, aby przystąpiły do usuwania. Weź pod uwagę, że niektóre serwery mogą być wyłączone, albo nie chcieć współpracować." - }, - "message": { - "currentEmail": "Twój obecny adres e-mail to { email }.", - "confirmDelete": "Żądanie o usunięcie konta zostało przesłane. Twoje konto i powiązane z nim treści zostaną wkrótce usunięte" - } - }, - "Logout": { - "header": { - "confirm": "Czy na pewno chcesz się wylogować?", - "unauthenticated": "Nie jesteś obecnie zalogowany(-a)" - }, - "link": { - "login": "Zaloguj się!" - }, - "title": "Wyloguj się", - "button": { - "logout": "Tak, wyloguj mnie!" - }, - "message": { - "loggedIn": "Jesteś obecnie zalogowany jako { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Wróć do ustawień" - }, - "title": "Utwórz nową aplikację" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Zaznaczenie nadrzędnych zakresów dostępu „Odczyt” lub „Zapis” umożliwia dostęp do wszystkich odpowiednich zakresów podrzędnych.", - "read": { - "label": "Odczyt", - "description": "Dostęp do odczytu danych użytkownika" - }, - "write": { - "label": "Zapis", - "description": "Dostęp do zapisu danych użytkownika" - } - }, - "name": "Nazwa", - "redirectUri": "Adres URI przekierowania" - }, - "button": { - "create": "Utwórz aplikację", - "update": "Zapisz aplikację" - }, - "help": { - "redirectUri": "Użyj \"urn:ietf:wg:oauth:2.0:oob\" jako URI przekierowania, jeśli twoja aplikacja nie jest dostępna w sieci web." - }, - "header": { - "failure": "Nie udało się zapisać Twoich zmian" - } - }, - "LoginForm": { - "link": { - "createAccount": "Utwórz konto", - "resetPassword": "Zresetuj hasło" - }, - "placeholder": { - "username": "Wprowadź swoją nazwę użytkownika lub adres e-mail" - }, - "help": { - "approvalRequired": "Jeżeli niedawno się rejestrowałeś, może być koniecznie odczekanie, aż zespół moderujący rozpatrzy twoją aplikację.", - "invalidCredentials": "Upewnij się, że Twoja kombinacja nazwy użytkownika i hasła są poprawne oraz zweryfikuj poprawność adresu e-mail." - }, - "button": { - "login": "Zaloguj się" - }, - "label": { - "password": "Hasło", - "username": "Nazwa użytkownika lub adres e-mail" - }, - "header": { - "loginFailure": "Nie udało się Cię zalogować" - } - }, - "SignupForm": { - "button": { - "create": "Utwórz konto" - }, - "label": { - "email": "Adres e-mail", - "password": "Hasło", - "username": "Nazwa użytkownika" - }, - "placeholder": { - "email": "Wprowadź swój adres e-mail", - "invitation": "Wprowadź swój kod zaproszenia (wielkość znaków nie ma znaczenia)", - "username": "Wprowadź swoją nazwę użytkownika" - }, - "header": { - "login": "Zaloguj się na swoje konto Funkwhale", - "signupFailure": "Twoje konto nie mogło zostać utworzone." - }, - "message": { - "registrationClosed": "Publiczna rejestracja na tej instancji nie jest aktywna. Potrzebujesz zaproszenia, aby się zarejestrować.", - "requiresReview": "Rejestrowanie się na tej instancji jest dozwolone, ale wymaga zatwierdzenia przez jednego z moderatorów.", - "awaitingReview": "Twoja aplikacja o konto została przesłana. Zostaniesz poinformowany za pomocą wiadomości e-mail kiedy zespół moderacyjny ją rozpatrzy.", - "accountCreated": "Twoje konto zostało stworzone z powodzeniem. Zweryfikuj swój adres e-mail przed próbą logowania." - } - }, - "Plugin": { - "link": { - "documentation": "Dokumentacja" - }, - "label": { - "pluginEnabled": "Włączony", - "library": "Biblioteka" - }, - "header": { - "failure": "Wystąpił błąd podczas zapisywania rozszerzenia" - }, - "description": { - "library": "Biblioteka, do której pliki powinny zostać zaimportowane." - }, - "button": { - "save": "Zapisz", - "scan": "Skanuj" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", - "hoursOfMusic": "godzina muzyki | godziny muzyki" + "description": { + "findApp": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji.", + "funkwhale": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", + "publicContent": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji.", + "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!", + "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!" }, "header": { - "funkwhale": "Serwis społecznościowy służący do udostępniania i cieszenia się muzyką", "aboutPod": "O tej instancji", - "publicContent": "Przeglądaj publiczne treści", "findApp": "Poznaj kompatybilne aplikacje", + "funkwhale": "Serwis społecznościowy służący do udostępniania i cieszenia się muzyką", + "publicContent": "Przeglądaj publiczne treści", "signup": "Zarejestruj się" }, - "title": "O tej instancji", + "help": { + "closedRegistrations": "Rejestracja nie jest możliwa na tej instancji. Możesz zapisać się na innej używając linka poniżej." + }, "link": { "findOtherPod": "Znajdź inną instancję", "learnMore": "Dowiedz się więcej" }, - "description": { - "funkwhale": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", - "publicContent": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji.", - "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!", - "findApp": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji.", - "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!" + "message": { + "greeting": "Cześć, {username}", + "loggedIn": "Jesteś już zalogowany!" }, "placeholder": { "noDescription": "Opis nie jest dostępny." }, - "message": { - "loggedIn": "Jesteś już zalogowany!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", - "hoursOfMusic": "{ n } godzina muzyki | { n } godziny muzyki" + "hoursOfMusic": "godzina muzyki | godziny muzyki" + }, + "title": "O tej instancji" + }, + "AboutPod": { + "feature": { + "allowList": "Lista zezwoleń", + "anonymousAccess": "Anonimowy dostęp", + "federation": "Federacja", + "quota": "Limit przestrzeni", + "registrations": "Rejestracje", + "status": { + "closed": "Zamknięte", + "disabled": "Wyłączony", + "enabled": "Włączone", + "open": "Otwarte" + }, + "version": "Wersja Funkwhale" }, "header": { - "aboutFunkwhale": "O Funkwhale", "about": "O tej instancji", "contact": "Kontakt", + "features": "Informacje dodatkowe", + "rules": "Reguły", + "statistics": "Statystyki", + "terms": "Regulamin i polityka prywatności" + }, + "link": { + "about": "O tej instancji", + "features": "Informacje dodatkowe", + "introduction": "Wprowadzenie", + "rules": "Reguły", + "statistics": "Statystyki", + "terms": "Regulamin i polityka prywatności" + }, + "message": { + "contact": "Wyślij nam wiadomość e-mail: {'{{'} contactEmail {'}}'}" + }, + "notApplicable": "Niedostępne", + "placeholder": { + "noDescription": "Opis nie jest dostępny.", + "noRules": "Nie ustalono reguł.", + "noTerms": "Nie ustalono warunków." + }, + "stat": { + "activeUsers": "aktywny użytkownik | aktywni użytkownicy", + "albumsCount": "album | albumy", + "artistsCount": "wykonawca | wykonawców", + "hoursOfMusic": "godzina muzyki | godziny muzyki", + "listeningsCount": "odsłuchania | odsłuchania", + "tracksCount": "utwór | utwory" + }, + "title": "O tej instancji" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", + "paragraph2": "Funkwhale jest bezpłatny i rozwijany przez przyjazną społeczność wolontariuszy." + }, + "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!", + "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!" + }, + "header": { + "about": "O tej instancji", + "aboutFunkwhale": "O Funkwhale", + "contact": "Kontakt", + "links": "Użyteczne linki", "login": "Zaloguj się", - "newChannels": "Nowe kanały", "newAlbums": "Ostatnio dodane albumy", + "newChannels": "Nowe kanały", "signup": "Zarejestruj się", "statistics": "Statystyki", - "links": "Użyteczne linki", "welcome": "Witaj na { podName }!" }, "link": { - "publicContent": { - "label": "Przeglądaj publiczne treści", - "description": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji" + "findOtherPod": "Znajdź inną instancję", + "funkwhale": "Odwiedź funkwhale.audio", + "learnMore": "Dowiedz się więcej", + "mobileApps": { + "description": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji", + "label": "Aplikacje mobilne" }, + "publicContent": { + "description": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji", + "label": "Przeglądaj publiczne treści" + }, + "rules": "Regulamin serwera", "userGuides": { "description": "Odkryj wszystko, co powinieneś wiedzieć o Funkwhale i jego funkcjach", "label": "Podręczniki użytkownika" }, - "findOtherPod": "Znajdź inną instancję", - "learnMore": "Dowiedz się więcej", - "mobileApps": { - "label": "Aplikacje mobilne", - "description": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji" - }, - "rules": "Regulamin serwera", - "viewMore": "Zobacz więcej…", - "funkwhale": "Odwiedź funkwhale.audio" + "viewMore": "Zobacz więcej…" }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale jest bezpłatny i rozwijany przez przyjazną społeczność wolontariuszy.", - "paragraph1": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci." - }, - "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!", - "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!" - }, - "title": "Strona główna", "placeholder": { "noDescription": "Żaden opis nie jest dostępny." + }, + "stat": { + "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", + "hoursOfMusic": "{ n } godzina muzyki | { n } godziny muzyki" + }, + "title": "Strona główna" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Nie odnaleziono strony!" + }, + "link": { + "home": "Przejdź na stronę główną" + }, + "message": { + "pageNotFound": "Przepraszamy, strona której szukasz nie istnieje:" + }, + "title": "Nie odnaleziono strony" + }, + "Queue": { + "button": { + "clear": "Wyczyść", + "close": "Zamknij", + "stopRadio": "Zatrzymaj radio" + }, + "header": { + "failure": "Ten utwór nie mógł zostać wczytany", + "radio": "Słuchasz stacji radiowej" + }, + "label": { + "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", + "duration": "Czas trwania", + "next": "Następny utwór", + "pause": "Wstrzymaj", + "play": "Odtwarzaj", + "previous": "Poprzedni utwór", + "queue": "Kolejka odtwarzania", + "remove": "Usuń", + "restart": "Odtwórz utwór ponownie" + }, + "message": { + "automaticPlay": "Następny utwór zostanie odtworzony automatycznie w ciągu kilku sekund…", + "radio": "Nowe utwory pojawią się tutaj automatycznie." + }, + "meta": { + "queuePosition": "Utwór { index } z { length }" + }, + "warning": { + "connectivity": "Możesz mieć problemy z łącznością." + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "Kanał RSS", + "search": "Szukaj" + }, + "description": { + "fediverse": "Użyj tego formularza, aby obserwować kanał znajdujący się gdzieś indziej we Fediverse.", + "rss": "Użyj tego formularza, aby obserwować kanał RSS znajdujący się pod danym adresem URL." + }, + "error": { + "fetchFailed": "Ten obiekt nie mógł zostać pobrany" + }, + "header": { + "fetchFailed": "Wystąpił błąd podczas pobierania obiektu" + }, + "label": { + "fediverse": { + "fieldLabel": "Obiekt Fediverse", + "title": "Obserwuj podcast z Fediverse" + }, + "rss": { + "fieldLabel": "Lokalizacja kanału RSS", + "fieldPlaceholder": "https://adres.strony/rss.xml", + "title": "Zasubskrybuj kanał RSS podcastu" + } + }, + "warning": { + "unsupported": "Ten rodzaj obiektu nie jest jeszcze wspierany" + } + }, + "SetInstanceModal": { + "button": { + "cancel": "Anuluj", + "submit": "Prześlij" + }, + "header": { + "chooseInstance": "Wybierz instancję", + "failure": "Nie można połączyć się z podanym adresem URL", + "suggestions": "Polecane" + }, + "help": { + "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", + "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do której chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji.", + "serverDown": "Serwer może być niedostępny" + }, + "label": { + "url": "Adres URL instancji" + }, + "message": { + "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" + } + }, + "ShortcutsModal": { + "button": { + "close": "Zamknij" + }, + "header": { + "modal": "Skróty klawiszowe" + }, + "shortcut": { + "audio": { + "clearQueue": "Wyczyść kolejkę odtwarzania", + "decreaseVolume": "Zmniejsz głośność", + "expandQueue": "Rozwiń kolejkę odtwarzania/widok odtwarzacza", + "increaseVolume": "Zwiększ głośność", + "label": "Skróty odtwarzacza", + "playNext": "Następny utwór", + "playPause": "Zatrzymaj/odtwarzaj aktualny utwór", + "playPrevious": "Poprzedni utwór", + "seekBack30": "Cofnij o 30 sekund", + "seekBack5": "Cofnij o 5 sekund", + "seekForward30": "Pomiń 30 sekund", + "seekForward5": "Pomiń 5 sekund", + "shuffleQueue": "Wymieszaj kolejkę", + "toggleFavorite": "Dodaj lub usuń z ulubionych", + "toggleLoop": "Włącz zapętlenie kolejki", + "toggleMute": "Przełącz wyciszenie" + }, + "general": { + "focus": "Aktywuj pasek wyszukiwania", + "label": "Skróty ogólne", + "show": "Pokaż dostępne skróty klawiszowe", + "unfocus": "Dezaktywuj pasek wyszukiwania" + } + } + }, + "Sidebar": { + "header": { + "administration": "Administracja", + "explore": "Odkrywaj", + "library": "Moja biblioteka", + "main": "Główna nawigacja", + "more": "Więcej" + }, + "label": { + "add": "Dodaj zawartość", + "administration": "Administracja", + "edits": "Edycje oczekujące na rozpatrzenie", + "follows": "Oczekujące prośby o obserwowanie", + "language": "Język", + "main": "Menu główne", + "play": "Odtwarzaj ten utwór", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "albums": "Albumy", + "artists": "Artyści", + "browse": "Przeglądaj", + "channels": "Kanały", + "createAccount": "Utwórz konto", + "favorites": "Ulubione", + "home": "Strona główna", + "library": "Biblioteka", + "login": "Zaloguj się", + "moderation": "Moderacja", + "playlists": "Listy odtwarzania", + "podcasts": "Podcasty", + "radios": "Stacje radiowe", + "search": "Szukaj", + "settings": "Ustawienia", + "users": "Użytkownicy" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "Zapisz" + }, + "header": { + "error": "Wystąpił błąd podczas zapisywania ustawień", + "image": "Aktualny obraz" + }, + "message": { + "success": "Pomyślnie zapisano ustawienia." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Dodaj nowe pole", + "edit": "Edytuj formularz", + "preview": "Podgląd formularza" + }, + "help": { + "additionalFields": "Dodatkowe pola do wyświetlenia w formularzu rejestracji. Ich zawartość jest widoczna tylko gdy manualna weryfikacja rejestracji jest włączona.", + "helpText": "Opcjonalny tekst, który będzie widoczny nad formularzem rejestracji." + }, + "label": { + "additionalField": "Dodatkowe pole", + "additionalFields": "Dodatkowe pola", + "delete": "Usuń", + "helpText": "Podręcznik pomocy", + "moveDown": "Przesuń w dół", + "moveUp": "Przesuń w górę" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Działania", + "label": "Etykieta pola", + "required": "Wymagane", + "type": "Typ pola" + }, + "required": { + "false": "Nie", + "true": "Tak" + }, + "type": { + "long": "Długi tekst", + "short": "Krótki tekst" + } + } + } } }, "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } epizod | { n } epizody", - "tracks": "{ n } utwór | { n } utwory" - } - }, - "Widget": { - "button": { - "more": "Pokaż więcej" - } - } - }, "ChannelCard": { "meta": { "episodes": "{ n } epizod | { n } epizody", @@ -429,249 +365,49 @@ }, "title": "Aktualizowany { date }" }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } epizod | { n } epizody" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - } - }, - "Widget": { - "button": { - "more": "Pokaż więcej" - } - } - }, - "Player": { - "meta": { - "position": "{ index } z { length }" - }, - "header": { - "player": "Odtwarzacz i jego skróty" - }, - "label": { - "clearQueue": "Wyczyść kolejkę odtwarzania", - "expandQueue": "Rozwiń kolejkę odtwarzania", - "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", - "loopingDisabled": "Zapętlanie jest wyłączone. Naciśnij, aby przełączyć na zapętlanie jednego utworu.", - "loopingSingle": "Zapętlanie jednego utworu jest włączone. Naciśnij, aby przełączyć na zapętlanie całej kolejki odtwarzania.", - "loopingWholeQueue": "Zapętlanie całej kolejki jest włączone. Naciśnij, aby wyłączyć zapętlanie.", - "audioPlayer": "Odtwarzacz multimediów", - "mute": "Wycisz", - "nextTrack": "Następny utwór", - "pause": "Wstrzymaj", - "play": "Odtwarzaj", - "previousTrack": "Poprzedni utwór", - "shuffleQueue": "Wymieszaj swoją kolejkę", - "unmute": "Odcisz" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Dodaj do kolejki odtwarzania", - "addToPlaylist": "Dodaj do listy odtwarzania…", - "episodeDetails": "Szczegóły odcinka", - "hideArtist": "Ukryj zawartość od tego wykonawcy", - "discretePlay": "Odtwarzaj", - "playAlbum": "Odtwarzaj album", - "playArtist": "Odtwarzaj wykonawcę", - "playNext": "Odtwórz następny", - "playNow": "Odtwórz teraz", - "playPlaylist": "Odtwarzaj listę odtwarzania", - "startRadio": "Odtwarzaj podobne utwory", - "playTrack": "Odtwarzaj utwór", - "playTracks": "Odtwarzaj utwory", - "report": "Zgłoś…", - "trackDetails": "Szczegóły utworu" - }, - "title": { - "more": "Więcej…", - "unavailable": "Ten utwór nie jest dostępny w żadnej z bibliotek, do których masz dostęp" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Dodaj do ulubionych", - "addToPlaylist": "Dodaj do listy odtwarzania…", - "addToQueue": "Dodaj do kolejki odtwarzania", - "episodeDetails": "Szczegóły odcinka", - "playNext": "Odtwórz następny", - "playNow": "Odtwórz teraz", - "startRadio": "Odtwarzaj stację radiową", - "removeFromFavorites": "Usuń z ulubionych", - "trackDetails": "Szczegóły utworu", - "albumDetails": "Zobacz album", - "artistDetails": "Zobacz wykonawcę", - "channelDetails": "Zobacz kanał", - "seriesDetails": "Zobacz serial" - } - }, - "MobileRow": { - "button": { - "actions": "Wyświetl akcje dla utworu" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Dodaj do ulubionych", - "addToPlaylist": "Dodaj do listy odtwarzania…", - "addToQueue": "Dodaj do kolejki odtwarzania", - "episodeDetails": "Szczegóły odcinka", - "playNext": "Odtwórz następny", - "playNow": "Odtwórz teraz", - "startRadio": "Odtwarzaj stację radiową", - "removeFromFavorites": "Usuń z ulubionych", - "trackDetails": "Szczegóły utworu", - "albumDetails": "Zobacz album", - "artistDetails": "Zobacz wykonawcę", - "channelDetails": "Zobacz kanał", - "seriesDetails": "Zobacz serial" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "title": "Tytuł" - } - } - }, - "Widget": { - "empty": { - "noResults": "Niczego tu nie ma" - }, - "button": { - "more": "Pokaż więcej" - } - }, - "MobileRow": { - "button": { - "actions": "Wyświetl akcje dla utworu" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Dostosuj głośność" - }, - "button": { - "mute": "Wycisz", - "unmute": "Odcisz" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Wykonawca", - "category": { - "federation": "Federacja", - "podcasts": "Podcasty" - }, - "search": "Szukaj treści", - "tag": "Tag", - "track": "Utwór" - }, - "link": { - "more": "Więcej wyników 🡒", - "fediverse": "Szukaj we fediverse", - "rss": "Zasubskrybuj podcast za pomocą RSS" - }, - "header": { - "noResults": "Nie znaleziono wyników" - }, - "placeholder": { - "search": "Szukaj wykonawców, albumów, utworów…" - }, - "empty": { - "noResults": "Przepraszamy, to wyszukiwanie nie zwróciło wyników" - } - }, - "Search": { - "header": { - "albums": "Albumy", - "artists": "Artyści", - "search": "Poszukaj trochę muzyki" - }, - "placeholder": { - "search": "Wykonawca, album, utwór…" - }, - "empty": { - "noAlbums": "Nie znaleziono albumu spełniającego Twoje kryteria", - "noArtists": "Nie znaleziono wykonawców spełniających Twoje kryteria" + "ChannelEntries": { + "help": { + "subscribe": "Powinieneś śledzić ten kanał, aby zobaczyć jego zawartość." } }, "ChannelForm": { - "label": { - "discography": "Dyskografia wykonawcy", - "category": "Kategoria", - "image": "Obrazek kanału", - "description": "Opis", - "username": "Nazwa we Fediverse", - "language": "Język", - "name": "Nazwa", - "email": "Adres e-mail właściciela", - "owner": "Nazwa posiadacza", - "podcast": "Podcasty", - "subcategory": "Podkategoria", - "tags": "Tagi" - }, - "placeholder": { - "name": "Wspaniała nazwa kanału", - "username": "wspaniałanazwakanału" - }, "header": { "error": "Wystąpił błąd podczas zapisywania kanału" }, "help": { - "podcast": "Publikuj swoje odcinki i informuj o tym swoją społeczność na bieżąco.", "discography": "Opublikuj muzykę którą tworzysz, jako fajną dyskografię podzieloną na albumy i single.", + "podcast": "Publikuj swoje odcinki i informuj o tym swoją społeczność na bieżąco.", "podcastFields": "Używane do wypełnienia pól itunes:email oraz itunes:name wymaganych przez pewne platformy jak iTunes czy Spotify.", "username": "Używana w adresie URL i do obserwacji tego kanału we Fediverse. Nie możesz zmienić jej później." }, + "label": { + "category": "Kategoria", + "description": "Opis", + "discography": "Dyskografia wykonawcy", + "email": "Adres e-mail właściciela", + "image": "Obrazek kanału", + "language": "Język", + "name": "Nazwa", + "owner": "Nazwa posiadacza", + "podcast": "Podcasty", + "subcategory": "Podkategoria", + "tags": "Tagi", + "username": "Nazwa we Fediverse" + }, + "legend": { + "purpose": "Do czego używany będzie ten kanał?" + }, "loader": { "loading": "Ładowanie" }, - "legend": { - "purpose": "Do czego używany będzie ten kanał?" + "placeholder": { + "name": "Wspaniała nazwa kanału", + "username": "wspaniałanazwakanału" } }, - "LibraryFollowButton": { - "button": { - "cancel": "Cofnij prośbę o obserwowanie", - "follow": "Obserwuj", - "unfollow": "Przestań obserwować" - } - }, - "EmbedWizard": { - "button": { - "copy": "Kopiuj" - }, - "help": { - "embed": "Wklej ten kod do źródła HTML swojej strony internetowej", - "width": "Pozostaw puste, aby uzyskać elastyczny widget", - "anonymous": "Skontaktuj się z administracją i poproś o zmianę odpowiedniego ustawienia." - }, - "label": { - "embed": "Kod osadzenia", - "height": "Wysokość widgetu", - "width": "Szerokość widgetu" - }, - "header": { - "preview": "Podgląd" - }, - "warning": { - "anonymous": "Udostępnianie nie będzie działało ponieważ ta instancja nie pozwala anonimowym użytkownikom na dostęp do treści." - }, - "message": { - "copy": "Skopiowano tekst do schowka!" + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } epizod | { n } epizody" } }, "ChannelSeries": { @@ -687,28 +423,1055 @@ "showMore": "Pokaż więcej" } }, - "ChannelEntries": { + "EmbedWizard": { + "button": { + "copy": "Kopiuj" + }, + "header": { + "preview": "Podgląd" + }, "help": { - "subscribe": "Powinieneś śledzić ten kanał, aby zobaczyć jego zawartość." + "anonymous": "Skontaktuj się z administracją i poproś o zmianę odpowiedniego ustawienia.", + "embed": "Wklej ten kod do źródła HTML swojej strony internetowej", + "width": "Pozostaw puste, aby uzyskać elastyczny widget" + }, + "label": { + "embed": "Kod osadzenia", + "height": "Wysokość widgetu", + "width": "Szerokość widgetu" + }, + "message": { + "copy": "Skopiowano tekst do schowka!" + }, + "warning": { + "anonymous": "Udostępnianie nie będzie działało ponieważ ta instancja nie pozwala anonimowym użytkownikom na dostęp do treści." } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cofnij prośbę o obserwowanie", + "follow": "Obserwuj", + "unfollow": "Przestań obserwować" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Dodaj do listy odtwarzania…", + "addToQueue": "Dodaj do kolejki odtwarzania", + "discretePlay": "Odtwarzaj", + "episodeDetails": "Szczegóły odcinka", + "hideArtist": "Ukryj zawartość od tego wykonawcy", + "playAlbum": "Odtwarzaj album", + "playArtist": "Odtwarzaj wykonawcę", + "playNext": "Odtwórz następny", + "playNow": "Odtwórz teraz", + "playPlaylist": "Odtwarzaj listę odtwarzania", + "playTrack": "Odtwarzaj utwór", + "playTracks": "Odtwarzaj utwory", + "report": "Zgłoś…", + "startRadio": "Odtwarzaj podobne utwory", + "trackDetails": "Szczegóły utworu" + }, + "title": { + "more": "Więcej…", + "unavailable": "Ten utwór nie jest dostępny w żadnej z bibliotek, do których masz dostęp" + } + }, + "Player": { + "header": { + "player": "Odtwarzacz i jego skróty" + }, + "label": { + "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", + "audioPlayer": "Odtwarzacz multimediów", + "clearQueue": "Wyczyść kolejkę odtwarzania", + "expandQueue": "Rozwiń kolejkę odtwarzania", + "loopingDisabled": "Zapętlanie jest wyłączone. Naciśnij, aby przełączyć na zapętlanie jednego utworu.", + "loopingSingle": "Zapętlanie jednego utworu jest włączone. Naciśnij, aby przełączyć na zapętlanie całej kolejki odtwarzania.", + "loopingWholeQueue": "Zapętlanie całej kolejki jest włączone. Naciśnij, aby wyłączyć zapętlanie.", + "mute": "Wycisz", + "nextTrack": "Następny utwór", + "pause": "Wstrzymaj", + "play": "Odtwarzaj", + "previousTrack": "Poprzedni utwór", + "shuffleQueue": "Wymieszaj swoją kolejkę", + "unmute": "Odcisz" + }, + "meta": { + "position": "{ index } z { length }" + } + }, + "Search": { + "empty": { + "noAlbums": "Nie znaleziono albumu spełniającego Twoje kryteria", + "noArtists": "Nie znaleziono wykonawców spełniających Twoje kryteria" + }, + "header": { + "albums": "Albumy", + "artists": "Artyści", + "search": "Poszukaj trochę muzyki" + }, + "placeholder": { + "search": "Wykonawca, album, utwór…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Przepraszamy, to wyszukiwanie nie zwróciło wyników" + }, + "header": { + "noResults": "Nie znaleziono wyników" + }, + "label": { + "album": "Album", + "artist": "Wykonawca", + "category": { + "federation": "Federacja", + "podcasts": "Podcasty" + }, + "search": "Szukaj treści", + "tag": "Tag", + "track": "Utwór" + }, + "link": { + "fediverse": "Szukaj we fediverse", + "more": "Więcej wyników 🡒", + "rss": "Zasubskrybuj podcast za pomocą RSS" + }, + "placeholder": { + "search": "Szukaj wykonawców, albumów, utworów…" + } + }, + "VolumeControl": { + "button": { + "mute": "Wycisz", + "unmute": "Odcisz" + }, + "label": { + "slider": "Dostosuj głośność" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } utwór | { n } utwory" + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } epizod | { n } epizody", + "tracks": "{ n } utwór | { n } utwory" + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Wyświetl akcje dla utworu" + } + }, + "Modal": { + "button": { + "addToFavorites": "Dodaj do ulubionych", + "addToPlaylist": "Dodaj do listy odtwarzania…", + "addToQueue": "Dodaj do kolejki odtwarzania", + "albumDetails": "Zobacz album", + "artistDetails": "Zobacz wykonawcę", + "channelDetails": "Zobacz kanał", + "episodeDetails": "Szczegóły odcinka", + "playNext": "Odtwórz następny", + "playNow": "Odtwórz teraz", + "removeFromFavorites": "Usuń z ulubionych", + "seriesDetails": "Zobacz serial", + "startRadio": "Odtwarzaj stację radiową", + "trackDetails": "Szczegóły utworu" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Wyświetl akcje dla utworu" + } + }, + "Modal": { + "button": { + "addToFavorites": "Dodaj do ulubionych", + "addToPlaylist": "Dodaj do listy odtwarzania…", + "addToQueue": "Dodaj do kolejki odtwarzania", + "albumDetails": "Zobacz album", + "artistDetails": "Zobacz wykonawcę", + "channelDetails": "Zobacz kanał", + "episodeDetails": "Szczegóły odcinka", + "playNext": "Odtwórz następny", + "playNow": "Odtwórz teraz", + "removeFromFavorites": "Usuń z ulubionych", + "seriesDetails": "Zobacz serial", + "startRadio": "Odtwarzaj stację radiową", + "trackDetails": "Szczegóły utworu" + } + }, + "Table": { + "table": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "title": "Tytuł" + } + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + }, + "empty": { + "noResults": "Niczego tu nie ma" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Stwórz nowy token" + }, + "header": { + "appDetails": "Szczegóły aplikacji", + "editApp": "Edytuj aplikację" + }, + "help": { + "appDetails": "Identyfikator i sekret aplikacji są danymi wrażliwymi i powinny być traktowane jak hasła. Nie powinieneś się nimi z nikim dzielić." + }, + "label": { + "accessToken": "Token dostępowy", + "appId": "Identyfikator aplikacji", + "appSecret": "Sekret aplikacji" + }, + "link": { + "settings": "Wróć do ustawień" + }, + "title": "Edytuj aplikację" + }, + "ApplicationForm": { + "button": { + "create": "Utwórz aplikację", + "update": "Zapisz aplikację" + }, + "header": { + "failure": "Nie udało się zapisać Twoich zmian" + }, + "help": { + "redirectUri": "Użyj \"urn:ietf:wg:oauth:2.0:oob\" jako URI przekierowania, jeśli twoja aplikacja nie jest dostępna w sieci web." + }, + "label": { + "name": "Nazwa", + "redirectUri": "Adres URI przekierowania", + "scopes": { + "description": "Zaznaczenie nadrzędnych zakresów dostępu „Odczyt” lub „Zapis” umożliwia dostęp do wszystkich odpowiednich zakresów podrzędnych.", + "read": { + "description": "Dostęp do odczytu danych użytkownika", + "label": "Odczyt" + }, + "write": { + "description": "Dostęp do zapisu danych użytkownika", + "label": "Zapis" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Wróć do ustawień" + }, + "title": "Utwórz nową aplikację" + }, + "Authorize": { + "button": { + "authorize": "Autoryzuj { app }" + }, + "header": { + "access": "Aplikacja { app } chciałaby uzyskać dostęp do twojego konta Funkwhale", + "allScopes": "Pełen dostęp", + "authorize": "Autoryzuj zewnętrzną aplikację", + "authorizeFailure": "Wystąpił błąd podczas autoryzowania aplikacji", + "fetchFailure": "Wystąpił błąd podczas pobierania danych aplikacji", + "readOnly": "Tylko do odczytu", + "writeOnly": "Tylko do zapisu" + }, + "help": { + "copyCode": "Pokazany zostanie kod do wklejenia w aplikacji.", + "pasteCode": "Wklej następujący kod do aplikacji:", + "redirect": "Zostaniesz przekierowany na { 0 }" + }, + "message": { + "unknownPermissions": "Aplikacja prosi też o następujące nieznane uprawnienia:" + }, + "title": "Autoryzuj aplikację" + }, + "LoginForm": { + "button": { + "login": "Zaloguj się" + }, + "header": { + "loginFailure": "Nie udało się Cię zalogować" + }, + "help": { + "approvalRequired": "Jeżeli niedawno się rejestrowałeś, może być koniecznie odczekanie, aż zespół moderujący rozpatrzy twoją aplikację.", + "invalidCredentials": "Upewnij się, że Twoja kombinacja nazwy użytkownika i hasła są poprawne oraz zweryfikuj poprawność adresu e-mail." + }, + "label": { + "password": "Hasło", + "username": "Nazwa użytkownika lub adres e-mail" + }, + "link": { + "createAccount": "Utwórz konto", + "resetPassword": "Zresetuj hasło" + }, + "placeholder": { + "username": "Wprowadź swoją nazwę użytkownika lub adres e-mail" + } + }, + "Logout": { + "button": { + "logout": "Tak, wyloguj mnie!" + }, + "header": { + "confirm": "Czy na pewno chcesz się wylogować?", + "unauthenticated": "Nie jesteś obecnie zalogowany(-a)" + }, + "link": { + "login": "Zaloguj się!" + }, + "message": { + "loggedIn": "Jesteś obecnie zalogowany jako { username }" + }, + "title": "Wyloguj się" + }, + "Plugin": { + "button": { + "save": "Zapisz", + "scan": "Skanuj" + }, + "description": { + "library": "Biblioteka, do której pliki powinny zostać zaimportowane." + }, + "header": { + "failure": "Wystąpił błąd podczas zapisywania rozszerzenia" + }, + "label": { + "library": "Biblioteka", + "pluginEnabled": "Włączony" + }, + "link": { + "documentation": "Dokumentacja" + } + }, + "Settings": { + "button": { + "delete": "Usuń", + "deleteAccount": "Usuń moje konto…", + "deleteAccountConfirm": "Usuń moje konto", + "disableSubsonic": "Wyłącz dostęp", + "edit": "Edytuj", + "password": "Zmień hasło", + "refresh": "Odśwież", + "remove": "Usuń", + "removeApp": "Usuń aplikację", + "revoke": "Odwołaj", + "revokeAccess": "Odwołaj dostęp", + "update": "Zapisz", + "updateSettings": "Zapisz ustawienia" + }, + "description": { + "authorizedApps": "To jest lista aplikacji, które mają dostęp do informacji Twojego konta.", + "changeEmail": "Zmień adres e-mail powiązany z tym kontem. Na nowy adres zostanie wysłane potwierdzenie.", + "changePassword": { + "paragraph1": "Zmiana Twojego hasła zmieni też hasło do API Subsonic, jeśli je uzyskałeś(-aś).", + "paragraph2": "Będziesz musiał zaktualizować hasło w aplikacjach które go używają." + }, + "contentFilters": "Filtry treści pomogą Ci ukryć treści, których nie chcesz widzieć w serwisie.", + "deleteAccount": "Możesz permanentnie i nieodwracalnie skasować swoje konto i wszystkie powiązane informacje używając pól poniżej. Zostaniesz poproszony o potwierdzenie tej czynności.", + "plugins": "Użyj rozszerzeń do Funkwhale i zyskaj dodatkowe funkcjonalności.", + "yourApps": "To jest lista aplikacji, które zarejestrowałeś(-aś)." + }, + "header": { + "accountFailure": "Nie udało się usunąć Twojego konta", + "accountSettings": "Ustawienia konta", + "authorizedApps": "Autoryzowane aplikacje", + "avatar": "Awatar", + "avatarFailure": "Nie można było zapisać twojego awatara", + "changeEmail": "Zmień swój adres e-mail", + "changePassword": "Zmień swoje hasło", + "contentFilters": "Filtry treści", + "deleteAccount": "Usuń moje konto", + "emailFailure": "Nie udało się zmienić Twojego adresu e-mail", + "hiddenArtists": "Ukryci wykonawcy", + "noApps": "Żadna aplikacja nie jest połączona z Twoim kontem.", + "noPersonalApps": "Nie zarejestrowałeś jeszcze żadnej aplikacji.", + "passwordFailure": "Twoje hasło nie mogło zostać zmienione", + "plugins": "Rozszerzenia", + "settingsUpdated": "Zapisano ustawienia", + "updateFailure": "Twoje ustawienia nie mogły zostać zapisane", + "yourApps": "Twoje aplikacje" + }, + "help": { + "changePassword": "Upewnij się, że Twoje hasło jest poprawne", + "noApps": "Jeśli zezwolisz jakimś zewnętrznym aplikacjom na dostęp do twoich danych, te aplikacje pojawią się tutaj.", + "noPersonalApps": "Zarejestruj jakąś, aby zintegrować Funkwhale z innymi aplikacjami." + }, + "label": { + "avatar": "Awatar", + "currentPassword": "Aktualne hasło", + "newEmail": "Nowy adres e-mail", + "newPassword": "Nowe hasło", + "password": "Hasło" + }, + "link": { + "managePlugins": "Zarządzaj rozszerzeniami", + "newApp": "Zarejestruj nową aplikację" + }, + "message": { + "confirmDelete": "Żądanie o usunięcie konta zostało przesłane. Twoje konto i powiązane z nim treści zostaną wkrótce usunięte", + "currentEmail": "Twój obecny adres e-mail to { email }." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Zostaniesz wylogowany i będziesz musiał zalogować się nowym hasłem", + "subsonic": "Twoje hasło do API Subsonic zostanie zmienione na nowe, losowe i zostaniesz wylogowany z urządzeń korzystających ze starego hasła do API Subsonic", + "warning": "Zmiana hasła będzie miała następujące konsekwencje:" + }, + "header": "Zmienić Twoje hasło?" + }, + "deleteAccount": { + "content": { + "warning": "To jest nieodwracalne i permanentnie usunie Twoje dane z naszych serwerów. Zostaniesz natychmiast wylogowany(-a)." + }, + "header": "Czy na pewno chcesz usunąć swoje konto?" + }, + "deleteApp": { + "content": { + "warning": "To permanentnie usunie aplikację i wszystkie powiązane tokeny." + }, + "header": "Usunąć aplikację „{ application }”?" + }, + "revokeApp": { + "content": { + "warning": "To uniemożliwi tej aplikacji dostęp do usługi w Twoim imieniu." + }, + "header": "Czy odwołać dostęp dla aplikacji „{ application }”?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data utworzenia", + "name": "Nazwa" + } + }, + "authorizedApps": { + "header": { + "application": "Aplikacja", + "permissions": "Uprawnienia" + } + }, + "yourApps": { + "header": { + "application": "Aplikacja", + "creationDate": "Data utworzenia", + "scopes": "Zakresy dostępu" + } + } + }, + "title": "Ustawienia konta", + "warning": { + "deleteAccount": "Twoje konto zostanie usunięte z naszych serwerów w ciągu kilku minut. Poinformujemy też inne serwery, które mogą mieć kopię twoich danych, aby przystąpiły do usuwania. Weź pod uwagę, że niektóre serwery mogą być wyłączone, albo nie chcieć współpracować." + } + }, + "SignupForm": { + "button": { + "create": "Utwórz konto" + }, + "header": { + "login": "Zaloguj się na swoje konto Funkwhale", + "signupFailure": "Twoje konto nie mogło zostać utworzone." + }, + "label": { + "email": "Adres e-mail", + "password": "Hasło", + "username": "Nazwa użytkownika" + }, + "message": { + "accountCreated": "Twoje konto zostało stworzone z powodzeniem. Zweryfikuj swój adres e-mail przed próbą logowania.", + "awaitingReview": "Twoja aplikacja o konto została przesłana. Zostaniesz poinformowany za pomocą wiadomości e-mail kiedy zespół moderacyjny ją rozpatrzy.", + "registrationClosed": "Publiczna rejestracja na tej instancji nie jest aktywna. Potrzebujesz zaproszenia, aby się zarejestrować.", + "requiresReview": "Rejestrowanie się na tej instancji jest dozwolone, ale wymaga zatwierdzenia przez jednego z moderatorów." + }, + "placeholder": { + "email": "Wprowadź swój adres e-mail", + "invitation": "Wprowadź swój kod zaproszenia (wielkość znaków nie ma znaczenia)", + "username": "Wprowadź swoją nazwę użytkownika" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Wyłącz dostęp", + "confirmNewPassword": "Poproś o hasło", + "disable": "Wyłącz dostęp Subsonic", + "newPassword": "Poproś o nowe hasło" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsługującymi API Subsonic.", + "paragraph2": "Możesz użyć tego, aby cieszyć się swoją muzyką w trybie offline, na przykład na smartfonie czy tablecie.", + "paragraph3": "Korzystanie z Funkwhale za pomocą tych aplikacji wymaga jednak oddzielnego hasła, które możesz ustawić poniżej." + } + }, + "header": { + "error": "Błąd", + "subsonic": "Hasło do API Subsonic" + }, + "label": { + "subsonicField": "Twoje hasło do API Subsonic" + }, + "link": { + "apps": "Odkryj, jak korzystać z Funkwhale za pomocą innych aplikacji" + }, + "message": { + "accessDisabled": "Dostęp wyłączony", + "passwordUpdated": "Zaktualizowano hasło", + "unavailable": "API Subsonic nie jest dostępne na tej instancji Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "To całkowicie wyłączy dostęp do API Subsonic z tego konta." + }, + "header": "Wyłączyć dostęp do API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "To wyloguje Cię z urządzeń na których jesteś obecnie zalogowany." + }, + "header": "Poprosić o nowe hasło do API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Wystąpił błąd podczas tworzenia" + }, + "label": { + "albumTitle": "Tytuł" + } + }, + "AlbumModal": { + "button": { + "cancel": "Anuluj", + "create": "Utwórz" + }, + "header": { + "newAlbum": "Nowy album", + "newSeries": "Nowy serial" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Seriale" + }, + "meta": { + "tracks": "{ n } utwór | { n } utwory" + }, + "option": { + "none": "Nic" + } + }, + "LicenseSelect": { + "label": { + "license": "Licencja" + }, + "link": { + "license": "O tej licencji" + }, + "option": { + "none": "Nic" + } + }, + "SubscribeButton": { + "help": { + "auth": "Musisz być zalogowany, aby obserwować ten kanał" + }, + "title": { + "subscribe": "Obserwuj", + "unsubscribe": "Przestań obserwować" + } + }, + "UploadForm": { + "button": { + "edit": "Edytuj", + "ignore": "Ignoruj", + "remove": "Usuń", + "resume": "Wznów", + "retry": "Spróbuj ponownie" + }, + "description": { + "extensions": "Wspierane rozszerzenia: { extensions }" + }, + "header": { + "error": "Wystąpił błąd podczas publikowania" + }, + "help": { + "license": "Wybierz na jakiej licencji będą dostępne zamieszczone treści, aby zapewnić pewne wolności swojej publice." + }, + "label": { + "channel": "Kanał", + "openBrowser": "Przeglądaj…" + }, + "message": { + "dragAndDrop": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania", + "pending": "Masz jakieś pliki oczekujące na publikację." + }, + "status": { + "errored": "Zakończono błędem", + "pending": "W toku", + "uploading": "Przesyłanie" + }, + "warning": { + "quota": "Nie masz więcej wolnego miejsca na swoje pliki. Skontaktuj się z moderatorem celem zwiększenia przydziału lub usuń trochę treści." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Opis", + "image": "Obrazek utworu", + "position": "Pozycja", + "tags": "Tagi", + "title": "Tytuł" + } + }, + "UploadModal": { + "button": { + "cancel": "Anuluj", + "close": "Zamknij", + "finishLater": "Ukończ później", + "next": "Następny krok", + "previous": "Poprzedni krok", + "publish": "Opublikuj", + "update": "Zaktualizuj" + }, + "header": { + "processing": "Przetwarzanie przesłanych plików", + "publish": "Publikuj audio", + "uploadDetails": "Szczegóły pliku", + "uploadFiles": "Pliki do przesłania" + }, + "meta": { + "files": "{ n } plik | { n } pliki", + "quota": "Pozostałe wolne miejsce:" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Wybrano { n } element | Wybrano { n } elementy", + "go": "Wykonaj", + "launch": "Wykonaj", + "refresh": "Odśwież zawartość tabeli", + "select": "Wybierz", + "selectAll": "Zaznacz wszystkie elementy", + "selectCurrentPage": "Zaznacz tylko obecną stronę", + "selectElement": "Zaznacz jeden element | Zaznacz wszystkie { n } elementy", + "selected": "Wybrano { n } z { total } | Wybrano { n } z { total }" + }, + "header": { + "error": "Wystąpił błąd podczas aplikowania działania" + }, + "label": { + "actions": "Działania", + "performAction": "Wykonaj akcje" + }, + "message": { + "needsRefresh": "Treść została zaktualizowana - odśwież, aby zobaczyć aktualną treść", + "success": "Działanie { action } zostało pomyślnie wykonane na { n } elemencie | Działanie { action } zostało pomyślnie wykonane na { n } elementach" + }, + "modal": { + "performAction": { + "content": { + "warning": "Może to wpływać na wiele rzeczy lub mieć nieodwracalne skutki, sprawdź dwukrotnie czy to na pewno to, czego chcesz." + }, + "header": "Czy chcesz wykonać działanie { action } na { n } elemencie? | Czy chcesz wykonać działanie { action } na { n } elementach?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Usuń" + }, + "header": { + "failure": "Nie można było zapisać twojego załącznika" + }, + "help": { + "upload": "PNG lub JPG. Rozdzielczość powinna mieścić się w przedziale między 1400x1400px a 3000x3000px. Maksymalny rozmiar pliku to 5 MB." + }, + "label": { + "upload": "Prześlij nowy obraz…" + }, + "loader": { + "uploading": "Przesyłanie pliku…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Zwiń", + "expand": "Rozwiń" + } + }, + "ContentForm": { + "button": { + "preview": "Podgląd", + "write": "Zapisz" + }, + "empty": { + "noContent": "Nie ma nic do podglądu." + }, + "help": { + "markdown": "Formatowanie za pomocą składni Markdown jest wspierane." + }, + "placeholder": { + "input": "Napisz tutaj kilka słów…" + } + }, + "CopyInput": { + "button": { + "copy": "Kopiuj" + }, + "message": { + "success": "Skopiowano tekst do schowka!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Anuluj", + "confirm": "Potwierdź" + }, + "header": { + "confirm": "Czy chcesz potwierdzić to działanie?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } godz. { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Odśwież" + }, + "header": { + "noResults": "Nic nie znaleziono." + } + }, + "ExpandableDiv": { + "button": { + "less": "Pokaż mniej", + "more": "Pokaż więcej" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Wyczyść" + }, + "label": { + "search": "Szukaj" + }, + "placeholder": { + "search": "Szukaj…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Nie masz dostępu!" + }, + "header": { + "unauthenticated": "Nie uwierzytelniono" + }, + "link": { + "login": "Zaloguj się", + "signup": "Zarejestruj się" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Anuluj", + "edit": "Edytuj", + "less": "Pokaż mniej", + "more": "Pokaż więcej", + "update": "Zapisz opis" + }, + "empty": { + "noDescription": "Żaden opis nie jest dostępny" + }, + "header": { + "failure": "Wystąpił błąd podczas aktualizowania opisu" + } + }, + "UserMenu": { + "label": { + "language": "Język", + "shortcuts": "Skróty klawiszowe", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "chat": "Pokój czatowy", + "docs": "Dokumentacja", + "forum": "Forum dyskusyjne", + "git": "Zgłoś problem", + "login": "Zaloguj się", + "logout": "Wyloguj się", + "notifications": "Powiadomienia", + "profile": "Profil", + "settings": "Ustawienia", + "signup": "Zarejestruj się", + "support": "Podręcznik pomocy" + } + }, + "UserModal": { + "button": { + "switchInstance": "Skorzystaj z innej instancji" + }, + "header": { + "options": "Opcje" + }, + "label": { + "language": "Język", + "shortcuts": "Skróty klawiszowe", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "chat": "Pokój czatowy", + "forum": "Forum dyskusyjne", + "git": "Zgłoś problem", + "login": "Zaloguj się", + "logout": "Wyloguj się", + "notifications": "Powiadomienia", + "profile": "Profil", + "settings": "Ustawienia", + "signup": "Zarejestruj się", + "support": "Podręcznik pomocy" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Nie dodałeś jeszcze żadnych utworów do Twoich ulubionych" + }, + "header": { + "favorites": "{ n } polubienie | { n } polubienia" + }, + "link": { + "library": "Przeglądaj bibliotekę" + }, + "loader": { + "loading": "Ładowanie Twoich ulubionych…" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "title": "Twoje ulubione" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Dodaj do ulubionych", + "remove": "Usuń z ulubionych" + }, + "label": { + "inFavorites": "W ulubionych" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Zamknij", + "reload": "Zamknij i odśwież stronę" + }, + "description": { + "failure": "Podczas próby odświeżenia danych wystąpił błąd:", + "pending": "Serwer nie obsłużył żądania odświeżenia na czas. Zostanie ono przetworzone później.", + "skipped": "Zdalny serwer odpowiedział, ale zwrócił nie wspierane przez Funkwhale dane.", + "success": "Dane zostały pomyślnie odświeżone ze zdalnego serwera." + }, + "header": { + "failure": "Błąd odswieżania", + "pending": "Odświeżanie w toku", + "refresh": "Odświeżanie obiektu z serwera zdalnego…", + "saveFailure": "Wystąpił błąd podczas zapisywania ustawień", + "skipped": "Odświeżanie zostało pominięte", + "success": "Odświeżanie zakończone sukcesem" + }, + "loader": { + "awaitingResult": "Ładowanie zdalnych wyników…", + "fetchRequest": "Pobieranie…" + }, + "table": { + "error": { + "label": { + "detail": "Szczegóły błędu", + "type": "Typ błędu" + }, + "value": { + "connectionError": "Nie można połączyć się ze zdalnym serwerem", + "httpError": "Wystąpił błąd HTTP podczas kontaktowania się ze zdalnym serwerem", + "httpStatus": "Zdalny serwer odpowiedział ze statusem HTTP { status }", + "invalidAttributesError": "Dane zwrócone przez serwer zdalny miały nieprawidłowe lub brakujące atrybuty", + "invalidJsonError": "Zdalny serwer zwrócił dane nie będące poprawnym JSON lub JSON-LD", + "timeoutError": "Zdalny serwer nie odpowiedział wystarczająco szybko", + "unknownError": "Nieznany błąd" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Pokaż więcej" + }, + "empty": { + "noMatch": "Nie znaleziono pasującej biblioteki." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Kopiuj" + }, + "message": { + "copy": "Skopiowano tekst do schowka!" + }, + "title": "Pokaż/ukryj hasło" } }, "library": { "AlbumBase": { + "link": { + "addDescription": "Dodaj opis…" + }, "meta": { "episodes": "{ n } epizod | { n } epizody", "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "addDescription": "Dodaj opis…" } }, - "ArtistBase": { - "meta": { - "tracks": "{ n } utwór w | { n } utwory w", - "albums": "{ n } albumie | { n } albumach" + "AlbumDetail": { + "description": { + "libraries": "Ten album występuje w następujących bibliotekach:" }, - "title": "Wykonawca", + "header": { + "episodes": "Odcinki", + "libraries": "Powiązane biblioteki", + "tracks": "Utwory" + }, + "meta": { + "volume": "Płyta { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Anuluj", + "delete": "Usuń…", + "edit": "Edytuj", + "embed": "Osadź", + "more": "Więcej…" + }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "musicbrainz": "Zobacz na MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten album zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten album?" + }, + "embed": { + "header": "Osadź ten album na swojej stronie internetowej" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Edytuj ten album", + "suggest": "Zasugeruj zmiany w tym albumie" + }, + "message": { + "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." + } + }, + "Albums": { + "button": { + "search": "Szukaj" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj albumy" + }, + "label": { + "search": "Szukaj", + "tags": "Tagi" + }, + "link": { + "addMusic": "Dodaj trochę muzyki" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "Wprowadź tytuł albumu…" + }, + "title": "Albumy" + }, + "ArtistBase": { "button": { "cancel": "Anuluj", "edit": "Edytuj", @@ -716,76 +1479,186 @@ "more": "Więcej…", "play": "Odtwarzaj wszystkie albumy" }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "musicbrainz": "Zobacz na MusicBrainz", + "wikipedia": "Wyszukaj na Wikipedii" + }, + "meta": { + "albums": "{ n } albumie | { n } albumach", + "tracks": "{ n } utwór w | { n } utwory w" + }, "modal": { "embed": { "header": "Osadź prace tego wykonawcy na swojej stronie internetowej" } }, + "title": "Wykonawca" + }, + "ArtistDetail": { + "button": { + "filter": "Usuń filtr", + "more": "Załaduj więcej…" + }, + "description": { + "library": "Utwory tego wykonawcy występują w następujących bibliotekach:" + }, + "header": { + "album": "Albumy tego wykonawcy", + "library": "Powiązane biblioteki", + "track": "Nowe utwory tego wykonawcy" + }, "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "wikipedia": "Wyszukaj na Wikipedii", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }", - "musicbrainz": "Zobacz na MusicBrainz" + "filter": "Przejrzyj moje filtry" + }, + "message": { + "filter": "Obecnie ukrywasz treści powiązane z tym wykonawcą." } }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } utwór zgodny z wybranymi filtrami | { n } utwory zgodne z wybranymi filtrami", - "builder": "Budowanie", - "created": "Utworzono stację radiową", - "updated": "Zaktualizowano stację radiową" + "ArtistEdit": { + "header": { + "edit": "Edytuj tego wykonawcę", + "suggest": "Zasugeruj zmiany w tym wykonawcy" + }, + "message": { + "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." + } + }, + "Artists": { + "button": { + "search": "Szukaj", + "upload": "Dodaj trochę muzyki" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj wykonawców" + }, + "label": { + "excludeCompilation": "Wyklucz wykonawców składanek", + "search": "Nazwa wykonawcy", + "tags": "Tagi" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" }, - "table": { - "filter": { - "header": { - "actions": "Działania", - "candidates": "Kandydaci", - "config": "Konfiguracja", - "exclude": "Wyklucz", - "name": "Nazwa filtra" - } - } + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "Szukaj…" + }, + "title": "Artyści" + }, + "EditCard": { + "button": { + "approve": "Zatwierdź", + "delete": "Usuń", + "reject": "Odrzuć" + }, + "header": { + "modification": "Edycja { id }" + }, + "link": { + "track": "Utwór #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Sugestia zostanie całkowicie usunięta. To działanie jest nieodwracalne." }, - "button": { - "filter": "Dodaj filtr", - "save": "Zapisz" - }, - "label": { - "filter": "Dodaj filtry, aby dostosować swoją stację radiową", - "description": "Opis", - "public": "Wyświetlaj publicznie", - "name": "Nazwa stacji radiowej" - }, - "placeholder": { - "description": "Mój wspaniały opis", - "name": "Moja wspaniała stacja radiowa" - }, - "title": "Tworzenie stacji radiowej", - "option": { - "filter": "Wybierz filtr" - }, - "description": { - "builder": "Możesz użyć tego interfejsu, aby utworzyć własną stację radiową, która będzie odtwarzać tylko utwory pasujące do Twoich kryteriów." + "delete": { + "header": "Usunąć tę sugestię?" } }, - "Filter": { - "cancelButton": "Anuluj", - "excludeLabel": "Wyklucz", - "removeButton": "Usuń", - "matchingTracksModalHeader": "Utwory zgodne z filtrem" + "status": { + "applied": "Zatwierdzono i zastosowano", + "approved": "Zatwierdzono", + "pending": "Oczekuje na rozpatrzenie", + "rejected": "Odrzucono" + }, + "table": { + "update": { + "header": { + "field": "Pole", + "newValue": "Nowa wartość", + "oldValue": "Poprzednia wartość" + }, + "notApplicable": "Niedostępne" + } + } + }, + "EditForm": { + "button": { + "cancel": "Anuluj", + "clear": "Wyczyść", + "new": "Prześlij kolejne zmiany", + "reset": "Przywróć wartość domyślną", + "showAll": "Pokaż wszystkie edycje", + "showUnreviewed": "Ogranicz do nierozpatrzonych edycji", + "submit": "Prześlij i zastosuj zmiany", + "suggest": "Prześlij sugestię" + }, + "empty": { + "suggestEdit": "Zaproponuj zmiany przy użyciu poniższego formularza." + }, + "header": { + "failure": "Wystąpił błąd podczas przesyłania zmian", + "recentEdits": "Ostatnie edycje", + "success": "Twoje zmiany zostały przesłane pomyślnie.", + "unreviewed": "Ostatnie propozycje zmian czekające na rozpatrzenie" + }, + "label": { + "summary": "Podsumowanie (opcjonalne)" + }, + "message": { + "noPermission": "Nie masz uprawnień do edycji tego obiektu, ale możesz zasugerować zmiany. Po przesłaniu sugestie zostaną rozpatrzone przez moderatorów." + }, + "notApplicable": "Niedostępne", + "placeholder": { + "summary": "Kilka słów opisujących twoje zmiany." } }, "FileUpload": { - "tooltip": { - "network": "Wystąpił błąd sieciowy podczas przesyłania tego pliku", - "size": "Nie można było przesłać tego pliku. Upewnij się, że nie jest zbyt duży", - "extension": "Nieprawidłowy typ pliku. Upewnij się, że przesyłasz plik audio. Wspierane typy plików to { extensions }", - "retry": "Spróbuj ponownie", - "denied": "Plik odrzucony, upewnij się że nie jest zbyt duży i że nie przekroczyłeś swojego limitu", - "timeout": "Przesyłanie zajęło zbyt długo, spróbuj jeszcze raz" + "button": { + "cancel": "Anuluj", + "retry": "Spróbuj przesłać ponownie nieudane" + }, + "description": { + "import": "Rezultaty twojego importu:", + "previousImport": "Rezultaty twojego poprzedniego importu:" + }, + "header": { + "failure": "Wystąpił błąd podczas importowania", + "local": "Wgraj muzykę ze swojego urządzenia", + "server": "Stan importu", + "status": "Stan importu" + }, + "label": { + "extensions": "Wspierane rozszerzenia: { extensions }", + "remainingSpace": "Pozostałe wolne miejsce", + "uploadWidget": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania" + }, + "link": { + "picard": "Polecamy używać w tym celu Picarda.", + "processing": "Przetwarzanie", + "uploading": "Przesyłanie" + }, + "message": { + "local": { + "copyright": "Nie wgrywasz plików chronionych prawem autorskim do publicznej biblioteki, w przeciwnym wypadku możesz łamać prawo", + "format": "Pliki, które przesyłasz, są w formacie OGG, FLAC, MP3 lub AIFF", + "message": "Za chwilę dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij się że:", + "tag": "Pliki muzyczne które przesyłasz posiadają poprawne metadane." + } }, "table": { "upload": { @@ -802,114 +1675,96 @@ } } }, + "tooltip": { + "denied": "Plik odrzucony, upewnij się że nie jest zbyt duży i że nie przekroczyłeś swojego limitu", + "extension": "Nieprawidłowy typ pliku. Upewnij się, że przesyłasz plik audio. Wspierane typy plików to { extensions }", + "network": "Wystąpił błąd sieciowy podczas przesyłania tego pliku", + "retry": "Spróbuj ponownie", + "size": "Nie można było przesłać tego pliku. Upewnij się, że nie jest zbyt duży", + "timeout": "Przesyłanie zajęło zbyt długo, spróbuj jeszcze raz" + } + }, + "FsBrowser": { "button": { - "cancel": "Anuluj", - "retry": "Spróbuj przesłać ponownie nieudane" - }, - "label": { - "uploadWidget": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania", - "remainingSpace": "Pozostałe wolne miejsce", - "extensions": "Wspierane rozszerzenia: { extensions }" - }, + "import": "Import" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Importowanie jeszcze się nie rozpoczęło" + } + }, + "Home": { "header": { - "failure": "Wystąpił błąd podczas importowania", - "server": "Stan importu", - "status": "Stan importu", - "local": "Wgraj muzykę ze swojego urządzenia" + "newChannels": "Nowe kanały", + "playlists": "Listy odtwarzania", + "recentlyAdded": "Ostatnio dodane", + "recentlyFavorited": "Ostatnio polubione", + "recentlyListened": "Ostatnio odsłuchane" }, - "link": { - "processing": "Przetwarzanie", - "uploading": "Przesyłanie", - "picard": "Polecamy używać w tym celu Picarda." + "title": "Biblioteka" + }, + "ImportStatusModal": { + "button": { + "close": "Zamknij" }, - "description": { - "import": "Rezultaty twojego importu:", - "previousImport": "Rezultaty twojego poprzedniego importu:" - }, - "message": { - "local": { - "format": "Pliki, które przesyłasz, są w formacie OGG, FLAC, MP3 lub AIFF", - "tag": "Pliki muzyczne które przesyłasz posiadają poprawne metadane.", - "message": "Za chwilę dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij się że:", - "copyright": "Nie wgrywasz plików chronionych prawem autorskim do publicznej biblioteki, w przeciwnym wypadku możesz łamać prawo" + "error": { + "importFailure": "Wystąpił błąd podczas przetwarzania przesłanego pliku. Więcej informacji znajdziesz poniżej.", + "invalidMetadata": { + "label": "Nieprawidłowe metadane", + "message": "Metadane zawarte w tym pliku są nieprawidłowe lub brakuje części wymaganych informacji." + }, + "unknownError": { + "label": "Nieznany błąd", + "message": "Wystąpił nieznany błąd" } - } - }, - "EditForm": { - "placeholder": { - "summary": "Kilka słów opisujących twoje zmiany." - }, - "button": { - "cancel": "Anuluj", - "clear": "Wyczyść", - "reset": "Przywróć wartość domyślną", - "showUnreviewed": "Ogranicz do nierozpatrzonych edycji", - "showAll": "Pokaż wszystkie edycje", - "submit": "Prześlij i zastosuj zmiany", - "new": "Prześlij kolejne zmiany", - "suggest": "Prześlij sugestię" }, "header": { - "failure": "Wystąpił błąd podczas przesyłania zmian", - "recentEdits": "Ostatnie edycje", - "unreviewed": "Ostatnie propozycje zmian czekające na rozpatrzenie", - "success": "Twoje zmiany zostały przesłane pomyślnie." + "importDetail": "Szczegóły importu" }, - "notApplicable": "Niedostępne", - "empty": { - "suggestEdit": "Zaproponuj zmiany przy użyciu poniższego formularza." - }, - "label": { - "summary": "Podsumowanie (opcjonalne)" + "link": { + "documentation": "Przeczytaj naszą dokumentację dotyczącą tego błędu", + "support": "Otwórz wątek pomocy (do wiadomości dołącz informacje dla programistów)" }, "message": { - "noPermission": "Nie masz uprawnień do edycji tego obiektu, ale możesz zasugerować zmiany. Po przesłaniu sugestie zostaną rozpatrzone przez moderatorów." + "importDetail": "Przetwarzanie przesłanych plików nadal jest w toku.", + "importSuccess": "Plik został pomyślnie przetworzony przez serwer." + }, + "table": { + "error": { + "debug": "Informacje dla programistów", + "errorDetail": "Szczegóły błędu", + "errorType": "Typ błędu", + "help": "Uzyskiwanie pomocy" + } + }, + "warning": { + "importSkipped": "Plik został pominięty, ponieważ podobny utwór jest już dostępny w jednej z bibliotek." } }, - "Albums": { - "link": { - "addMusic": "Dodaj trochę muzyki" - }, - "title": "Albumy", - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj albumy" - }, - "placeholder": { - "search": "Wprowadź tytuł albumu…" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, - "pagination": { - "results": "Wyniki na stronie" - }, - "label": { + "Podcasts": { + "button": { + "cancel": "Anuluj", + "channel": "Utwórz nowy kanał", + "feed": "Zasubskrybuj kanał RSS", "search": "Szukaj", - "tags": "Tagi" + "subscribe": "Obserwuj" }, - "button": { - "search": "Szukaj" - } - }, - "Artists": { - "button": { - "upload": "Dodaj trochę muzyki", - "search": "Szukaj" + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj podcasty" }, "label": { - "search": "Nazwa wykonawcy", - "excludeCompilation": "Wyklucz wykonawców składanek", + "search": "Tytuł podcastu", "tags": "Tagi" }, - "title": "Artyści", + "modal": { + "subscription": { + "header": "Subskrypcja" + } + }, "ordering": { "direction": { "ascending": "Rosnąco", @@ -918,20 +1773,107 @@ }, "label": "Porządkowanie" }, - "header": { - "browse": "Przeglądaj wykonawców" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, "pagination": { "results": "Wyniki na stronie" }, "placeholder": { "search": "Szukaj…" + }, + "title": "Podcasty" + }, + "Radios": { + "button": { + "add": "Utwórz stację radiową", + "create": "Utwórz własną stację radiową" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj stacje radiowe", + "instance": "Stacje radiowe instancji", + "user": "Stacje radiowe użytkowników" + }, + "label": { + "search": "Szukaj" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "Wprowadź nazwę stacji radiowej…" + }, + "title": "Stacje radiowe" + }, + "TagDetail": { + "header": { + "channels": "Kanały", + "tracks": "Utwory" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "moderation": "Otwórz w interfejsie moderacyjnym" } }, + "TagSelector": { + "placeholder": { + "search": "Szukaj…" + } + }, + "TrackBase": { + "button": { + "cancel": "Anuluj", + "delete": "Usuń…", + "download": "Pobierz", + "edit": "Edytuj", + "embed": "Osadź", + "more": "Więcej…", + "play": "Odtwarzaj" + }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "wikipedia": "Wyszukaj na Wikipedii" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten utwór zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten utwór?" + }, + "embed": { + "header": "Osadź ten utwór na swojej stronie internetowej" + } + }, + "title": "Utwór" + }, "TrackDetail": { + "description": { + "library": "Ten utwór występuje w następujących bibliotekach:" + }, + "header": { + "episode": "Szczegóły odcinka", + "library": "Powiązane biblioteki", + "playlists": "Powiązane listy odtwarzania", + "release": "Szczegóły wydania", + "track": "Szczegóły utworu" + }, + "link": { + "musicbrainz": "Zobacz na MusicBrainz" + }, + "notApplicable": "Niedostępne", "table": { "release": { "album": "Album", @@ -951,272 +1893,6 @@ "duration": "Czas trwania", "size": "Rozmiar" } - }, - "header": { - "episode": "Szczegóły odcinka", - "library": "Powiązane biblioteki", - "playlists": "Powiązane listy odtwarzania", - "release": "Szczegóły wydania", - "track": "Szczegóły utworu" - }, - "notApplicable": "Niedostępne", - "description": { - "library": "Ten utwór występuje w następujących bibliotekach:" - }, - "link": { - "musicbrainz": "Zobacz na MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albumy", - "artists": "Artyści", - "moderation": "Otwórz w interfejsie moderacyjnym" - }, - "header": { - "channels": "Kanały", - "tracks": "Utwory" - } - }, - "ArtistDetail": { - "header": { - "album": "Albumy tego wykonawcy", - "track": "Nowe utwory tego wykonawcy", - "library": "Powiązane biblioteki" - }, - "button": { - "more": "Załaduj więcej…", - "filter": "Usuń filtr" - }, - "link": { - "filter": "Przejrzyj moje filtry" - }, - "description": { - "library": "Utwory tego wykonawcy występują w następujących bibliotekach:" - }, - "message": { - "filter": "Obecnie ukrywasz treści powiązane z tym wykonawcą." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Wystąpił błąd podczas przetwarzania przesłanego pliku. Więcej informacji znajdziesz poniżej.", - "unknownError": { - "message": "Wystąpił nieznany błąd", - "label": "Nieznany błąd" - }, - "invalidMetadata": { - "label": "Nieprawidłowe metadane", - "message": "Metadane zawarte w tym pliku są nieprawidłowe lub brakuje części wymaganych informacji." - } - }, - "button": { - "close": "Zamknij" - }, - "table": { - "error": { - "debug": "Informacje dla programistów", - "errorDetail": "Szczegóły błędu", - "errorType": "Typ błędu", - "help": "Uzyskiwanie pomocy" - } - }, - "header": { - "importDetail": "Szczegóły importu" - }, - "link": { - "support": "Otwórz wątek pomocy (do wiadomości dołącz informacje dla programistów)", - "documentation": "Przeczytaj naszą dokumentację dotyczącą tego błędu" - }, - "message": { - "importDetail": "Przetwarzanie przesłanych plików nadal jest w toku.", - "importSuccess": "Plik został pomyślnie przetworzony przez serwer." - }, - "warning": { - "importSkipped": "Plik został pominięty, ponieważ podobny utwór jest już dostępny w jednej z bibliotek." - } - }, - "EditCard": { - "button": { - "approve": "Zatwierdź", - "delete": "Usuń", - "reject": "Odrzuć" - }, - "status": { - "approved": "Zatwierdzono", - "applied": "Zatwierdzono i zastosowano", - "pending": "Oczekuje na rozpatrzenie", - "rejected": "Odrzucono" - }, - "modal": { - "delete": { - "header": "Usunąć tę sugestię?" - }, - "content": { - "warning": "Sugestia zostanie całkowicie usunięta. To działanie jest nieodwracalne." - } - }, - "table": { - "update": { - "header": { - "field": "Pole", - "newValue": "Nowa wartość", - "oldValue": "Poprzednia wartość" - }, - "notApplicable": "Niedostępne" - } - }, - "header": { - "modification": "Edycja { id }" - }, - "link": { - "track": "Utwór #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj podcasty" - }, - "button": { - "cancel": "Anuluj", - "channel": "Utwórz nowy kanał", - "search": "Szukaj", - "subscribe": "Obserwuj", - "feed": "Zasubskrybuj kanał RSS" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, - "label": { - "search": "Tytuł podcastu", - "tags": "Tagi" - }, - "title": "Podcasty", - "pagination": { - "results": "Wyniki na stronie" - }, - "placeholder": { - "search": "Szukaj…" - }, - "modal": { - "subscription": { - "header": "Subskrypcja" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj stacje radiowe", - "instance": "Stacje radiowe instancji", - "user": "Stacje radiowe użytkowników" - }, - "button": { - "add": "Utwórz stację radiową", - "create": "Utwórz własną stację radiową" - }, - "placeholder": { - "search": "Wprowadź nazwę stacji radiowej…" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, - "title": "Stacje radiowe", - "pagination": { - "results": "Wyniki na stronie" - }, - "label": { - "search": "Szukaj" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Anuluj", - "delete": "Usuń…", - "edit": "Edytuj", - "embed": "Osadź", - "more": "Więcej…" - }, - "modal": { - "delete": { - "header": "Usunąć ten album?", - "content": { - "warning": "Ten album zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź ten album na swojej stronie internetowej" - } - }, - "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }", - "musicbrainz": "Zobacz na MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Anuluj", - "delete": "Usuń…", - "download": "Pobierz", - "edit": "Edytuj", - "embed": "Osadź", - "more": "Więcej…", - "play": "Odtwarzaj" - }, - "modal": { - "delete": { - "header": "Usunąć ten utwór?", - "content": { - "warning": "Ten utwór zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź ten utwór na swojej stronie internetowej" - } - }, - "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "wikipedia": "Wyszukaj na Wikipedii", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }" - }, - "title": "Utwór" - }, - "AlbumEdit": { - "header": { - "edit": "Edytuj ten album", - "suggest": "Zasugeruj zmiany w tym albumie" - }, - "message": { - "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." - } - }, - "ArtistEdit": { - "header": { - "edit": "Edytuj tego wykonawcę", - "suggest": "Zasugeruj zmiany w tym wykonawcy" - }, - "message": { - "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." } }, "TrackEdit": { @@ -1228,49 +1904,67 @@ "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." } }, - "AlbumDetail": { - "header": { - "episodes": "Odcinki", - "tracks": "Utwory", - "libraries": "Powiązane biblioteki" + "radios": { + "Builder": { + "button": { + "filter": "Dodaj filtr", + "save": "Zapisz" + }, + "description": { + "builder": "Możesz użyć tego interfejsu, aby utworzyć własną stację radiową, która będzie odtwarzać tylko utwory pasujące do Twoich kryteriów." + }, + "header": { + "builder": "Budowanie", + "created": "Utworzono stację radiową", + "matches": "{ n } utwór zgodny z wybranymi filtrami | { n } utwory zgodne z wybranymi filtrami", + "updated": "Zaktualizowano stację radiową" + }, + "label": { + "description": "Opis", + "filter": "Dodaj filtry, aby dostosować swoją stację radiową", + "name": "Nazwa stacji radiowej", + "public": "Wyświetlaj publicznie" + }, + "option": { + "filter": "Wybierz filtr" + }, + "placeholder": { + "description": "Mój wspaniały opis", + "name": "Moja wspaniała stacja radiowa" + }, + "table": { + "filter": { + "header": { + "actions": "Działania", + "candidates": "Kandydaci", + "config": "Konfiguracja", + "exclude": "Wyklucz", + "name": "Nazwa filtra" + } + } + }, + "title": "Tworzenie stacji radiowej" }, - "description": { - "libraries": "Ten album występuje w następujących bibliotekach:" - }, - "meta": { - "volume": "Płyta { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Import" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Importowanie jeszcze się nie rozpoczęło" - } - }, - "Home": { - "title": "Biblioteka", - "header": { - "newChannels": "Nowe kanały", - "playlists": "Listy odtwarzania", - "recentlyAdded": "Ostatnio dodane", - "recentlyFavorited": "Ostatnio polubione", - "recentlyListened": "Ostatnio odsłuchane" - } - }, - "TagSelector": { - "placeholder": { - "search": "Szukaj…" + "Filter": { + "cancelButton": "Anuluj", + "excludeLabel": "Wyklucz", + "matchingTracksModalHeader": "Utwory zgodne z filtrem", + "removeButton": "Usuń" } } }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } polubienie | { n } polubienia" + "manage": { + "ChannelsTable": { + "label": { + "category": "Kategoria", + "search": "Szukaj" + }, + "link": { + "local": "Lokalne", + "moderation": "Otwórz w interfejsie moderacyjnym" + }, + "option": { + "all": "Wszystkie" }, "ordering": { "direction": { @@ -1280,573 +1974,274 @@ }, "label": "Porządkowanie" }, - "link": { - "library": "Przeglądaj bibliotekę" - }, - "loader": { - "loading": "Ładowanie Twoich ulubionych…" - }, - "empty": { - "noFavorites": "Nie dodałeś jeszcze żadnych utworów do Twoich ulubionych" - }, "pagination": { - "results": "Wyniki na stronie" - }, - "title": "Twoje ulubione" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Dodaj do ulubionych", - "remove": "Usuń z ulubionych" - }, - "label": { - "inFavorites": "W ulubionych" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } plik | { n } pliki", - "quota": "Pozostałe wolne miejsce:" - }, - "button": { - "cancel": "Anuluj", - "close": "Zamknij", - "finishLater": "Ukończ później", - "next": "Następny krok", - "previous": "Poprzedni krok", - "publish": "Opublikuj", - "update": "Zaktualizuj" - }, - "header": { - "uploadFiles": "Pliki do przesłania", - "processing": "Przetwarzanie przesłanych plików", - "publish": "Publikuj audio", - "uploadDetails": "Szczegóły pliku" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - }, - "label": { - "album": "Album", - "series": "Seriale" - }, - "option": { - "none": "Nic" - } - }, - "LicenseSelect": { - "link": { - "license": "O tej licencji" - }, - "label": { - "license": "Licencja" - }, - "option": { - "none": "Nic" - } - }, - "UploadForm": { - "help": { - "license": "Wybierz na jakiej licencji będą dostępne zamieszczone treści, aby zapewnić pewne wolności swojej publice." - }, - "label": { - "openBrowser": "Przeglądaj…", - "channel": "Kanał" - }, - "message": { - "dragAndDrop": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania", - "pending": "Masz jakieś pliki oczekujące na publikację." - }, - "button": { - "edit": "Edytuj", - "ignore": "Ignoruj", - "remove": "Usuń", - "resume": "Wznów", - "retry": "Spróbuj ponownie" - }, - "header": { - "error": "Wystąpił błąd podczas publikowania" - }, - "status": { - "errored": "Zakończono błędem", - "pending": "W toku", - "uploading": "Przesyłanie" - }, - "description": { - "extensions": "Wspierane rozszerzenia: { extensions }" - }, - "warning": { - "quota": "Nie masz więcej wolnego miejsca na swoje pliki. Skontaktuj się z moderatorem celem zwiększenia przydziału lub usuń trochę treści." - } - }, - "AlbumModal": { - "button": { - "cancel": "Anuluj", - "create": "Utwórz" - }, - "header": { - "newAlbum": "Nowy album", - "newSeries": "Nowy serial" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Opis", - "position": "Pozycja", - "tags": "Tagi", - "title": "Tytuł", - "image": "Obrazek utworu" - } - }, - "AlbumForm": { - "header": { - "error": "Wystąpił błąd podczas tworzenia" - }, - "label": { - "albumTitle": "Tytuł" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Obserwuj", - "unsubscribe": "Przestań obserwować" - }, - "help": { - "auth": "Musisz być zalogowany, aby obserwować ten kanał" - } - } - }, - "AboutPod": { - "stat": { - "hoursOfMusic": "godzina muzyki | godziny muzyki", - "activeUsers": "aktywny użytkownik | aktywni użytkownicy", - "albumsCount": "album | albumy", - "artistsCount": "wykonawca | wykonawców", - "listeningsCount": "odsłuchania | odsłuchania", - "tracksCount": "utwór | utwory" - }, - "title": "O tej instancji", - "link": { - "about": "O tej instancji", - "features": "Informacje dodatkowe", - "introduction": "Wprowadzenie", - "rules": "Reguły", - "statistics": "Statystyki", - "terms": "Regulamin i polityka prywatności" - }, - "header": { - "about": "O tej instancji", - "contact": "Kontakt", - "features": "Informacje dodatkowe", - "rules": "Reguły", - "statistics": "Statystyki", - "terms": "Regulamin i polityka prywatności" - }, - "feature": { - "allowList": "Lista zezwoleń", - "anonymousAccess": "Anonimowy dostęp", - "status": { - "closed": "Zamknięte", - "disabled": "Wyłączony", - "enabled": "Włączone", - "open": "Otwarte" - }, - "federation": "Federacja", - "version": "Wersja Funkwhale", - "registrations": "Rejestracje", - "quota": "Limit przestrzeni" - }, - "notApplicable": "Niedostępne", - "placeholder": { - "noDescription": "Opis nie jest dostępny.", - "noRules": "Nie ustalono reguł.", - "noTerms": "Nie ustalono warunków." - }, - "message": { - "contact": "Wyślij nam wiadomość e-mail: {'{{'} contactEmail {'}}'}" - } - }, - "common": { - "ActionTable": { - "button": { - "selected": "Wybrano { n } z { total } | Wybrano { n } z { total }", - "allSelected": "Wybrano { n } element | Wybrano { n } elementy", - "go": "Wykonaj", - "launch": "Wykonaj", - "refresh": "Odśwież zawartość tabeli", - "select": "Wybierz", - "selectAll": "Zaznacz wszystkie elementy", - "selectElement": "Zaznacz jeden element | Zaznacz wszystkie { n } elementy", - "selectCurrentPage": "Zaznacz tylko obecną stronę" - }, - "message": { - "success": "Działanie { action } zostało pomyślnie wykonane na { n } elemencie | Działanie { action } zostało pomyślnie wykonane na { n } elementach", - "needsRefresh": "Treść została zaktualizowana - odśwież, aby zobaczyć aktualną treść" - }, - "label": { - "actions": "Działania", - "performAction": "Wykonaj akcje" - }, - "modal": { - "performAction": { - "header": "Czy chcesz wykonać działanie { action } na { n } elemencie? | Czy chcesz wykonać działanie { action } na { n } elementach?", - "content": { - "warning": "Może to wpływać na wiele rzeczy lub mieć nieodwracalne skutki, sprawdź dwukrotnie czy to na pewno to, czego chcesz." - } - } - }, - "header": { - "error": "Wystąpił błąd podczas aplikowania działania" - } - }, - "Duration": { - "meta": { - "hours": "{ hours } godz. { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "O tej instancji", - "chat": "Pokój czatowy", - "docs": "Dokumentacja", - "forum": "Forum dyskusyjne", - "support": "Podręcznik pomocy", - "git": "Zgłoś problem", - "login": "Zaloguj się", - "logout": "Wyloguj się", - "notifications": "Powiadomienia", - "profile": "Profil", - "settings": "Ustawienia", - "signup": "Zarejestruj się" - }, - "label": { - "shortcuts": "Skróty klawiszowe", - "language": "Język", - "theme": "Motyw" - } - }, - "UserModal": { - "link": { - "about": "O tej instancji", - "chat": "Pokój czatowy", - "forum": "Forum dyskusyjne", - "support": "Podręcznik pomocy", - "git": "Zgłoś problem", - "login": "Zaloguj się", - "logout": "Wyloguj się", - "notifications": "Powiadomienia", - "profile": "Profil", - "settings": "Ustawienia", - "signup": "Zarejestruj się" - }, - "label": { - "shortcuts": "Skróty klawiszowe", - "language": "Język", - "theme": "Motyw" - }, - "header": { - "options": "Opcje" - }, - "button": { - "switchInstance": "Skorzystaj z innej instancji" - } - }, - "DangerousButton": { - "button": { - "cancel": "Anuluj", - "confirm": "Potwierdź" - }, - "header": { - "confirm": "Czy chcesz potwierdzić to działanie?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Anuluj", - "edit": "Edytuj", - "less": "Pokaż mniej", - "more": "Pokaż więcej", - "update": "Zapisz opis" - }, - "header": { - "failure": "Wystąpił błąd podczas aktualizowania opisu" - }, - "empty": { - "noDescription": "Żaden opis nie jest dostępny" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Wyczyść" - }, - "label": { - "search": "Szukaj" + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { - "search": "Szukaj…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Zwiń", - "expand": "Rozwiń" - } - }, - "CopyInput": { - "button": { - "copy": "Kopiuj" - }, - "message": { - "success": "Skopiowano tekst do schowka!" - } - }, - "LoginModal": { - "link": { - "login": "Zaloguj się", - "signup": "Zarejestruj się" - }, - "header": { - "unauthenticated": "Nie uwierzytelniono" - }, - "description": { - "noAccess": "Nie masz dostępu!" - } - }, - "ContentForm": { - "help": { - "markdown": "Formatowanie za pomocą składni Markdown jest wspierane." - }, - "empty": { - "noContent": "Nie ma nic do podglądu." - }, - "button": { - "preview": "Podgląd", - "write": "Zapisz" - }, - "placeholder": { - "input": "Napisz tutaj kilka słów…" - } - }, - "EmptyState": { - "header": { - "noResults": "Nic nie znaleziono." - }, - "button": { - "refresh": "Odśwież" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG lub JPG. Rozdzielczość powinna mieścić się w przedziale między 1400x1400px a 3000x3000px. Maksymalny rozmiar pliku to 5 MB." - }, - "button": { - "remove": "Usuń" - }, - "label": { - "upload": "Prześlij nowy obraz…" - }, - "loader": { - "uploading": "Przesyłanie pliku…" - }, - "header": { - "failure": "Nie można było zapisać twojego załącznika" - } - }, - "ExpandableDiv": { - "button": { - "less": "Pokaż mniej", - "more": "Pokaż więcej" - } - } - }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - } - }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } jest już w liście odtwarzania { 1 }." - }, - "button": { - "addDuplicate": "Dodaj mimo to", - "addToPlaylist": "Dodaj do tej listy odtwarzania", - "addTrack": "Dodaj utwór", - "cancel": "Anuluj", - "edit": "Edytuj" - }, - "header": { - "addToPlaylist": "Dodaj do listy odtwarzania", - "available": "Dostępne listy odtwarzania", - "manage": "Zarządzaj listami odtwarzania", - "noResults": "Nie ma żadnych wyników zgodnych z Twoim filtrem", - "addFailure": "Nie udało się dodać tego utworu do listy odtwarzania" + "search": "Szukaj za pomocą domeny, nazwy, konta…" }, "table": { - "edit": { + "channel": { "header": { - "edit": "Edytuj", - "lastModification": "Ostatnia modyfikacja", + "account": "Konto", + "albums": "Albumy", + "creationDate": "Data utworzenia", + "domain": "Domena", "name": "Nazwa", "tracks": "Utwory" } } - }, - "placeholder": { - "filterPlaylist": "Wprowadź nazwę listy odtwarzania" - }, - "label": { - "filter": "Filtr" - }, - "empty": { - "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" } }, - "Editor": { - "button": { - "addDuplicate": "Dodaj mimo to", - "clear": "Wyczyść listę odtwarzania", - "copy": "Skopiuj utwory z obecnej kolejki do listy odtwarzania", - "insertFromQueue": "Dodaj z kolejki odtwarzania ({ n } utwór) | Dodaj z kolejki odtwarzania ({ n } utwory)" - }, - "error": { - "sync": "Podczas zapisywania twoich zmian wystąpił błąd" - }, - "message": { - "sync": "Zsynchronizowano zmiany z serwerem" - }, - "modal": { - "clearPlaylist": { - "header": "Czy chcesz wyczyścić listę odtwarzania „{ playlist }”?", - "content": { - "warning": "To bezpowrotnie usunie wszystkie utwory z tej listy odtwarzania i nie zostać być cofnięte." + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrane albumy zostaną usunięte wraz z powiązanymi utworami, plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj" + }, + "link": { + "local": "Lokalne", + "moderation": "Otwórz w interfejsie moderacyjnym" + }, + "notApplicable": "Niedostępne", + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, tytułu, wykonawcy, identyfikatora MusicBrainz…" + }, + "table": { + "album": { + "header": { + "artist": "Wykonawca", + "creationDate": "Data utworzenia", + "domain": "Domena", + "name": "Tytuł", + "releaseDate": "Data wydania", + "tracks": "Utwory" + } } } }, - "help": { - "reorder": "Przeciągnij i upuść aby zmienić kolejność utworów w liście odtwarzania" - }, - "header": { - "editor": "Edytor list odtwarzania" - }, - "warning": { - "duplicate": "Jakieś utwory z Twojej kolejki są już na tej liście odtwarzania:" - }, - "loading": { - "sync": "Synchronizowanie zmian z serwerem…" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Dodaj do listy odtwarzania…" - } - }, - "Form": { - "header": { - "createPlaylist": "Utwórz nową listę odtwarzania", - "createSuccess": "Utworzono listę odtwarzania", - "updateSuccess": "Zaktualizowano listę odtwarzania", - "createFailure": "Nie można było utworzyć listy odtwarzania" - }, - "button": { - "create": "Utwórz listę odtwarzania", - "update": "Zapisz listę odtwarzania" - }, - "placeholder": { - "name": "Moja wspaniała lista odtwarzania" - }, - "label": { - "name": "Nazwa listy odtwarzania", - "visibility": "Widoczność listy odtwarzania" - } - }, - "Widget": { - "button": { - "create": "Utwórz listę odtwarzania", - "more": "Pokaż więcej" - }, - "placeholder": { - "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } zaakceptował(-a) twoją prośbę o obserwowanie biblioteki \"{ library }\"", - "libraryFollow": "{ username } zaobserwował twoją bibliotekę \"{ library }\"", - "libraryPendingFollow": "{ username } chciałby obserwować twoją bibliotekę \"{ library }\"" - }, - "button": { - "approve": "Zatwierdź", - "markRead": "Oznacz jako przeczytane", - "markUnread": "Oznacz jako nieprzeczytane", - "reject": "Odrzuć" - } - } - }, - "Sidebar": { - "link": { - "about": "O tej instancji", - "albums": "Albumy", - "artists": "Artyści", - "browse": "Przeglądaj", - "channels": "Kanały", - "createAccount": "Utwórz konto", - "favorites": "Ulubione", - "home": "Strona główna", - "library": "Biblioteka", - "login": "Zaloguj się", - "moderation": "Moderacja", - "playlists": "Listy odtwarzania", - "podcasts": "Podcasty", - "radios": "Stacje radiowe", - "search": "Szukaj", - "settings": "Ustawienia", - "users": "Użytkownicy" - }, - "label": { - "add": "Dodaj zawartość", - "administration": "Administracja", - "language": "Język", - "main": "Menu główne", - "follows": "Oczekujące prośby o obserwowanie", - "edits": "Edycje oczekujące na rozpatrzenie", - "play": "Odtwarzaj ten utwór", - "theme": "Motyw" - }, - "header": { - "administration": "Administracja", - "explore": "Odkrywaj", - "main": "Główna nawigacja", - "more": "Więcej", - "library": "Moja biblioteka" - } - }, - "manage": { - "library": { - "UploadsTable": { + "ArtistsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "category": "Kategoria", + "search": "Szukaj" + }, + "link": { + "local": "Lokalne" + }, + "option": { + "all": "Wszystkie" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, nazwy, identyfikatora MusicBrainz…" + }, "table": { - "upload": { + "artist": { + "header": { + "albums": "Albumy", + "creationDate": "Data utworzenia", + "domain": "Domena", + "name": "Nazwa", + "tracks": "Utwory" + } + } + } + }, + "EditsCardList": { + "label": { + "status": "Stan" + }, + "option": { + "all": "Wszystkie", + "approved": "Zatwierdzono", + "pending": "Oczekuje na rozpatrzenie", + "rejected": "Odrzucono" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą konta, podsumowania, domeny…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrana biblioteka zostanie usunięta wraz z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj", + "visibility": "Widoczność" + }, + "link": { + "local": "Lokalne" + }, + "option": { + "all": "Wszystkie" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisu…" + }, + "table": { + "library": { "header": { - "accessedDate": "Data dostępu", "account": "Konto", "creationDate": "Data utworzenia", "domain": "Domena", - "importStatus": "Stan importu", - "library": "Biblioteka", + "followers": "Obserwatorzy", "name": "Nazwa", - "size": "Rozmiar", + "uploads": "Przesłane pliki", "visibility": "Widoczność" } } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." + } }, + "label": { + "search": "Szukaj" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy" + }, + "table": { + "tag": { + "header": { + "albums": "Albumy", + "artists": "Artyści", + "creationDate": "Data utworzenia", + "name": "Nazwa", + "tracks": "Utwory" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrane utwory zostaną usunięte wraz z powiązanymi polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj" + }, + "link": { + "local": "Lokalne" + }, + "notApplicable": "Niedostępne", + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, tytułu, artysty, albumu, identyfikatora MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "creationDate": "Data utworzenia", + "domain": "Domena", + "license": "Licencja", + "title": "Tytuł" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany plik zostanie usunięty. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj", + "status": "Stan", + "visibility": "Widoczność" + }, + "link": { + "local": "Lokalne" + }, + "notApplicable": "Niedostępne", "option": { "all": "Wszystkie", "failed": "Zakończony błędem", @@ -1862,396 +2257,68 @@ }, "label": "Porządkowanie" }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany plik zostanie usunięty. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj", - "status": "Stan", - "visibility": "Widoczność" + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisu, źródła…" }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data dostępu", "account": "Konto", "creationDate": "Data utworzenia", "domain": "Domena", - "followers": "Obserwatorzy", + "importStatus": "Stan importu", + "library": "Biblioteka", "name": "Nazwa", - "uploads": "Przesłane pliki", + "size": "Rozmiar", "visibility": "Widoczność" } } - }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrana biblioteka zostanie usunięta wraz z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "label": { - "search": "Szukaj", - "visibility": "Widoczność" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisu…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "creationDate": "Data utworzenia", - "domain": "Domena", - "license": "Licencja", - "title": "Tytuł" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrane utwory zostaną usunięte wraz z powiązanymi polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, tytułu, artysty, albumu, identyfikatora MusicBrainz…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albumy", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Nazwa", - "tracks": "Utwory" - } - } - }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "label": { - "category": "Kategoria", - "search": "Szukaj" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, identyfikatora MusicBrainz…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albumy", - "artists": "Artyści", - "creationDate": "Data utworzenia", - "name": "Nazwa", - "tracks": "Utwory" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." - } - }, - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą nazwy" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Wszystkie", - "approved": "Zatwierdzono", - "pending": "Oczekuje na rozpatrzenie", - "rejected": "Odrzucono" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "placeholder": { - "search": "Szukaj za pomocą konta, podsumowania, domeny…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - }, - "label": { - "status": "Stan" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Wykonawca", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Tytuł", - "releaseDate": "Data wydania", - "tracks": "Utwory" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrane albumy zostaną usunięte wraz z powiązanymi utworami, plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne", - "moderation": "Otwórz w interfejsie moderacyjnym" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, tytułu, wykonawcy, identyfikatora MusicBrainz…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Konto", - "domain": "Domena", - "local": "Lokalne", - "owner": "Posiadacz", - "type": "Rodzaj" - }, - "status": { - "assignedTo": "Przypisano do", - "internalNotes": "Notatki wewnętrzne", - "resolutionDate": "Data rozwiązania", - "resolved": "Rozwiązane", - "status": "Stan", - "unresolved": "Nierozstrzygnięte" - }, - "report": { - "category": "Kategoria", - "creationDate": "Data utworzenia", - "submittedBy": "Przesłane przez" + "AccountsTable": { + "action": { + "purge": { + "label": "Wyczyść" } }, - "header": { - "actions": "Działania", - "notes": "Notatki wewnętrzne", - "message": "Wiadomość", - "reportedObject": "Zgłoszony obiekt" - }, - "button": { - "confirmDelete": "Usuń", - "delete": "Usuń zgłoszony obiekt", - "resolve": "Rozwiąż", - "unresolve": "Cofnij rozwiązanie" - }, - "modal": { - "delete": { - "header": "Usunąć zgłoszony obiekt?", - "content": { - "warning": "To usunie obiekt związany z tym raportem i zaznaczy raport jako rozwiązany. Usunięcie jest nieodwracalne." - } - } - }, - "notApplicable": "Niedostępne", - "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "report": "Zgłoszenie { id }", - "publicPage": "Zobacz publiczną stronę" - }, - "warning": { - "objectDeleted": "Obiekt związany z tym raportem został usunięty." - } - }, - "UserRequestCard": { - "header": { - "actions": "Działania", - "notes": "Notatki wewnętrzne", - "signup": "Wiadomość" - }, - "button": { - "approve": "Zatwierdź", - "reject": "Odrzuć" - }, - "table": { - "status": { - "approved": "Zatwierdzono", - "assignedTo": "Przypisano do", - "internalNotes": "Notatki wewnętrzne", - "pending": "W toku", - "refused": "Odrzucone", - "status": "Stan" - }, - "request": { - "creationDate": "Data utworzenia", - "submittedBy": "Przesłane przez" - } - }, - "notApplicable": "Niedostępne", - "link": { - "request": "Aplikacja { id }" - }, - "message": { - "signup": "Ten użytkownik chce się zarejestrować na Twojej instancji." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Dodaj nową regułę moderacji", - "editRule": "Edytuj regułę moderacyjną", - "failure": "Wystąpił błąd podczas tworzenia reguły" - }, "label": { - "blockAll": "Zablokuj wszystko", - "policyDisabled": "Wyłączony", - "policyEnabled": "Włączony", - "silenceActivity": "Wycisz aktywność", - "silenceNotifications": "Wycisz powiadomienia", - "customizeRule": "lub dostosuj swoją regułę", - "policyReason": "Powód", - "rejectMedia": "Odrzuć media" + "search": "Szukaj" }, - "tooltip": { - "blockAll": "Zablokuj wszystko z tego konta lub domeny. To uniemożliwi jakąkolwiek interakcję z jednostką i usunie powiązaną zawartość (przesłane pliki, biblioteki, obserwowane itp.)", - "rejectMedia": "Nie pobieraj żadnych plików multimedialnych (audio, okładka albumu, awatar konta…) z tego konta lub domeny. To usunie również istniejącą zawartość.", - "summary": "Wyjaśnij, dlaczego stosujesz tę politykę - to pomoże ci zapamiętać czemu dodałeś tę regułę. Istnieje również możliwość (zależnie od konfiguracji instancji) publicznego wyświetlania tej informacji, żeby pomóc użytkownikom zrozumieć powód dodania reguły.", - "silenceActivity": "Ukryj zawartość konta lub domeny (pomijając obserwowane).", - "silenceNotifications": "Nie wywołuj powiadomień związanych z kontami lub domenami (pomijając obserwowane).", - "isActive": "Użyj tego ustawienia, aby tymczasowo włączyć/wyłączyć politykę zarazem nie usuwając jej całkowicie." + "link": { + "local": "Konto lokalne" }, - "button": { - "cancel": "Anuluj", - "create": "Utwórz", - "delete": "Usuń", - "confirm": "Usuń regułę moderacyjną", - "update": "Zapisz" + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" }, - "modal": { - "delete": { - "header": "Usunąć tę regułę moderacyjną?", - "content": { - "warning": "To działanie jest nieodwracalne." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Dodaj notatkę" + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { - "summary": "np. Opisz, jakie działania zostały podjęte…" + "search": "Szukaj za pomocą domeny, nazwy, opisu…" }, - "header": { - "failure": "Wystąpił błąd podczas przesyłania notatki" + "table": { + "account": { + "header": { + "domain": "Domena", + "firstSeen": "Widziany po raz pierwszy", + "lastSeen": "Ostatnia aktywność", + "moderationRule": "Pod regułą moderacyjną", + "name": "Nazwa", + "uploads": "Przesłane pliki" + }, + "moderationRule": "Tak" + } } }, "DomainsTable": { @@ -2266,6 +2333,16 @@ "label": "Usuń z listy zezwoleń" } }, + "empty": { + "noPods": "Nie znaleziono innych instancji" + }, + "label": { + "inList": "Jest obecny na liście zezwoleń", + "search": "Szukaj" + }, + "link": { + "list": "Ta domena jest obecna na Twojej liście zezwoleń" + }, "option": { "all": "Wszystkie", "no": "Nie", @@ -2279,76 +2356,32 @@ }, "label": "Porządkowanie" }, - "table": { - "domain": { - "header": { - "firstSeen": "Widziany po raz pierwszy", - "name": "Nazwa", - "receivedMessages": "Otrzymane wiadomości", - "moderationRule": "Pod regułą moderacyjną", - "users": "Użytkownicy" - }, - "moderationRule": "Tak" - } - }, - "label": { - "inList": "Jest obecny na liście zezwoleń", - "search": "Szukaj" - }, - "empty": { - "noPods": "Nie znaleziono innych instancji" + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { "search": "Szukaj za pomocą nazwy…" }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - }, - "link": { - "list": "Ta domena jest obecna na Twojej liście zezwoleń" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domena", "firstSeen": "Widziany po raz pierwszy", - "lastSeen": "Ostatnia aktywność", - "name": "Nazwa", "moderationRule": "Pod regułą moderacyjną", - "uploads": "Przesłane pliki" + "name": "Nazwa", + "receivedMessages": "Otrzymane wiadomości", + "users": "Użytkownicy" }, "moderationRule": "Tak" } - }, - "link": { - "local": "Konto lokalne" - }, - "action": { - "purge": { - "label": "Wyczyść" - } - }, - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, opisu…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Edytuj" + }, + "header": { + "rule": "Reguła" + }, "label": { "blockAll": "Zablokuj wszystko", "muteActivity": "Wycisz aktywność", @@ -2356,15 +2389,49 @@ "reason": "Powód", "rejectMedia": "Odrzuć media" }, - "button": { - "edit": "Edytuj" - }, "status": { "enabled": "Włączone", "paused": "Wstrzymane" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń regułę moderacyjną", + "create": "Utwórz", + "delete": "Usuń", + "update": "Zapisz" }, "header": { - "rule": "Reguła" + "addRule": "Dodaj nową regułę moderacji", + "editRule": "Edytuj regułę moderacyjną", + "failure": "Wystąpił błąd podczas tworzenia reguły" + }, + "label": { + "blockAll": "Zablokuj wszystko", + "customizeRule": "lub dostosuj swoją regułę", + "policyDisabled": "Wyłączony", + "policyEnabled": "Włączony", + "policyReason": "Powód", + "rejectMedia": "Odrzuć media", + "silenceActivity": "Wycisz aktywność", + "silenceNotifications": "Wycisz powiadomienia" + }, + "modal": { + "delete": { + "content": { + "warning": "To działanie jest nieodwracalne." + }, + "header": "Usunąć tę regułę moderacyjną?" + } + }, + "tooltip": { + "blockAll": "Zablokuj wszystko z tego konta lub domeny. To uniemożliwi jakąkolwiek interakcję z jednostką i usunie powiązaną zawartość (przesłane pliki, biblioteki, obserwowane itp.)", + "isActive": "Użyj tego ustawienia, aby tymczasowo włączyć/wyłączyć politykę zarazem nie usuwając jej całkowicie.", + "rejectMedia": "Nie pobieraj żadnych plików multimedialnych (audio, okładka albumu, awatar konta…) z tego konta lub domeny. To usunie również istniejącą zawartość.", + "silenceActivity": "Ukryj zawartość konta lub domeny (pomijając obserwowane).", + "silenceNotifications": "Nie wywołuj powiadomień związanych z kontami lub domenami (pomijając obserwowane).", + "summary": "Wyjaśnij, dlaczego stosujesz tę politykę - to pomoże ci zapamiętać czemu dodałeś tę regułę. Istnieje również możliwość (zależnie od konfiguracji instancji) publicznego wyświetlania tej informacji, żeby pomóc użytkownikom zrozumieć powód dodania reguły." } }, "InstancePolicyModal": { @@ -2374,117 +2441,172 @@ }, "modal": { "manage": { - "header": "Zarządzaj regułami moderacyjnymi dla { obj }", "content": { "warning": "Ta jednostka podlega specyficznym regułom moderacyjnym" - } + }, + "header": "Zarządzaj regułami moderacyjnymi dla { obj }" } } }, + "NoteForm": { + "button": { + "add": "Dodaj notatkę" + }, + "header": { + "failure": "Wystąpił błąd podczas przesyłania notatki" + }, + "placeholder": { + "summary": "np. Opisz, jakie działania zostały podjęte…" + } + }, "NotesThread": { "button": { "delete": "Usuń" }, "modal": { "delete": { - "header": "Usunąć tę notatkę?", "content": { "warning": "Notatka zostanie usunięta. To działanie jest nieodwracalne." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Konto", - "albums": "Albumy", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Nazwa", - "tracks": "Utwory" + }, + "header": "Usunąć tę notatkę?" } } }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" + "ReportCard": { + "button": { + "confirmDelete": "Usuń", + "delete": "Usuń zgłoszony obiekt", + "resolve": "Rozwiąż", + "unresolve": "Cofnij rozwiązanie" }, - "label": "Porządkowanie" + "header": { + "actions": "Działania", + "message": "Wiadomość", + "notes": "Notatki wewnętrzne", + "reportedObject": "Zgłoszony obiekt" + }, + "link": { + "moderation": "Otwórz w interfejsie moderacyjnym", + "publicPage": "Zobacz publiczną stronę", + "report": "Zgłoszenie { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "To usunie obiekt związany z tym raportem i zaznaczy raport jako rozwiązany. Usunięcie jest nieodwracalne." + }, + "header": "Usunąć zgłoszony obiekt?" + } + }, + "notApplicable": "Niedostępne", + "table": { + "object": { + "account": "Konto", + "domain": "Domena", + "local": "Lokalne", + "owner": "Posiadacz", + "type": "Rodzaj" + }, + "report": { + "category": "Kategoria", + "creationDate": "Data utworzenia", + "submittedBy": "Przesłane przez" + }, + "status": { + "assignedTo": "Przypisano do", + "internalNotes": "Notatki wewnętrzne", + "resolutionDate": "Data rozwiązania", + "resolved": "Rozwiązane", + "status": "Stan", + "unresolved": "Nierozstrzygnięte" + } + }, + "warning": { + "objectDeleted": "Obiekt związany z tym raportem został usunięty." + } }, - "label": { - "category": "Kategoria", - "search": "Szukaj" - }, - "link": { - "local": "Lokalne", - "moderation": "Otwórz w interfejsie moderacyjnym" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, konta…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" + "UserRequestCard": { + "button": { + "approve": "Zatwierdź", + "reject": "Odrzuć" + }, + "header": { + "actions": "Działania", + "notes": "Notatki wewnętrzne", + "signup": "Wiadomość" + }, + "link": { + "request": "Aplikacja { id }" + }, + "message": { + "signup": "Ten użytkownik chce się zarejestrować na Twojej instancji." + }, + "notApplicable": "Niedostępne", + "table": { + "request": { + "creationDate": "Data utworzenia", + "submittedBy": "Przesłane przez" + }, + "status": { + "approved": "Zatwierdzono", + "assignedTo": "Przypisano do", + "internalNotes": "Notatki wewnętrzne", + "pending": "W toku", + "refused": "Odrzucone", + "status": "Stan" + } + } } }, "users": { - "UsersTable": { + "InvitationForm": { + "button": { + "clear": "Wyczyść", + "new": "Uzyskaj nowe zaproszenie" + }, + "header": { + "failure": "Wystąpił błąd podczas tworzenia zaproszenia" + }, + "label": { + "invite": "Kod zaproszenia" + }, + "placeholder": { + "invitation": "Pozostaw puste, aby wygenerować kod" + }, "table": { - "user": { + "invitation": { "header": { - "accountStatus": "Stan konta", - "email": "Adres E-mail", - "lastActivity": "Ostatnia aktywność", - "permissions": "Uprawnienia", - "signup": "Rejestracja", - "status": "Stan", - "username": "Nazwa użytkownika" - }, - "accountStatus": { - "active": "Aktywny", - "inactive": "Nieaktywny" - }, - "status": { - "admin": "Administrator", - "regular": "Zwykły użytkownik", - "staff": "Członek administracji" + "code": "Kod", + "link": "Odnośnik do udostępniania" } } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "permission": { - "library": "Biblioteka", - "moderation": "Moderacja", - "settings": "Ustawienia" - }, - "notApplicable": "Niedostępne", - "placeholder": { - "search": "Szukaj za pomocą nazwy, adresu e-mail…" - }, - "pagination": { - "results": "Wyświetlanie jednego wyniku | Wyświetlanie wyników od { start } do { end } z { total }" } }, "InvitationsTable": { + "action": { + "delete": "Usuń" + }, + "label": { + "expired": "Wygasłe", + "search": "Szukaj", + "status": "Stan", + "unused": "Nie zużyty", + "used": "Zużyte" + }, "option": { "all": "Wszystkie", "expired": "Wygasłe/zużyte", "open": "Otwarte" }, + "ordering": { + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie jednego wyniku | Wyświetlanie wyników od { start } do { end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy, adresu e-mail, kodu…" + }, "table": { "invitation": { "header": { @@ -2495,372 +2617,250 @@ "status": "Stan" } } - }, - "action": { - "delete": "Usuń" - }, - "label": { - "expired": "Wygasłe", - "unused": "Nie zużyty", - "search": "Szukaj", - "status": "Stan", - "used": "Zużyte" - }, + } + }, + "UsersTable": { + "notApplicable": "Niedostępne", "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, "label": "Porządkowanie" }, - "placeholder": { - "search": "Szukaj za pomocą nazwy, adresu e-mail, kodu…" - }, "pagination": { "results": "Wyświetlanie jednego wyniku | Wyświetlanie wyników od { start } do { end } z { total }" - } - }, - "InvitationForm": { - "button": { - "clear": "Wyczyść", - "new": "Uzyskaj nowe zaproszenie" }, - "table": { - "invitation": { - "header": { - "code": "Kod", - "link": "Odnośnik do udostępniania" - } - } - }, - "header": { - "failure": "Wystąpił błąd podczas tworzenia zaproszenia" - }, - "label": { - "invite": "Kod zaproszenia" + "permission": { + "library": "Biblioteka", + "moderation": "Moderacja", + "settings": "Ustawienia" }, "placeholder": { - "invitation": "Pozostaw puste, aby wygenerować kod" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Działania", - "label": "Etykieta pola", - "type": "Typ pola", - "required": "Wymagane" - }, - "type": { - "long": "Długi tekst", - "short": "Krótki tekst" - }, - "required": { - "false": "Nie", - "true": "Tak" + "search": "Szukaj za pomocą nazwy, adresu e-mail…" + }, + "table": { + "user": { + "accountStatus": { + "active": "Aktywny", + "inactive": "Nieaktywny" + }, + "header": { + "accountStatus": "Stan konta", + "email": "Adres E-mail", + "lastActivity": "Ostatnia aktywność", + "permissions": "Uprawnienia", + "signup": "Rejestracja", + "status": "Stan", + "username": "Nazwa użytkownika" + }, + "status": { + "admin": "Administrator", + "regular": "Zwykły użytkownik", + "staff": "Członek administracji" + } } } - }, - "button": { - "add": "Dodaj nowe pole", - "edit": "Edytuj formularz", - "preview": "Podgląd formularza" - }, - "label": { - "additionalField": "Dodatkowe pole", - "additionalFields": "Dodatkowe pola", - "delete": "Usuń", - "helpText": "Podręcznik pomocy", - "moveDown": "Przesuń w dół", - "moveUp": "Przesuń w górę" - }, - "help": { - "additionalFields": "Dodatkowe pola do wyświetlenia w formularzu rejestracji. Ich zawartość jest widoczna tylko gdy manualna weryfikacja rejestracji jest włączona.", - "helpText": "Opcjonalny tekst, który będzie widoczny nad formularzem rejestracji." - } - }, - "SettingsGroup": { - "header": { - "image": "Aktualny obraz", - "error": "Wystąpił błąd podczas zapisywania ustawień" - }, - "button": { - "save": "Zapisz" - }, - "message": { - "success": "Pomyślnie zapisano ustawienia." } } }, "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Wszystkie" + "FilterModal": { + "button": { + "cancel": "Anuluj", + "hide": "Ukryj zawartość" }, + "header": { + "failure": "Wystąpił błąd podczas tworzenia filtra", + "modal": "Czy chcesz ukryć zawartość od wykonawcy „{ name }”?" + }, + "help": { + "createFilter": "Możesz zmieniać filtry w ustawieniach swojego konta kiedy tylko chcesz." + }, + "message": { + "success": "Filtr treści został dodany pomyślnie" + }, + "warning": { + "createFilter": { + "listIntro": "Nie będziesz więcej widział utworów, albumów oraz aktywności użytkowników powiązanej z tym wykonawcą:", + "listItem1": "W ulubionych innych użytkowników i historii odtwarzania", + "listItem2": "W panelu „Ostatnio dodane”", + "listItem3": "W wykazach wykonawców i albumów", + "listItem4": "W sugestiach radiowych" + } + } + }, + "ReportCategoryDropdown": { "label": { "category": "Kategoria" + }, + "option": { + "all": "Wszystkie" } }, "ReportModal": { + "button": { + "cancel": "Anuluj", + "submit": "Prześlij zgłoszenie" + }, + "description": { + "email": "Użyjemy tego adresu e-mail, jeśli zajdzie potrzeba, aby się z Tobą skontaktować odnośnie tego raportu.", + "forwardToDomain": "Przekaż zanonimizowaną kopię raportu do serwera goszczącego ten element.", + "message": "Użyj tego pola, aby przybliżyć kontekst moderatorowi, który się zajmie się twoim raportem.", + "modal": "Użyj tego formularza, aby przesłać zgłoszenie do zespołu moderującego." + }, "header": { "disabled": "Anonimowe zgłoszenia są wyłączone. Zaloguj się, aby przesłać zgłoszenie.", "modal": "Czy chcesz zgłosić ten obiekt?", "submissionFailure": "Wystąpił błąd podczas przesyłania zgłoszenia" }, - "button": { - "cancel": "Anuluj", - "submit": "Prześlij zgłoszenie" - }, "label": { "email": "Adres E-mail", "forwardToDomain": "Przekaż do { domain }", "message": "Wiadomość" }, - "description": { - "forwardToDomain": "Przekaż zanonimizowaną kopię raportu do serwera goszczącego ten element.", - "message": "Użyj tego pola, aby przybliżyć kontekst moderatorowi, który się zajmie się twoim raportem.", - "modal": "Użyj tego formularza, aby przesłać zgłoszenie do zespołu moderującego.", - "email": "Użyjemy tego adresu e-mail, jeśli zajdzie potrzeba, aby się z Tobą skontaktować odnośnie tego raportu." - }, "message": { "submissionSuccess": "Zgłoszenie zostało przesłane pomyślnie, dziękujemy" } - }, - "FilterModal": { + } + }, + "notifications": { + "NotificationRow": { "button": { - "cancel": "Anuluj", - "hide": "Ukryj zawartość" + "approve": "Zatwierdź", + "markRead": "Oznacz jako przeczytane", + "markUnread": "Oznacz jako nieprzeczytane", + "reject": "Odrzuć" }, "message": { - "success": "Filtr treści został dodany pomyślnie" - }, - "header": { - "modal": "Czy chcesz ukryć zawartość od wykonawcy „{ name }”?", - "failure": "Wystąpił błąd podczas tworzenia filtra" - }, - "warning": { - "createFilter": { - "listItem2": "W panelu „Ostatnio dodane”", - "listItem3": "W wykazach wykonawców i albumów", - "listItem1": "W ulubionych innych użytkowników i historii odtwarzania", - "listItem4": "W sugestiach radiowych", - "listIntro": "Nie będziesz więcej widział utworów, albumów oraz aktywności użytkowników powiązanej z tym wykonawcą:" - } - }, - "help": { - "createFilter": "Możesz zmieniać filtry w ustawieniach swojego konta kiedy tylko chcesz." + "libraryAcceptFollow": "{ username } zaakceptował(-a) twoją prośbę o obserwowanie biblioteki \"{ library }\"", + "libraryFollow": "{ username } zaobserwował twoją bibliotekę \"{ library }\"", + "libraryPendingFollow": "{ username } chciałby obserwować twoją bibliotekę \"{ library }\"" } } }, - "federation": { - "FetchButton": { - "description": { - "failure": "Podczas próby odświeżenia danych wystąpił błąd:", - "success": "Dane zostały pomyślnie odświeżone ze zdalnego serwera.", - "pending": "Serwer nie obsłużył żądania odświeżenia na czas. Zostanie ono przetworzone później.", - "skipped": "Zdalny serwer odpowiedział, ale zwrócił nie wspierane przez Funkwhale dane." + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } utwór | { n } utwory" + } + }, + "Editor": { + "button": { + "addDuplicate": "Dodaj mimo to", + "clear": "Wyczyść listę odtwarzania", + "copy": "Skopiuj utwory z obecnej kolejki do listy odtwarzania", + "insertFromQueue": "Dodaj z kolejki odtwarzania ({ n } utwór) | Dodaj z kolejki odtwarzania ({ n } utwory)" + }, + "error": { + "sync": "Podczas zapisywania twoich zmian wystąpił błąd" + }, + "header": { + "editor": "Edytor list odtwarzania" + }, + "help": { + "reorder": "Przeciągnij i upuść aby zmienić kolejność utworów w liście odtwarzania" + }, + "loading": { + "sync": "Synchronizowanie zmian z serwerem…" + }, + "message": { + "sync": "Zsynchronizowano zmiany z serwerem" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "To bezpowrotnie usunie wszystkie utwory z tej listy odtwarzania i nie zostać być cofnięte." + }, + "header": "Czy chcesz wyczyścić listę odtwarzania „{ playlist }”?" + } + }, + "warning": { + "duplicate": "Jakieś utwory z Twojej kolejki są już na tej liście odtwarzania:" + } + }, + "Form": { + "button": { + "create": "Utwórz listę odtwarzania", + "update": "Zapisz listę odtwarzania" + }, + "header": { + "createFailure": "Nie można było utworzyć listy odtwarzania", + "createPlaylist": "Utwórz nową listę odtwarzania", + "createSuccess": "Utworzono listę odtwarzania", + "updateSuccess": "Zaktualizowano listę odtwarzania" + }, + "label": { + "name": "Nazwa listy odtwarzania", + "visibility": "Widoczność listy odtwarzania" + }, + "placeholder": { + "name": "Moja wspaniała lista odtwarzania" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Dodaj mimo to", + "addToPlaylist": "Dodaj do tej listy odtwarzania", + "addTrack": "Dodaj utwór", + "cancel": "Anuluj", + "edit": "Edytuj" + }, + "empty": { + "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" + }, + "header": { + "addFailure": "Nie udało się dodać tego utworu do listy odtwarzania", + "addToPlaylist": "Dodaj do listy odtwarzania", + "available": "Dostępne listy odtwarzania", + "manage": "Zarządzaj listami odtwarzania", + "noResults": "Nie ma żadnych wyników zgodnych z Twoim filtrem" + }, + "label": { + "filter": "Filtr" + }, + "placeholder": { + "filterPlaylist": "Wprowadź nazwę listy odtwarzania" }, "table": { - "error": { - "value": { - "httpError": "Wystąpił błąd HTTP podczas kontaktowania się ze zdalnym serwerem", - "invalidAttributesError": "Dane zwrócone przez serwer zdalny miały nieprawidłowe lub brakujące atrybuty", - "connectionError": "Nie można połączyć się ze zdalnym serwerem", - "httpStatus": "Zdalny serwer odpowiedział ze statusem HTTP { status }", - "timeoutError": "Zdalny serwer nie odpowiedział wystarczająco szybko", - "invalidJsonError": "Zdalny serwer zwrócił dane nie będące poprawnym JSON lub JSON-LD", - "unknownError": "Nieznany błąd" - }, - "label": { - "detail": "Szczegóły błędu", - "type": "Typ błędu" + "edit": { + "header": { + "edit": "Edytuj", + "lastModification": "Ostatnia modyfikacja", + "name": "Nazwa", + "tracks": "Utwory" } } }, - "button": { - "close": "Zamknij", - "reload": "Zamknij i odśwież stronę" - }, - "header": { - "saveFailure": "Wystąpił błąd podczas zapisywania ustawień", - "failure": "Błąd odswieżania", - "pending": "Odświeżanie w toku", - "success": "Odświeżanie zakończone sukcesem", - "skipped": "Odświeżanie zostało pominięte", - "refresh": "Odświeżanie obiektu z serwera zdalnego…" - }, - "loader": { - "fetchRequest": "Pobieranie…", - "awaitingResult": "Ładowanie zdalnych wyników…" + "warning": { + "duplicate": "{ 0 } jest już w liście odtwarzania { 1 }." } }, - "LibraryWidget": { - "empty": { - "noMatch": "Nie znaleziono pasującej biblioteki." - }, + "TrackPlaylistIcon": { "button": { - "showMore": "Pokaż więcej" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Skróty odtwarzacza", - "clearQueue": "Wyczyść kolejkę odtwarzania", - "decreaseVolume": "Zmniejsz głośność", - "expandQueue": "Rozwiń kolejkę odtwarzania/widok odtwarzacza", - "increaseVolume": "Zwiększ głośność", - "playPause": "Zatrzymaj/odtwarzaj aktualny utwór", - "playNext": "Następny utwór", - "playPrevious": "Poprzedni utwór", - "seekBack30": "Cofnij o 30 sekund", - "seekBack5": "Cofnij o 5 sekund", - "seekForward30": "Pomiń 30 sekund", - "seekForward5": "Pomiń 5 sekund", - "shuffleQueue": "Wymieszaj kolejkę", - "toggleFavorite": "Dodaj lub usuń z ulubionych", - "toggleMute": "Przełącz wyciszenie", - "toggleLoop": "Włącz zapętlenie kolejki" - }, - "general": { - "focus": "Aktywuj pasek wyszukiwania", - "label": "Skróty ogólne", - "show": "Pokaż dostępne skróty klawiszowe", - "unfocus": "Dezaktywuj pasek wyszukiwania" + "add": "Dodaj do listy odtwarzania…" } }, - "button": { - "close": "Zamknij" - }, - "header": { - "modal": "Skróty klawiszowe" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Anuluj", - "submit": "Prześlij" - }, - "header": { - "chooseInstance": "Wybierz instancję", - "failure": "Nie można połączyć się z podanym adresem URL", - "suggestions": "Polecane" - }, - "label": { - "url": "Adres URL instancji" - }, - "help": { - "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", - "serverDown": "Serwer może być niedostępny", - "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do której chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji." - }, - "message": { - "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" - } - }, - "Queue": { - "button": { - "clear": "Wyczyść", - "close": "Zamknij", - "stopRadio": "Zatrzymaj radio" - }, - "label": { - "duration": "Czas trwania", - "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", - "next": "Następny utwór", - "pause": "Wstrzymaj", - "play": "Odtwarzaj", - "previous": "Poprzedni utwór", - "queue": "Kolejka odtwarzania", - "remove": "Usuń", - "restart": "Odtwórz utwór ponownie" - }, - "message": { - "radio": "Nowe utwory pojawią się tutaj automatycznie.", - "automaticPlay": "Następny utwór zostanie odtworzony automatycznie w ciągu kilku sekund…" - }, - "header": { - "failure": "Ten utwór nie mógł zostać wczytany", - "radio": "Słuchasz stacji radiowej" - }, - "meta": { - "queuePosition": "Utwór { index } z { length }" - }, - "warning": { - "connectivity": "Możesz mieć problemy z łącznością." - } - }, - "forms": { - "PasswordInput": { + "Widget": { "button": { - "copy": "Kopiuj" + "create": "Utwórz listę odtwarzania", + "more": "Pokaż więcej" }, - "title": "Pokaż/ukryj hasło", - "message": { - "copy": "Skopiowano tekst do schowka!" + "placeholder": { + "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" } } }, "radios": { + "Button": { + "startRadio": "Odtwarzaj stację radiową", + "stopRadio": "Zatrzymaj radio" + }, "Card": { "button": { "edit": "Edytuj" } - }, - "Button": { - "startRadio": "Odtwarzaj stację radiową", - "stopRadio": "Zatrzymaj radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Wystąpił błąd podczas pobierania obiektu" - }, - "button": { - "fediverse": "Fediverse", - "rss": "Kanał RSS", - "search": "Szukaj" - }, - "label": { - "fediverse": { - "fieldLabel": "Obiekt Fediverse", - "title": "Obserwuj podcast z Fediverse" - }, - "rss": { - "fieldPlaceholder": "https://adres.strony/rss.xml", - "fieldLabel": "Lokalizacja kanału RSS", - "title": "Zasubskrybuj kanał RSS podcastu" - } - }, - "warning": { - "unsupported": "Ten rodzaj obiektu nie jest jeszcze wspierany" - }, - "error": { - "fetchFailed": "Ten obiekt nie mógł zostać pobrany" - }, - "description": { - "fediverse": "Użyj tego formularza, aby obserwować kanał znajdujący się gdzieś indziej we Fediverse.", - "rss": "Użyj tego formularza, aby obserwować kanał RSS znajdujący się pod danym adresem URL." - } - }, - "PageNotFound": { - "link": { - "home": "Przejdź na stronę główną" - }, - "title": "Nie odnaleziono strony", - "header": { - "pageNotFound": "Nie odnaleziono strony!" - }, - "message": { - "pageNotFound": "Przepraszamy, strona której szukasz nie istnieje:" - } - }, - "vui": { - "Pagination": { - "next": "Następna strona", - "label": "Stronicowanie", - "previous": "Poprzednia strona" } }, "tags": { @@ -2869,590 +2869,309 @@ "more": "Pokaż { n } kolejny tag | Pokaż { n } kolejne tagi" } } + }, + "vui": { + "Pagination": { + "label": "Stronicowanie", + "next": "Następna strona", + "previous": "Poprzednia strona" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Dodano { n } utwór do kolejki | Dodano { n } utwory do kolejki" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Muzyka", + "other": "lnne", + "podcast": "Podcast" + }, + "label": "Kategoria treści" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Ten utwór został przesłany, ale nie został jeszcze wyznaczony do przetwarzania", + "label": "Oczekujący" + }, + "errored": { + "help": "Wystąpił błąd podczas przetwarzania tego utworu, upewnij się że posiada on poprawne metadane", + "label": "Zakończono błędem" + }, + "finished": { + "help": "Zaimportowano", + "label": "Ukończono" + }, + "pending": { + "help": "Ten utwór został przesłany, ale nie został jeszcze przetworzony przez serwer", + "label": "W toku" + }, + "skipped": { + "help": "Ten utwór jest już w jednej z bibliotek", + "label": "Pominięto" + } + }, + "label": "Kliknij, aby zobaczyć więcej informacji dotyczących procesu importowania tego pliku" + }, + "privacyLevel": { + "choices": { + "instance": "Każdy na tej instancji", + "private": "Nikt poza mną", + "public": "Każdy na dowolnej instancji" + }, + "help": "Ustal poziom widoczności twojej aktywności", + "label": "Widoczność aktywności", + "shortChoices": { + "instance": "Instancja", + "private": "Prywatne", + "public": "Każdy" + } + }, + "reportType": { + "choices": { + "illegalContent": "Nielegalne treści", + "invalidMetadata": "Nieprawidłowe metadane", + "offensiveContent": "Obraźliwe treści", + "other": "lnna", + "takedownRequest": "Prośba o usunięcie" + }, + "label": "Kategoria" + }, + "summary": { + "label": "O mnie" + } + }, + "filters": { + "accessedDate": "Data dostępu", + "albumTitle": "Nazwa albumu", + "artistName": "Nazwa wykonawcy", + "bitrate": "Szybkość transmisji", + "creationDate": "Data utworzenia", + "dateJoined": "Data rejestracji", + "domain": "Domena", + "duration": "Czas trwania", + "expirationDate": "Data wygaśnięcia", + "firstSeen": "Data widzenia po raz pierwszy", + "followers": "Obserwatorzy", + "itemsCount": "Elementy", + "lastActivity": "Ostatnia aktywność", + "lastSeen": "Data ostatniej aktywności", + "modificationDate": "Data modyfikacji", + "name": "Nazwa", + "receivedMessages": "Otrzymane wiadomości", + "releaseDate": "Data wydania", + "size": "Rozmiar", + "trackTitle": "Tytuł utworu", + "uploads": "Przesłane pliki", + "username": "Nazwa użytkownika", + "users": "Użytkownicy" + }, + "scopes": { + "edits": { + "description": "Dostęp do edycji", + "label": "Edycje" + }, + "favorites": { + "label": "Ulubione" + }, + "filters": { + "description": "Dostęp do filtrów treści", + "label": "Filtry treści" + }, + "follows": { + "description": "Dostęp do obserwowanych", + "label": "Obserwacje" + }, + "libraries": { + "description": "Dostęp do plików audio, bibliotek, wykonawców, albumów i utworów", + "label": "Biblioteki i przesłane pliki" + }, + "listenings": { + "description": "Dostęp do historii odtwarzania", + "label": "Odsłuchania" + }, + "notifications": { + "description": "Dostęp do powiadomień", + "label": "Powiadomienia" + }, + "playlists": { + "description": "Dostęp do list odtwarzania", + "label": "Listy odtwarzania" + }, + "profile": { + "description": "Dostęp do adresu e-mail, nazwy użytkownika i informacji o profilu", + "label": "Profil" + }, + "radios": { + "description": "Dostęp do stacji radiowych", + "label": "Stacje radiowe" + }, + "reports": { + "description": "Dostęp do zgłoszeń moderacyjnych", + "label": "Zgłoszenia" + }, + "security": { + "description": "Dostęp do ustawień związanych z bezpieczeństwem np. haseł i autoryzacji", + "label": "Bezpieczeństwo" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data wydania", + "title": "Tytuł" + }, + "artist": { + "name": "Nazwa" + }, + "cover": { + "label": "Okładka" + }, + "description": { + "label": "Opis" + }, + "tags": { + "label": "Tagi" + }, + "track": { + "copyright": "Prawa autorskie", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + } + }, + "useReport": { + "account": { + "typeLabel": "Konto" + }, + "album": { + "label": "Zgłoś ten album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Zgłoś tego wykonawcę…", + "typeLabel": "Wykonawca" + }, + "channel": { + "label": "Zgłoś ten kanał…", + "typeLabel": "Kanał" + }, + "library": { + "label": "Zgłoś tę bibliotekę…", + "typeLabel": "Biblioteka" + }, + "playlist": { + "label": "Zgłoś tę listę odtwarzania…", + "typeLabel": "Lista odtwarzania" + }, + "track": { + "label": "Zgłoś ten utwór…", + "typeLabel": "Utwór" + } + }, + "useReportConfigs": { + "account": { + "label": "Konto", + "summary": "O mnie" + }, + "album": { + "label": "Album", + "releaseDate": "Data wydania", + "title": "Tytuł" + }, + "artist": { + "label": "Wykonawca" + }, + "channel": { + "label": "Kanał" + }, + "creationDate": { + "label": "Data utworzenia" + }, + "library": { + "description": "Opis", + "label": "Biblioteka" + }, + "musicbrainzId": { + "label": "Identyfikator MusicBrainz" + }, + "name": { + "label": "Nazwa" + }, + "playlist": { + "label": "Lista odtwarzania" + }, + "tags": { + "label": "Tagi" + }, + "track": { + "copyright": "Prawa autorskie", + "label": "Utwór", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + }, + "visibility": { + "label": "Widoczność" + } + } + }, + "useThemeList": { + "darkTheme": "Ciemny", + "lightTheme": "Jasny" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie za { delay }", + "rateLimitLater": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie później" + }, + "serviceWorker": { + "actions": { + "later": "Póżniej", + "update": "Aktualizuj" + }, + "newAppVersion": "Dostępna jest nowa wersja aplikacji." } }, "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } epizod | { n } epizody", - "listenings": "{ n } odsłuchanie | { n } odsłuchania", - "subscribers": "{ n } subskrybent | { n } subskrybentów", - "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "channelEpisodes": "Wszystkie odcinki", - "mirrored": "Odzwierciedlane z { domain }", - "moderation": "Otwórz w interfejsie moderacyjnym", - "channelOverview": "Przegląd", - "channelTracks": "Utwory", - "domainView": "Zobacz na { domain }" - }, - "header": { - "artistChannel": "Kanał wykonawcy", - "podcastChannel": "Kanał podcastowy" - }, - "button": { - "cancel": "Anuluj", - "confirm": "Usuń", - "delete": "Usuń…", - "edit": "Edytuj…", - "embed": "Osadź", - "play": "Odtwarzaj", - "updateChannel": "Zapisz kanał", - "upload": "Prześlij pliki" - }, - "title": "Kanał", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Wklej następujący adres URL do swojej ulubionej aplikacji do podcastów:" - }, - "header": "Zasubskrybuj za pomocą RSS" - }, - "fediverse": { - "content": { - "help": "Jeśli używasz Mastodona albo innych aplikacji Fediverse, to możesz zasubskrybować to konto:" - }, - "header": "Obserwuj na Fediverse" - }, - "funkwhale": { - "header": "Obserwuj na Funkwhale" - }, - "header": "Obserwuj ten kanał" - }, - "delete": { - "header": "Usunąć ten kanał?", - "content": { - "warning": "Kanał zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź prace tego wykonawcy na swojej stronie internetowej" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Dodaj", - "erroredUploads": "Zobacz pliki, których import zakończył się błędem", - "skippedUploads": "Zobacz pominięte pliki" - }, - "header": { - "albums": "Albumy", - "latestEpisodes": "Najnowsze odcinki", - "latestTracks": "Najnowsze utwory", - "series": "Seriale", - "uploadsFailure": "Kilka przesłanych plików nie mogło zostać opublikowane", - "uploadsProcessing": "Przesłane pliki są przetwarzane", - "uploadsSuccess": "Przesłane pliki zostały opublikowane pomyślnie" - }, - "meta": { - "progress": "Przetworzone pliki:" - }, - "message": { - "processing": "Twoje przesłane pliki są przetwarzane przez Funkwhale i będą wkrótce dostępne." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Dodaj" - }, - "button": { - "cancel": "Anuluj", - "subscribe": "Obserwuj" - }, - "placeholder": { - "search": "Filtruj po nazwie…" - }, - "title": "Obserwowane kanały", - "modal": { - "subscription": { - "header": "Subskrypcja" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "details": "Szczegóły biblioteki" - }, - "label": { - "size": "Łączny rozmiar wszystkich plików w tej bibliotece" - }, - "button": { - "upload": "Prześlij pliki" - } - }, - "Quota": { - "label": { - "currentUsage": "Wykorzystano { current } z przydzielonego { max }", - "errored": "Pliki zakończone błędem", - "pending": "Pliki w trakcie przetwarzania", - "skipped": "Pominięte pliki" - }, - "header": { - "currentUsage": "Obecne użycie" - }, - "loading": { - "currentUsage": "Ładowanie danych o użyciu…" - }, - "button": { - "purge": "Wyczyść" - }, - "modal": { - "purgeErrored": { - "header": "Wyczyścić pliki zakończone błędami?", - "content": { - "description": "Ta opcja usunie utwory które zostały przesłane, ale wystąpił błąd podczas ich importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - }, - "purgePending": { - "header": "Wyczyścić pliki w toku?", - "content": { - "description": "Ta opcja usunie utwory które zostały przesłane, ale nie zostały jeszcze przetworzone, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - }, - "purgeSkipped": { - "header": "Wyczyścić pominięte pliki?", - "content": { - "description": "Ta opcja usunie utwory które zostały przesłane, lecz pominięte w procesie importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - } - }, - "link": { - "viewFiles": "Zobacz pliki" - } - }, - "FilesTable": { - "table": { - "file": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "duration": "Czas trwania", - "importStatus": "Stan importu", - "size": "Rozmiar", - "title": "Tytuł", - "uploadDate": "Data przesłania" - } - } - }, - "option": { - "status": { - "all": "Wszystkie", - "draft": "Oczekujący", - "failed": "Zakończony błędem", - "finished": "Ukończono", - "pending": "W toku", - "skipped": "Pominięto" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": "Usuń", - "restartImport": "Uruchom importowanie ponownie" - }, - "label": { - "importStatus": "Stan importu", - "search": "Szukaj" - }, - "notApplicable": "Niedostępne", - "empty": { - "noTracks": "Nie dodano jeszcze żadnych utworów do tej biblioteki" - }, - "placeholder": { - "search": "Szukaj za pomocą tytułu, wykonawcy, albumu…" - }, - "button": { - "showStatus": "Pokaż więcej informacji dotyczących procesu importowania tego utworu" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Utwórz nową bibliotekę" - }, - "loading": { - "libraries": "Ładowanie bibliotek…" - }, - "empty": { - "noLibrary": "Wygląda na to, że nie masz jeszcze żadnej biblioteki — może to już czas, żeby jakąś utworzyć?" - }, - "header": { - "libraries": "Moje biblioteki" - } - }, - "Form": { - "button": { - "create": "Utwórz bibliotekę", - "delete": "Usuń", - "confirm": "Usuń bibliotekę", - "update": "Zapisz bibliotekę" - }, - "modal": { - "delete": { - "header": "Usunąć tę bibliotekę?", - "content": { - "warning": "Biblioteka i wszystkie znajdujące się w niej utwory zostaną usunięte. To działanie jest nieodwracalne." - } - } - }, - "label": { - "description": "Opis", - "name": "Nazwa", - "visibility": "Widoczność" - }, - "header": { - "failure": "Błąd" - }, - "description": { - "library": "Biblioteki pomagają organizować i udostępniać kolekcje muzyki. Możesz przesłać własną kolekcję muzyki na Funkwhale i dzielić się nią z rodziną i znajomymi.", - "visibility": "Możesz udostępniać swoją bibliotekę innym, nie zważając na jej widoczność." - }, - "message": { - "libraryCreated": "Utworzono bibliotekę", - "libraryDeleted": "Usunięto bibliotekę", - "libraryUpdated": "Zaktualizowano bibliotekę" - }, - "placeholder": { - "name": "Moja wspaniała biblioteka", - "description": "Ta biblioteka zawiera moją osobistą muzykę, mam nadzieję że Ci się spodoba." - } - } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory", - "failedTracks": "Utwory zakończone błędem:", - "lastUpdate": "Ostatnia aktualizacja:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Gdy przestaniesz obserwować tę bibliotekę, stracisz dostęp do jej zawartości." - }, - "header": "Czy chcesz przestać obserwować tę bibliotekę?" - } - }, - "button": { - "cancel": "Cofnij prośbę o obserwowanie", - "follow": "Obserwuj", - "pending": "Obserwowanie oczekuje na zatwierdzenie", - "unfollow": "Przestań obserwować" - }, - "link": { - "scanDetails": "Szczegóły", - "scan": "Skanuj teraz" - }, - "label": { - "scanFailure": "Problem podczas skanowania", - "scanPending": "Skanowanie w toku", - "scanSuccess": "Przeskanowano", - "scanPartialSuccess": "Przeskanowano z błędami", - "scanProgress": "Skanowanie… ({ progress }%)", - "sharingLink": "Odnośnik do udostępnienia" - }, - "message": { - "scanLaunched": "Uruchomiono skanowanie", - "scanSkipped": "Skanowanie pominięte (poprzednie skanowanie odbyło się zbyt niedawno)" - }, - "tooltip": { - "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", - "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" - } - }, - "ScanForm": { - "header": { - "failure": "Wystąpił błąd podczas pobierania zdalnej biblioteki" - }, - "placeholder": { - "url": "Wprowadź adres URL biblioteki" - }, - "label": { - "search": "Wyszukaj w zdalnej bibliotece" - }, - "button": { - "submit": "Zatwierdź wyszukiwanie" - } - }, - "Home": { - "header": { - "knownLibraries": "Znane biblioteki", - "remoteLibraries": "Zdalne biblioteki" - }, - "loading": { - "remoteLibraries": "Ładowanie zdalnych bibliotek…" - }, - "button": { - "refresh": "Odśwież" - }, - "description": { - "remoteLibraries": "Zdalne biblioteki należą do użytkowników innych instancji. Możesz uzyskać do nich dostęp jeżeli został Ci on przyznany lub jeżeli są publiczne." - } - } - }, - "Home": { - "title": "Dodaj lub zarządzaj zawartością", - "description": { - "follow": "Możesz zaobserwować biblioteki innych użytkowników, aby uzyskać dostęp do nowej muzyki. Publiczne biblioteki mogą być zaobserwowane natychmiast, a do zaobserwowania prywatnej biblioteki będziesz potrzebował zgody jej właściciela.", - "channel": { - "1": "Jeżeli jesteś muzykiem lub tworzysz podcasty, kanały są stworzone dla Ciebie!", - "2": "Udostępnij twoje utwory publicznie i zdobądź obserwatorów na Funkwhale, Fediverse albo jakiejkolwiek aplikacji do podcastów." - }, - "upload": "Prześlij swoją osobistą muzykę do Funkwhale, aby czerpać z niej przyjemność w każdym miejscu oraz dzielić się nią z przyjaciółmi i rodziną." - }, - "header": { - "follow": "Obserwuj zdalne biblioteki", - "channel": "Publikuj swoje prace na kanale", - "upload": "Prześlij do biblioteki treści innych wykonawców" - }, - "button": { - "start": "Rozpocznij" - }, - "help": { - "uploadQuota": "Ta instancja oferuje {quota} przestrzeni dla każdego użytkownika." - } - }, - "Base": { - "title": "Dodaj zawartość", - "link": { - "libraries": "Biblioteki", - "tracks": "Utwory" - }, - "menu": { - "secondary": "Podmenu" - } - } - }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "moderation": "Otwórz w interfejsie moderacyjnym", - "owner": "Należy do { username }", - "tracks": "Utwory", - "domain": "Zobacz na { domain }" - }, - "button": { - "edit": "Edytuj", - "upload": "Prześlij pliki" - }, - "title": "Biblioteka", - "label": { - "private": "Prywatne", - "public": "Publiczne", - "instance": "Ograniczona", - "sharingLink": "Odnośnik do udostępnienia" - }, - "description": { - "sharingLink": "Podziel się tym odnośnikiem z innymi użytkownikami, aby mogli poprosić o dostęp do Twojej biblioteki poprzez wklejenie go w pole wyszukiwania." - }, - "tooltip": { - "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", - "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości", - "instance": "Dostęp do tej biblioteki jest ograniczony tylko do użytkowników tej instancji" - } - }, - "Edit": { - "button": { - "accept": "Zaakceptuj", - "reject": "Odrzuć" - }, - "table": { - "action": { - "status": { - "accepted": "Zaakceptowano", - "pending": "Oczekuje na przyjęcie", - "rejected": "Odrzucono" - }, - "header": { - "action": "Działanie", - "date": "Data", - "status": "Stan", - "user": "Użytkownik" - } - } - }, - "header": { - "followers": "Obserwatorzy", - "libraryContents": "Zawartość biblioteki" - }, - "loading": { - "followers": "Ładowanie obserwujących…" - }, - "empty": { - "noFollowers": "Nikt nie obserwuje tej biblioteki" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - }, - "DetailOverview": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - }, - "DetailTracks": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Profil { username }", - "link": { - "activity": "Aktywność", - "moderation": "Otwórz w interfejsie moderacyjnym", - "overview": "Przegląd", - "domainView": "Zobacz na { domain }" - }, - "label": { - "self": "To Ty!" - } - }, - "PasswordReset": { - "label": { - "email": "Adres e-mail" - }, - "button": { - "requestReset": "Poproś o zresetowanie hasła" - }, - "link": { - "back": "Wróć do logowania" - }, - "placeholder": { - "email": "Wprowadź adres e-mail powiązany z twoim kontem" - }, - "header": { - "failure": "Wystąpił błąd podczas próby zresetowania hasła", - "reset": "Zresetuj hasło" - }, - "title": "Zresetuj hasło", - "help": { - "form": "Użyj tego formularza, aby poprosić o zresetowanie hasła. Otrzymasz wiadomość z instrukcjami resetowania hasła na podany adres e-mail." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Dodaj" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Kanał wykonawcy" - }, - "header": "Utwórz kanał", - "podcast": { - "header": "Kanał podcastowy" - } - } - }, - "button": { - "cancel": "Anuluj", - "createChannel": "Utwórz kanał", - "next": "Następny krok", - "previous": "Poprzedni krok" - }, - "header": { - "channels": "Kanały", - "sharedLibraries": "Ten użytkownik udostępnił następujące biblioteki", - "libraries": "Biblioteki" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Wróć do logowania", - "login": "Przejdź do logowania" - }, - "title": "Zmień swoje hasło", - "header": { - "failure": "Wystąpił błąd podczas zmieniania Twojego hasła", - "success": "Pomyślnie zaktualizowano hasło" - }, - "message": { - "requestSent": "Jeżeli adres e-mail podany w poprzednim kroku jest prawidłowy i przypisany do konta użytkownika, powinieneś otrzymać wiadomość e-mail z instrukcjami resetowania hasła w przeciągu kilku minut.", - "success": "Twoje hasło zostało pomyślnie zmienione." - }, - "label": { - "newPassword": "Nowe hasło" - }, - "button": { - "update": "Aktualizuj swoje hasło" - } - }, - "EmailConfirm": { - "title": "Potwierdź swój adres e-mail", - "label": { - "confirmationCode": "Kod potwierdzenia" - }, - "header": { - "failure": "Nie można potwierdzić twojego adresu e-mail", - "success": "Potwierdzono adres e-mail" - }, - "link": { - "login": "Przejdź do logowania", - "back": "Wróć do logowania" - }, - "message": { - "success": "Twój adres e-mail został potwierdzony, możesz teraz korzystać bez ograniczeń." - } - }, - "Signup": { - "header": { - "createAccount": "Utwórz konto Funkwhale" - }, - "title": "Rejestracja" - }, - "Login": { - "title": "Zaloguj się", - "header": { - "login": "Zaloguj się na swoje konto Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Logowanie…" - } - }, - "Plugins": { - "title": "Zarządzaj rozszerzeniami" - }, - "ProfileActivity": { - "header": { - "playlists": "Listy odtwarzania", - "recentlyFavorited": "Ostatnio polubione", - "recentlyListened": "Ostatnio odsłuchane" - } - } - }, "Notifications": { + "button": { + "read": "Oznacz wszystko jako przeczytane", + "submit": "Zrozumiano!" + }, + "empty": { + "notifications": "Brak powiadomień do pokazania." + }, + "header": { + "funkwhaleSupport": "Czy lubisz Funkwhale?", + "instanceSupport": "Wspieraj tę instancję Funkwhale", + "messages": "Twoje wiadomości", + "notifications": "Twoje powiadomienia" + }, + "label": { + "reminder": "Przypomnij mi za:", + "showRead": "Pokaż odczytane powiadomienia" + }, + "link": { + "donate": "Wesprzyj", + "help": "Poznaj inne sposoby pomocy" + }, + "loading": { + "notifications": "Ładowanie powiadomień…" + }, + "message": { + "funkwhaleSupport": "Zauważyliśmy, że jesteś tu już przez pewien czas. Jeśli Funkwhale jest dla ciebie użyteczny, moglibyśmy skorzystać z twojej pomocy, aby jeszcze bardziej go ulepszyć!" + }, "option": { "delay": { "30": "30 dni", @@ -3461,584 +3180,63 @@ "never": "Nigdy" } }, - "link": { - "help": "Poznaj inne sposoby pomocy", - "donate": "Wesprzyj" + "title": "Powiadomienia" + }, + "Search": { + "button": { + "submit": "Zatwierdź wyszukiwanie" }, "header": { - "funkwhaleSupport": "Czy lubisz Funkwhale?", - "instanceSupport": "Wspieraj tę instancję Funkwhale", - "messages": "Twoje wiadomości", - "notifications": "Twoje powiadomienia" + "remote": "Wyszukaj zdalnego obiektu", + "rss": "Zasubskrybuj kanał RSS podcastu", + "search": "Szukaj" }, - "button": { - "submit": "Zrozumiano!", - "read": "Oznacz wszystko jako przeczytane" - }, - "loading": { - "notifications": "Ładowanie powiadomień…" - }, - "empty": { - "notifications": "Brak powiadomień do pokazania." - }, - "title": "Powiadomienia", "label": { - "reminder": "Przypomnij mi za:", - "showRead": "Pokaż odczytane powiadomienia" - }, - "message": { - "funkwhaleSupport": "Zauważyliśmy, że jesteś tu już przez pewien czas. Jeśli Funkwhale jest dla ciebie użyteczny, moglibyśmy skorzystać z twojej pomocy, aby jeszcze bardziej go ulepszyć!" + "albums": "Albumy", + "artists": "Artyści", + "playlists": "Listy odtwarzania", + "podcasts": "Podcasty", + "radios": "Stacje radiowe", + "series": "Seriale", + "tags": "Tagi", + "tracks": "Utwory" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nazwa użytkownika", - "loginStatus": { - "disabled": "Wyłączony", - "enabled": "Włączone", - "label": "Możliwość logowania" - }, - "displayName": "Wyświetlana nazwa", - "email": "Adres e-mail", - "lastActivity": "Ostatnia aktywność", - "lastChecked": "Ostatnio sprawdzano", - "permissions": "Uprawnienia", - "signupDate": "Data rejestracji", - "userType": "Rodzaj" - }, - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "megabyte": "MB", - "totalSize": "Całkowity rozmiar", - "uploadQuota": "Limit przestrzeni" - }, - "activity": { - "emittedFollows": "Wychodzące obserwacje bibliotek", - "emittedMessages": "Wychodzące wiadomości", - "firstSeen": "Widziany po raz pierwszy", - "receivedFollows": "Otrzymane obserwacje biblioteki" - } - }, - "header": { - "accountData": "Dane konta", - "activity": "Aktywność", - "audioContent": "Zawartość", - "localAccount": "Konto lokalne", - "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", - "noPolicy": "Nie masz żadnych reguł dla tego konta." - }, - "button": { - "addPolicy": "Dodaj politykę moderacji" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "domain": "Domena", - "libraries": "Biblioteki", - "linkedReports": "Powiązane zgłoszenia", - "openProfile": "Otwórz profil", - "remoteProfile": "Otwórz profil zdalny", - "requests": "Aplikacje o rejestrację", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "tooltip": { - "uploadQuota": "Określ, jak dużo zawartości może przesłać użytkownik. Pozostaw puste, aby użyć domyślnej wartości instancji." - }, - "option": { - "permission": { - "library": "Biblioteka", - "moderation": "Moderacja", - "settings": "Ustawienia" - } - }, - "description": { - "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." - }, - "notApplicable": "Niedostępne", - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "Base": { - "link": { - "accounts": "Konta", - "domains": "Domeny", - "reports": "Zgłoszenia", - "userRequests": "Aplikacje o rejestrację" - }, - "title": "Moderacja", - "menu": { - "secondary": "Podmenu" - } - }, - "DomainsDetail": { - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "instanceData": "Dane instancji", - "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", - "noPolicy": "Nie masz żadnych reguł dla tej domeny." - }, - "button": { - "addPolicy": "Dodaj politykę moderacji", - "addToAllowList": "Dodaj do listy zezwoleń", - "refreshNodeInfo": "Odśwież informacje o węźle", - "removeFromAllowList": "Usuń z listy zezwoleń" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "knownAccounts": "Znane konta", - "libraries": "Biblioteki", - "website": "Otwórz stronę internetową", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "activity": { - "emittedFollows": "Wychodzące obserwacje bibliotek", - "emittedMessages": "Wychodzące wiadomości", - "firstSeen": "Widziany po raz pierwszy", - "receivedFollows": "Otrzymane obserwacje biblioteki" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Wystąpił błąd podczas pobierania informacji o węźle", - "label": "Stan" - }, - "inAllowList": { - "label": "Jest obecny na liście zezwoleń", - "false": "Nie", - "true": "Tak" - }, - "lastChecked": "Ostatnio sprawdzano", - "domainName": "Nazwa", - "software": { - "label": "Oprogramowanie" - }, - "totalUsers": "Wszyscy użytkownicy" - } - }, - "description": { - "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." - }, - "notApplicable": "Niedostępne", - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "DomainsList": { - "button": { - "add": "Dodaj" - }, - "label": { - "addDomain": "Dodaj domenę", - "addToAllowList": "Dodaj do listy zezwoleń" - }, - "title": "Domeny", - "header": { - "domains": "Domeny", - "failure": "Wystąpił błąd podczas tworzenia domeny" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Wszystkie", - "resolved": "Rozwiązane", - "unresolved": "Nierozstrzygnięte" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "title": "Zgłoszenia", - "header": { - "reports": "Zgłoszenia" - }, - "label": { - "search": "Szukaj", - "status": "Stan" - }, - "placeholder": { - "search": "Szukaj za pomocą konta, podsumowania, domeny…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Wszystkie", - "approved": "Zatwierdzono", - "pending": "W toku", - "refused": "Odrzucone" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "label": { - "search": "Szukaj", - "status": "Stan" - }, - "placeholder": { - "search": "Szukaj za pomocą nazwy użytkownika…" - }, - "title": "Aplikacje o rejestrację", - "header": { - "userRequests": "Aplikacje o rejestrację" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data dostępu", - "firstSeen": "Widziany po raz pierwszy" - }, - "audioContent": { - "bitrate": { - "label": "Szybkość transmisji" - }, - "cachedSize": "Rozmiar w pamięci podręcznej", - "duration": "Czas trwania", - "size": "Rozmiar", - "track": "Utwór" - }, - "upload": { - "name": "Nazwa" - } - }, - "link": { - "account": "Konto", - "domain": "Domena", - "importStatus": "Stan importu", - "library": "Biblioteka", - "remoteProfile": "Otwórz profil zdalny", - "type": "Rodzaj", - "django": "Zobacz w panelu administracyjnym Django", - "visibility": "Widoczność" - }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "local": "Lokalne", - "uploadData": "Data przesłania" - }, - "button": { - "delete": "Usuń", - "download": "Pobierz" - }, - "modal": { - "delete": { - "header": "Usunąć ten przesłany plik?", - "content": { - "warning": "Ten plik zostanie usunięty. To działanie jest nieodwracalne." - } - } - }, - "notApplicable": "Niedostępne" - }, - "LibraryDetail": { - "link": { - "account": "Konto", - "albums": "Albumy", - "artists": "Artyści", - "domain": "Domena", - "reports": "Powiązane zgłoszenia", - "remoteProfile": "Otwórz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django", - "visibility": "Widoczność" - }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "libraryData": "Dane biblioteki", - "local": "Lokalne" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "library": { - "description": "Opis", - "name": "Nazwa" - }, - "activity": { - "firstSeen": "Widziany po raz pierwszy", - "followers": "Obserwatorzy" - } - }, - "button": { - "delete": "Usuń" - }, - "modal": { - "delete": { - "header": "Usunąć tę bibliotekę?", - "content": { - "warning": "Biblioteka zostanie usunięta razem z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "AlbumDetail": { - "header": { - "activity": "Aktywność", - "albumData": "Dane albumu", - "audioContent": "Zawartość", - "local": "Lokalne" - }, - "link": { - "artist": "Wykonawca", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "Otwórz profil lokalny", - "musicbrainz": "Otwórz na MusicBrainz", - "remoteProfile": "Otwórz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "album": { - "description": "Opis", - "title": "Tytuł" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten album?", - "content": { - "warning": "Ten album będzie usunięty wraz z plikami, utworami, ulubionymi oraz historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "ArtistDetail": { - "header": { - "activity": "Aktywność", - "artistData": "Dane wykonawcy", - "audioContent": "Zawartość", - "local": "Lokalne" - }, - "link": { - "albums": "Albumy", - "category": "Kategoria", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "Otwórz profil lokalny", - "musicbrainz": "Otwórz na MusicBrainz", - "remoteProfile": "Otwórz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "artist": { - "description": "Opis", - "name": "Nazwa" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć tego wykonawcę?", - "content": { - "warning": "Wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "TagDetail": { - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "tagData": "Dane taga" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "localProfile": "Otwórz profil lokalny", - "tracks": "Utwory", - "django": "Zobacz w panelu administracyjnym Django" - }, - "button": { - "delete": "Usuń" - }, - "modal": { - "delete": { - "header": "Usunąć ten tag?", - "content": { - "warning": "Tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." - } - } - }, - "table": { - "activity": { - "firstSeen": "Widziany po raz pierwszy" - }, - "tag": { - "name": "Nazwa" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Aktywność", - "local": "Lokalne", - "trackData": "Dane utworu" - }, - "link": { - "album": "Album", - "albumArtist": "Wykonawca albumu", - "artist": "Wykonawca", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "Otwórz profil lokalny", - "musicbrainz": "Otwórz na MusicBrainz", - "remoteProfile": "Otwórz profil zdalny", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "trackData": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "track": { - "copyright": "Prawa autorskie", - "description": "Opis", - "discNumber": "Numer płyty", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten utwór?", - "content": { - "warning": "Utwór zostanie usunięty wraz z powiązanymi plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "Base": { - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "edits": "Edycje", - "libraries": "Biblioteki", - "tags": "Tagi", - "tracks": "Utwory", - "uploads": "Przesłane pliki" - }, - "title": "Zarządzaj biblioteką", - "menu": { - "secondary": "Podmenu" - } - }, - "EditsList": { - "title": "Edycje", - "header": { - "edits": "Edycje biblioteki" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Usuń", + "openRemote": "Otwórz profil zdalny", + "refresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "channelData": "Dane kanału" + }, + "label": { + "local": "Lokalne" + }, + "link": { + "django": "Zobacz w panelu administracyjnym Django", + "localProfile": "Otwórz profil lokalny" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanał zostanie usunięty wraz z plikami, utworami i albumami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten kanał?" + } + }, "table": { - "channelData": { - "account": "Konto", - "category": "Kategoria", - "description": "Opis", - "domain": "Domena", - "name": "Nazwa", - "rss": "Kanał RSS", - "url": "Adres URL" + "activity": { + "edits": "Edycje", + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "linkedReports": "Powiązane zgłoszenia", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" }, "audioContent": { "albums": "Albumy", @@ -4047,40 +3245,16 @@ "tracks": "Utwory", "uploads": "Przesłane pliki" }, - "activity": { - "edits": "Edycje", - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "linkedReports": "Powiązane zgłoszenia", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" + "channelData": { + "account": "Konto", + "category": "Kategoria", + "description": "Opis", + "domain": "Domena", + "name": "Nazwa", + "rss": "Kanał RSS", + "url": "Adres URL" } }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "channelData": "Dane kanału" - }, - "button": { - "delete": "Usuń", - "openRemote": "Otwórz profil zdalny", - "refresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten kanał?", - "content": { - "warning": "Kanał zostanie usunięty wraz z plikami, utworami i albumami. To działanie jest nieodwracalne." - } - } - }, - "label": { - "local": "Lokalne" - }, - "link": { - "localProfile": "Otwórz profil lokalny", - "django": "Zobacz w panelu administracyjnym Django" - }, "warning": { "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" } @@ -4104,53 +3278,1198 @@ "channels": "Kanały", "federation": "Federacja", "instanceInfo": "Informacje o instancji", - "settings": "Ustawienia instancji", "moderation": "Moderacja", "music": "Muzyka", "playlists": "Listy odtwarzania", "sections": "Sekcje", "security": "Bezpieczeństwo", + "settings": "Ustawienia instancji", "signups": "Rejestracje", "stats": "Statystyki", "subsonic": "Subsonic", "ui": "Interfejs użytkownika" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "albumData": "Dane albumu", + "audioContent": "Zawartość", + "local": "Lokalne" + }, + "link": { + "artist": "Wykonawca", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "Otwórz profil lokalny", + "musicbrainz": "Otwórz na MusicBrainz", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten album będzie usunięty wraz z plikami, utworami, ulubionymi oraz historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten album?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "album": { + "description": "Opis", + "title": "Tytuł" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "ArtistDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "artistData": "Dane wykonawcy", + "audioContent": "Zawartość", + "local": "Lokalne" + }, + "link": { + "albums": "Albumy", + "category": "Kategoria", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "Otwórz profil lokalny", + "musicbrainz": "Otwórz na MusicBrainz", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć tego wykonawcę?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "artist": { + "description": "Opis", + "name": "Nazwa" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "Base": { + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "edits": "Edycje", + "libraries": "Biblioteki", + "tags": "Tagi", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Zarządzaj biblioteką" + }, + "EditsList": { + "header": { + "edits": "Edycje biblioteki" + }, + "title": "Edycje" + }, + "LibraryDetail": { + "button": { + "delete": "Usuń" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "libraryData": "Dane biblioteki", + "local": "Lokalne" + }, + "link": { + "account": "Konto", + "albums": "Albumy", + "artists": "Artyści", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki", + "visibility": "Widoczność" + }, + "modal": { + "delete": { + "content": { + "warning": "Biblioteka zostanie usunięta razem z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć tę bibliotekę?" + } + }, + "table": { + "activity": { + "firstSeen": "Widziany po raz pierwszy", + "followers": "Obserwatorzy" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + }, + "library": { + "description": "Opis", + "name": "Nazwa" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "TagDetail": { + "button": { + "delete": "Usuń" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "tagData": "Dane taga" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "django": "Zobacz w panelu administracyjnym Django", + "localProfile": "Otwórz profil lokalny", + "tracks": "Utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten tag?" + } + }, + "table": { + "activity": { + "firstSeen": "Widziany po raz pierwszy" + }, + "tag": { + "name": "Nazwa" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "local": "Lokalne", + "trackData": "Dane utworu" + }, + "link": { + "album": "Album", + "albumArtist": "Wykonawca albumu", + "artist": "Wykonawca", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "Otwórz profil lokalny", + "musicbrainz": "Otwórz na MusicBrainz", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Utwór zostanie usunięty wraz z powiązanymi plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten utwór?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "track": { + "copyright": "Prawa autorskie", + "description": "Opis", + "discNumber": "Numer płyty", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + }, + "trackData": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "UploadDetail": { + "button": { + "delete": "Usuń", + "download": "Pobierz" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "local": "Lokalne", + "uploadData": "Data przesłania" + }, + "link": { + "account": "Konto", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "importStatus": "Stan importu", + "library": "Biblioteka", + "remoteProfile": "Otwórz profil zdalny", + "type": "Rodzaj", + "visibility": "Widoczność" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten plik zostanie usunięty. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten przesłany plik?" + } + }, + "notApplicable": "Niedostępne", + "table": { + "activity": { + "accessedDate": "Data dostępu", + "firstSeen": "Widziany po raz pierwszy" + }, + "audioContent": { + "bitrate": { + "label": "Szybkość transmisji" + }, + "cachedSize": "Rozmiar w pamięci podręcznej", + "duration": "Czas trwania", + "size": "Rozmiar", + "track": "Utwór" + }, + "upload": { + "name": "Nazwa" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Dodaj politykę moderacji" + }, + "description": { + "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." + }, + "header": { + "accountData": "Dane konta", + "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", + "activity": "Aktywność", + "audioContent": "Zawartość", + "localAccount": "Konto lokalne", + "noPolicy": "Nie masz żadnych reguł dla tego konta." + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "libraries": "Biblioteki", + "linkedReports": "Powiązane zgłoszenia", + "openProfile": "Otwórz profil", + "remoteProfile": "Otwórz profil zdalny", + "requests": "Aplikacje o rejestrację", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "notApplicable": "Niedostępne", + "option": { + "permission": { + "library": "Biblioteka", + "moderation": "Moderacja", + "settings": "Ustawienia" + } + }, + "table": { + "accountData": { + "displayName": "Wyświetlana nazwa", + "email": "Adres e-mail", + "lastActivity": "Ostatnia aktywność", + "lastChecked": "Ostatnio sprawdzano", + "loginStatus": { + "disabled": "Wyłączony", + "enabled": "Włączone", + "label": "Możliwość logowania" + }, + "permissions": "Uprawnienia", + "signupDate": "Data rejestracji", + "userType": "Rodzaj", + "username": "Nazwa użytkownika" + }, + "activity": { + "emittedFollows": "Wychodzące obserwacje bibliotek", + "emittedMessages": "Wychodzące wiadomości", + "firstSeen": "Widziany po raz pierwszy", + "receivedFollows": "Otrzymane obserwacje biblioteki" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "megabyte": "MB", + "totalSize": "Całkowity rozmiar", + "uploadQuota": "Limit przestrzeni" + } + }, + "tooltip": { + "uploadQuota": "Określ, jak dużo zawartości może przesłać użytkownik. Pozostaw puste, aby użyć domyślnej wartości instancji." + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "Base": { + "link": { + "accounts": "Konta", + "domains": "Domeny", + "reports": "Zgłoszenia", + "userRequests": "Aplikacje o rejestrację" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Moderacja" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Dodaj politykę moderacji", + "addToAllowList": "Dodaj do listy zezwoleń", + "refreshNodeInfo": "Odśwież informacje o węźle", + "removeFromAllowList": "Usuń z listy zezwoleń" + }, + "description": { + "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." + }, + "header": { + "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", + "activity": "Aktywność", + "audioContent": "Zawartość", + "instanceData": "Dane instancji", + "noPolicy": "Nie masz żadnych reguł dla tej domeny." + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "django": "Zobacz w panelu administracyjnym Django", + "knownAccounts": "Znane konta", + "libraries": "Biblioteki", + "tracks": "Utwory", + "uploads": "Przesłane pliki", + "website": "Otwórz stronę internetową" + }, + "notApplicable": "Niedostępne", + "table": { + "activity": { + "emittedFollows": "Wychodzące obserwacje bibliotek", + "emittedMessages": "Wychodzące wiadomości", + "firstSeen": "Widziany po raz pierwszy", + "receivedFollows": "Otrzymane obserwacje biblioteki" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + }, + "instanceData": { + "domainName": "Nazwa", + "inAllowList": { + "false": "Nie", + "label": "Jest obecny na liście zezwoleń", + "true": "Tak" + }, + "lastChecked": "Ostatnio sprawdzano", + "nodeInfoStatus": { + "label": "Stan", + "value": "Wystąpił błąd podczas pobierania informacji o węźle" + }, + "software": { + "label": "Oprogramowanie" + }, + "totalUsers": "Wszyscy użytkownicy" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "DomainsList": { + "button": { + "add": "Dodaj" + }, + "header": { + "domains": "Domeny", + "failure": "Wystąpił błąd podczas tworzenia domeny" + }, + "label": { + "addDomain": "Dodaj domenę", + "addToAllowList": "Dodaj do listy zezwoleń" + }, + "title": "Domeny" + }, + "ReportsList": { + "header": { + "reports": "Zgłoszenia" + }, + "label": { + "search": "Szukaj", + "status": "Stan" + }, + "option": { + "status": { + "all": "Wszystkie", + "resolved": "Rozwiązane", + "unresolved": "Nierozstrzygnięte" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "placeholder": { + "search": "Szukaj za pomocą konta, podsumowania, domeny…" + }, + "title": "Zgłoszenia" + }, + "RequestsList": { + "header": { + "userRequests": "Aplikacje o rejestrację" + }, + "label": { + "search": "Szukaj", + "status": "Stan" + }, + "option": { + "status": { + "all": "Wszystkie", + "approved": "Zatwierdzono", + "pending": "W toku", + "refused": "Odrzucone" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy użytkownika…" + }, + "title": "Aplikacje o rejestrację" + } + }, "users": { "Base": { "link": { "invitations": "Zaproszenia", "users": "Użytkownicy" }, - "title": "Zarządzaj użytkownikami", "menu": { "secondary": "Podmenu" + }, + "title": "Zarządzaj użytkownikami" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Logowanie…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Nie można potwierdzić twojego adresu e-mail", + "success": "Potwierdzono adres e-mail" + }, + "label": { + "confirmationCode": "Kod potwierdzenia" + }, + "link": { + "back": "Wróć do logowania", + "login": "Przejdź do logowania" + }, + "message": { + "success": "Twój adres e-mail został potwierdzony, możesz teraz korzystać bez ograniczeń." + }, + "title": "Potwierdź swój adres e-mail" + }, + "Login": { + "header": { + "login": "Zaloguj się na swoje konto Funkwhale" + }, + "title": "Zaloguj się" + }, + "PasswordReset": { + "button": { + "requestReset": "Poproś o zresetowanie hasła" + }, + "header": { + "failure": "Wystąpił błąd podczas próby zresetowania hasła", + "reset": "Zresetuj hasło" + }, + "help": { + "form": "Użyj tego formularza, aby poprosić o zresetowanie hasła. Otrzymasz wiadomość z instrukcjami resetowania hasła na podany adres e-mail." + }, + "label": { + "email": "Adres e-mail" + }, + "link": { + "back": "Wróć do logowania" + }, + "placeholder": { + "email": "Wprowadź adres e-mail powiązany z twoim kontem" + }, + "title": "Zresetuj hasło" + }, + "PasswordResetConfirm": { + "button": { + "update": "Aktualizuj swoje hasło" + }, + "header": { + "failure": "Wystąpił błąd podczas zmieniania Twojego hasła", + "success": "Pomyślnie zaktualizowano hasło" + }, + "label": { + "newPassword": "Nowe hasło" + }, + "link": { + "back": "Wróć do logowania", + "login": "Przejdź do logowania" + }, + "message": { + "requestSent": "Jeżeli adres e-mail podany w poprzednim kroku jest prawidłowy i przypisany do konta użytkownika, powinieneś otrzymać wiadomość e-mail z instrukcjami resetowania hasła w przeciągu kilku minut.", + "success": "Twoje hasło zostało pomyślnie zmienione." + }, + "title": "Zmień swoje hasło" + }, + "Plugins": { + "title": "Zarządzaj rozszerzeniami" + }, + "ProfileActivity": { + "header": { + "playlists": "Listy odtwarzania", + "recentlyFavorited": "Ostatnio polubione", + "recentlyListened": "Ostatnio odsłuchane" + } + }, + "ProfileBase": { + "label": { + "self": "To Ty!" + }, + "link": { + "activity": "Aktywność", + "domainView": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "overview": "Przegląd" + }, + "title": "Profil { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Anuluj", + "createChannel": "Utwórz kanał", + "next": "Następny krok", + "previous": "Poprzedni krok" + }, + "header": { + "channels": "Kanały", + "libraries": "Biblioteki", + "sharedLibraries": "Ten użytkownik udostępnił następujące biblioteki" + }, + "link": { + "addNew": "Dodaj" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Kanał wykonawcy" + }, + "header": "Utwórz kanał", + "podcast": { + "header": "Kanał podcastowy" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Utwórz konto Funkwhale" + }, + "title": "Rejestracja" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń", + "delete": "Usuń…", + "edit": "Edytuj…", + "embed": "Osadź", + "play": "Odtwarzaj", + "updateChannel": "Zapisz kanał", + "upload": "Prześlij pliki" + }, + "header": { + "artistChannel": "Kanał wykonawcy", + "podcastChannel": "Kanał podcastowy" + }, + "link": { + "channelEpisodes": "Wszystkie odcinki", + "channelOverview": "Przegląd", + "channelTracks": "Utwory", + "domainView": "Zobacz na { domain }", + "mirrored": "Odzwierciedlane z { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym" + }, + "meta": { + "episodes": "{ n } epizod | { n } epizody", + "listenings": "{ n } odsłuchanie | { n } odsłuchania", + "subscribers": "{ n } subskrybent | { n } subskrybentów", + "tracks": "{ n } utwór | { n } utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanał zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten kanał?" + }, + "embed": { + "header": "Osadź prace tego wykonawcy na swojej stronie internetowej" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Jeśli używasz Mastodona albo innych aplikacji Fediverse, to możesz zasubskrybować to konto:" + }, + "header": "Obserwuj na Fediverse" + }, + "funkwhale": { + "header": "Obserwuj na Funkwhale" + }, + "header": "Obserwuj ten kanał", + "rss": { + "content": { + "help": "Wklej następujący adres URL do swojej ulubionej aplikacji do podcastów:" + }, + "header": "Zasubskrybuj za pomocą RSS" + } + } + }, + "title": "Kanał" + }, + "DetailOverview": { + "header": { + "albums": "Albumy", + "latestEpisodes": "Najnowsze odcinki", + "latestTracks": "Najnowsze utwory", + "series": "Seriale", + "uploadsFailure": "Kilka przesłanych plików nie mogło zostać opublikowane", + "uploadsProcessing": "Przesłane pliki są przetwarzane", + "uploadsSuccess": "Przesłane pliki zostały opublikowane pomyślnie" + }, + "link": { + "addAlbum": "Dodaj", + "erroredUploads": "Zobacz pliki, których import zakończył się błędem", + "skippedUploads": "Zobacz pominięte pliki" + }, + "message": { + "processing": "Twoje przesłane pliki są przetwarzane przez Funkwhale i będą wkrótce dostępne." + }, + "meta": { + "progress": "Przetworzone pliki:" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Anuluj", + "subscribe": "Obserwuj" + }, + "link": { + "addNew": "Dodaj" + }, + "modal": { + "subscription": { + "header": "Subskrypcja" + } + }, + "placeholder": { + "search": "Filtruj po nazwie…" + }, + "title": "Obserwowane kanały" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Biblioteki", + "tracks": "Utwory" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Dodaj zawartość" + }, + "Home": { + "button": { + "start": "Rozpocznij" + }, + "description": { + "channel": { + "1": "Jeżeli jesteś muzykiem lub tworzysz podcasty, kanały są stworzone dla Ciebie!", + "2": "Udostępnij twoje utwory publicznie i zdobądź obserwatorów na Funkwhale, Fediverse albo jakiejkolwiek aplikacji do podcastów." + }, + "follow": "Możesz zaobserwować biblioteki innych użytkowników, aby uzyskać dostęp do nowej muzyki. Publiczne biblioteki mogą być zaobserwowane natychmiast, a do zaobserwowania prywatnej biblioteki będziesz potrzebował zgody jej właściciela.", + "upload": "Prześlij swoją osobistą muzykę do Funkwhale, aby czerpać z niej przyjemność w każdym miejscu oraz dzielić się nią z przyjaciółmi i rodziną." + }, + "header": { + "channel": "Publikuj swoje prace na kanale", + "follow": "Obserwuj zdalne biblioteki", + "upload": "Prześlij do biblioteki treści innych wykonawców" + }, + "help": { + "uploadQuota": "Ta instancja oferuje {quota} przestrzeni dla każdego użytkownika." + }, + "title": "Dodaj lub zarządzaj zawartością" + }, + "libraries": { + "Card": { + "button": { + "upload": "Prześlij pliki" + }, + "label": { + "size": "Łączny rozmiar wszystkich plików w tej bibliotece" + }, + "link": { + "details": "Szczegóły biblioteki" + }, + "meta": { + "tracks": "{ n } utwór | { n } utwory" + } + }, + "FilesTable": { + "action": { + "delete": "Usuń", + "restartImport": "Uruchom importowanie ponownie" + }, + "button": { + "showStatus": "Pokaż więcej informacji dotyczących procesu importowania tego utworu" + }, + "empty": { + "noTracks": "Nie dodano jeszcze żadnych utworów do tej biblioteki" + }, + "label": { + "importStatus": "Stan importu", + "search": "Szukaj" + }, + "notApplicable": "Niedostępne", + "option": { + "status": { + "all": "Wszystkie", + "draft": "Oczekujący", + "failed": "Zakończony błędem", + "finished": "Ukończono", + "pending": "W toku", + "skipped": "Pominięto" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą tytułu, wykonawcy, albumu…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "duration": "Czas trwania", + "importStatus": "Stan importu", + "size": "Rozmiar", + "title": "Tytuł", + "uploadDate": "Data przesłania" + } + } + } + }, + "Form": { + "button": { + "confirm": "Usuń bibliotekę", + "create": "Utwórz bibliotekę", + "delete": "Usuń", + "update": "Zapisz bibliotekę" + }, + "description": { + "library": "Biblioteki pomagają organizować i udostępniać kolekcje muzyki. Możesz przesłać własną kolekcję muzyki na Funkwhale i dzielić się nią z rodziną i znajomymi.", + "visibility": "Możesz udostępniać swoją bibliotekę innym, nie zważając na jej widoczność." + }, + "header": { + "failure": "Błąd" + }, + "label": { + "description": "Opis", + "name": "Nazwa", + "visibility": "Widoczność" + }, + "message": { + "libraryCreated": "Utworzono bibliotekę", + "libraryDeleted": "Usunięto bibliotekę", + "libraryUpdated": "Zaktualizowano bibliotekę" + }, + "modal": { + "delete": { + "content": { + "warning": "Biblioteka i wszystkie znajdujące się w niej utwory zostaną usunięte. To działanie jest nieodwracalne." + }, + "header": "Usunąć tę bibliotekę?" + } + }, + "placeholder": { + "description": "Ta biblioteka zawiera moją osobistą muzykę, mam nadzieję że Ci się spodoba.", + "name": "Moja wspaniała biblioteka" + } + }, + "Home": { + "empty": { + "noLibrary": "Wygląda na to, że nie masz jeszcze żadnej biblioteki — może to już czas, żeby jakąś utworzyć?" + }, + "header": { + "libraries": "Moje biblioteki" + }, + "link": { + "createLibrary": "Utwórz nową bibliotekę" + }, + "loading": { + "libraries": "Ładowanie bibliotek…" + } + }, + "Quota": { + "button": { + "purge": "Wyczyść" + }, + "header": { + "currentUsage": "Obecne użycie" + }, + "label": { + "currentUsage": "Wykorzystano { current } z przydzielonego { max }", + "errored": "Pliki zakończone błędem", + "pending": "Pliki w trakcie przetwarzania", + "skipped": "Pominięte pliki" + }, + "link": { + "viewFiles": "Zobacz pliki" + }, + "loading": { + "currentUsage": "Ładowanie danych o użyciu…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Ta opcja usunie utwory które zostały przesłane, ale wystąpił błąd podczas ich importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pliki zakończone błędami?" + }, + "purgePending": { + "content": { + "description": "Ta opcja usunie utwory które zostały przesłane, ale nie zostały jeszcze przetworzone, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pliki w toku?" + }, + "purgeSkipped": { + "content": { + "description": "Ta opcja usunie utwory które zostały przesłane, lecz pominięte w procesie importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pominięte pliki?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cofnij prośbę o obserwowanie", + "follow": "Obserwuj", + "pending": "Obserwowanie oczekuje na zatwierdzenie", + "unfollow": "Przestań obserwować" + }, + "label": { + "scanFailure": "Problem podczas skanowania", + "scanPartialSuccess": "Przeskanowano z błędami", + "scanPending": "Skanowanie w toku", + "scanProgress": "Skanowanie… ({ progress }%)", + "scanSuccess": "Przeskanowano", + "sharingLink": "Odnośnik do udostępnienia" + }, + "link": { + "scan": "Skanuj teraz", + "scanDetails": "Szczegóły" + }, + "message": { + "scanLaunched": "Uruchomiono skanowanie", + "scanSkipped": "Skanowanie pominięte (poprzednie skanowanie odbyło się zbyt niedawno)" + }, + "meta": { + "failedTracks": "Utwory zakończone błędem:", + "lastUpdate": "Ostatnia aktualizacja:", + "tracks": "{ n } utwór | { n } utwory" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Gdy przestaniesz obserwować tę bibliotekę, stracisz dostęp do jej zawartości." + }, + "header": "Czy chcesz przestać obserwować tę bibliotekę?" + } + }, + "tooltip": { + "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", + "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" + } + }, + "Home": { + "button": { + "refresh": "Odśwież" + }, + "description": { + "remoteLibraries": "Zdalne biblioteki należą do użytkowników innych instancji. Możesz uzyskać do nich dostęp jeżeli został Ci on przyznany lub jeżeli są publiczne." + }, + "header": { + "knownLibraries": "Znane biblioteki", + "remoteLibraries": "Zdalne biblioteki" + }, + "loading": { + "remoteLibraries": "Ładowanie zdalnych bibliotek…" + } + }, + "ScanForm": { + "button": { + "submit": "Zatwierdź wyszukiwanie" + }, + "header": { + "failure": "Wystąpił błąd podczas pobierania zdalnej biblioteki" + }, + "label": { + "search": "Wyszukaj w zdalnej bibliotece" + }, + "placeholder": { + "url": "Wprowadź adres URL biblioteki" } } } }, - "Search": { - "label": { - "albums": "Albumy", - "artists": "Artyści", - "playlists": "Listy odtwarzania", - "podcasts": "Podcasty", - "radios": "Stacje radiowe", - "series": "Seriale", - "tags": "Tagi", - "tracks": "Utwory" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } }, - "header": { - "search": "Szukaj", - "remote": "Wyszukaj zdalnego obiektu", - "rss": "Zasubskrybuj kanał RSS podcastu" + "DetailOverview": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } }, - "button": { - "submit": "Zatwierdź wyszukiwanie" + "DetailTracks": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } + }, + "Edit": { + "button": { + "accept": "Zaakceptuj", + "reject": "Odrzuć" + }, + "empty": { + "noFollowers": "Nikt nie obserwuje tej biblioteki" + }, + "header": { + "followers": "Obserwatorzy", + "libraryContents": "Zawartość biblioteki" + }, + "loading": { + "followers": "Ładowanie obserwujących…" + }, + "table": { + "action": { + "header": { + "action": "Działanie", + "date": "Data", + "status": "Stan", + "user": "Użytkownik" + }, + "status": { + "accepted": "Zaakceptowano", + "pending": "Oczekuje na przyjęcie", + "rejected": "Odrzucono" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Edytuj", + "upload": "Prześlij pliki" + }, + "description": { + "sharingLink": "Podziel się tym odnośnikiem z innymi użytkownikami, aby mogli poprosić o dostęp do Twojej biblioteki poprzez wklejenie go w pole wyszukiwania." + }, + "label": { + "instance": "Ograniczona", + "private": "Prywatne", + "public": "Publiczne", + "sharingLink": "Odnośnik do udostępnienia" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "owner": "Należy do { username }", + "tracks": "Utwory" + }, + "meta": { + "tracks": "{ n } utwór | { n } utwory" + }, + "title": "Biblioteka", + "tooltip": { + "instance": "Dostęp do tej biblioteki jest ograniczony tylko do użytkowników tej instancji", + "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", + "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń listę odtwarzania", + "delete": "Usuń", + "edit": "Edytuj", + "embed": "Osadź", + "playAll": "Odtwarzaj wszystkie", + "stopEdit": "Przestań edytować" + }, + "empty": { + "noTracks": "Nie ma jeszcze utworów na tej liście odtwarzania" + }, + "header": { + "tracks": "Utwory" + }, + "meta": { + "tracks": "Lista odtwarzania stworzona przez { username } zawierająca { n } utwór | Lista odtwarzania stworzona przez { username } zawierająca { n } utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Spowoduje to bezpowrotne usunięcie listy odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Czy chcesz usunąć listę odtwarzania „{ playlist }”?" + }, + "embed": { + "header": "Osadź tę listę odtwarzania na swojej stronie internetowej" + } + }, + "title": "Lista odtwarzania" + }, "List": { + "button": { + "create": "Utwórz listę odtwarzania", + "manage": "Zarządzaj swoimi listami odtwarzania", + "search": "Szukaj" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj listy odtwarzania", + "playlists": "Listy odtwarzania" + }, + "label": { + "search": "Szukaj" + }, "ordering": { "direction": { "ascending": "Rosnąco", @@ -4159,58 +4478,11 @@ }, "label": "Porządkowanie" }, - "header": { - "browse": "Przeglądaj listy odtwarzania", - "playlists": "Listy odtwarzania" - }, - "button": { - "create": "Utwórz listę odtwarzania", - "manage": "Zarządzaj swoimi listami odtwarzania", - "search": "Szukaj" - }, - "placeholder": { - "search": "Wprowadź nazwę listy odtwarzania…" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, "pagination": { "results": "Wyniki na stronie" }, - "label": { - "search": "Szukaj" - } - }, - "Detail": { - "button": { - "cancel": "Anuluj", - "delete": "Usuń", - "confirm": "Usuń listę odtwarzania", - "edit": "Edytuj", - "embed": "Osadź", - "playAll": "Odtwarzaj wszystkie", - "stopEdit": "Przestań edytować" - }, - "modal": { - "delete": { - "header": "Czy chcesz usunąć listę odtwarzania „{ playlist }”?", - "content": { - "warning": "Spowoduje to bezpowrotne usunięcie listy odtwarzania. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź tę listę odtwarzania na swojej stronie internetowej" - } - }, - "title": "Lista odtwarzania", - "meta": { - "tracks": "Lista odtwarzania stworzona przez { username } zawierająca { n } utwór | Lista odtwarzania stworzona przez { username } zawierająca { n } utwory" - }, - "empty": { - "noTracks": "Nie ma jeszcze utworów na tej liście odtwarzania" - }, - "header": { - "tracks": "Utwory" + "placeholder": { + "search": "Wprowadź nazwę listy odtwarzania…" } } }, @@ -4220,287 +4492,22 @@ "confirm": "Usuń stację radiową", "edit": "Edytuj…" }, - "modal": { - "delete": { - "header": "Czy chcesz usunąć stację radiową „{ radio }”?", - "content": { - "warning": "Spowoduje to bezpowrotne usunięcie stacji radiowej. To działanie jest nieodwracalne." - } - } - }, "empty": { "noTracks": "Nie dodano jeszcze żadnych utworów do tej stacji radiowej" }, - "title": "Stacja radiowa", "header": { "tracks": "Utwory" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Dodano { n } utwór do kolejki | Dodano { n } utwory do kolejki" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Dostęp do plików audio, bibliotek, wykonawców, albumów i utworów", - "label": "Biblioteki i przesłane pliki" - }, - "filters": { - "description": "Dostęp do filtrów treści", - "label": "Filtry treści" - }, - "profile": { - "description": "Dostęp do adresu e-mail, nazwy użytkownika i informacji o profilu", - "label": "Profil" - }, - "edits": { - "description": "Dostęp do edycji", - "label": "Edycje" - }, - "follows": { - "description": "Dostęp do obserwowanych", - "label": "Obserwacje" - }, - "listenings": { - "description": "Dostęp do historii odtwarzania", - "label": "Odsłuchania" - }, - "reports": { - "description": "Dostęp do zgłoszeń moderacyjnych", - "label": "Zgłoszenia" - }, - "notifications": { - "description": "Dostęp do powiadomień", - "label": "Powiadomienia" - }, - "playlists": { - "description": "Dostęp do list odtwarzania", - "label": "Listy odtwarzania" - }, - "radios": { - "description": "Dostęp do stacji radiowych", - "label": "Stacje radiowe" - }, - "security": { - "description": "Dostęp do ustawień związanych z bezpieczeństwem np. haseł i autoryzacji", - "label": "Bezpieczeństwo" - }, - "favorites": { - "label": "Ulubione" - } }, - "filters": { - "accessedDate": "Data dostępu", - "albumTitle": "Nazwa albumu", - "artistName": "Nazwa wykonawcy", - "bitrate": "Szybkość transmisji", - "creationDate": "Data utworzenia", - "domain": "Domena", - "duration": "Czas trwania", - "expirationDate": "Data wygaśnięcia", - "firstSeen": "Data widzenia po raz pierwszy", - "followers": "Obserwatorzy", - "itemsCount": "Elementy", - "lastActivity": "Ostatnia aktywność", - "lastSeen": "Data ostatniej aktywności", - "modificationDate": "Data modyfikacji", - "name": "Nazwa", - "receivedMessages": "Otrzymane wiadomości", - "releaseDate": "Data wydania", - "dateJoined": "Data rejestracji", - "size": "Rozmiar", - "trackTitle": "Tytuł utworu", - "uploads": "Przesłane pliki", - "username": "Nazwa użytkownika", - "users": "Użytkownicy" - }, - "fields": { - "privacyLevel": { - "label": "Widoczność aktywności", - "help": "Ustal poziom widoczności twojej aktywności", - "shortChoices": { - "public": "Każdy", - "instance": "Instancja", - "private": "Prywatne" + "modal": { + "delete": { + "content": { + "warning": "Spowoduje to bezpowrotne usunięcie stacji radiowej. To działanie jest nieodwracalne." }, - "choices": { - "instance": "Każdy na tej instancji", - "public": "Każdy na dowolnej instancji", - "private": "Nikt poza mną" - } - }, - "summary": { - "label": "O mnie" - }, - "reportType": { - "label": "Kategoria", - "choices": { - "illegalContent": "Nielegalne treści", - "invalidMetadata": "Nieprawidłowe metadane", - "offensiveContent": "Obraźliwe treści", - "other": "lnna", - "takedownRequest": "Prośba o usunięcie" - } - }, - "importStatus": { - "label": "Kliknij, aby zobaczyć więcej informacji dotyczących procesu importowania tego pliku", - "choices": { - "draft": { - "label": "Oczekujący", - "help": "Ten utwór został przesłany, ale nie został jeszcze wyznaczony do przetwarzania" - }, - "errored": { - "label": "Zakończono błędem", - "help": "Wystąpił błąd podczas przetwarzania tego utworu, upewnij się że posiada on poprawne metadane" - }, - "finished": { - "label": "Ukończono", - "help": "Zaimportowano" - }, - "pending": { - "label": "W toku", - "help": "Ten utwór został przesłany, ale nie został jeszcze przetworzony przez serwer" - }, - "skipped": { - "label": "Pominięto", - "help": "Ten utwór jest już w jednej z bibliotek" - } - } - }, - "contentCategory": { - "label": "Kategoria treści", - "choices": { - "music": "Muzyka", - "other": "lnne", - "podcast": "Podcast" - } + "header": "Czy chcesz usunąć stację radiową „{ radio }”?" } - } + }, + "title": "Stacja radiowa" } - }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Konto" - }, - "album": { - "typeLabel": "Album", - "label": "Zgłoś ten album…" - }, - "artist": { - "typeLabel": "Wykonawca", - "label": "Zgłoś tego wykonawcę…" - }, - "channel": { - "typeLabel": "Kanał", - "label": "Zgłoś ten kanał…" - }, - "library": { - "typeLabel": "Biblioteka", - "label": "Zgłoś tę bibliotekę…" - }, - "playlist": { - "typeLabel": "Lista odtwarzania", - "label": "Zgłoś tę listę odtwarzania…" - }, - "track": { - "label": "Zgłoś ten utwór…", - "typeLabel": "Utwór" - } - }, - "useReportConfigs": { - "account": { - "label": "Konto", - "summary": "O mnie" - }, - "album": { - "label": "Album", - "releaseDate": "Data wydania", - "title": "Tytuł" - }, - "artist": { - "label": "Wykonawca" - }, - "channel": { - "label": "Kanał" - }, - "track": { - "copyright": "Prawa autorskie", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł", - "label": "Utwór" - }, - "creationDate": { - "label": "Data utworzenia" - }, - "library": { - "description": "Opis", - "label": "Biblioteka" - }, - "musicbrainzId": { - "label": "Identyfikator MusicBrainz" - }, - "name": { - "label": "Nazwa" - }, - "playlist": { - "label": "Lista odtwarzania" - }, - "tags": { - "label": "Tagi" - }, - "visibility": { - "label": "Widoczność" - } - }, - "useEditConfigs": { - "track": { - "copyright": "Prawa autorskie", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł" - }, - "cover": { - "label": "Okładka" - }, - "description": { - "label": "Opis" - }, - "artist": { - "name": "Nazwa" - }, - "album": { - "releaseDate": "Data wydania", - "title": "Tytuł" - }, - "tags": { - "label": "Tagi" - } - } - }, - "useThemeList": { - "darkTheme": "Ciemny", - "lightTheme": "Jasny" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Dostępna jest nowa wersja aplikacji.", - "actions": { - "later": "Póżniej", - "update": "Aktualizuj" - } - }, - "axios": { - "rateLimitDelay": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie za { delay }", - "rateLimitLater": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie później" } } } diff --git a/front/src/locales/ru.json b/front/src/locales/ru.json index a81974ad7..229d1b8c1 100644 --- a/front/src/locales/ru.json +++ b/front/src/locales/ru.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Загрузка..." + "loading": "Загрузка…" }, "components": { "About": { @@ -172,7 +172,7 @@ "next": "Следующий трек", "pause": "Пауза", "play": "Проиграть", - "populatingRadio": "Получение радио трека...", + "populatingRadio": "Получение радио трека…", "previous": "Предыдущий трек", "queue": "Очередь", "remove": "Удалить", @@ -1958,7 +1958,7 @@ "suggest": "Предложите правку для этого трека" }, "message": { - "remote": " Этот объект управляется другим сервером, Вы не можете редактировать его." + "remote": "Этот объект управляется другим сервером, Вы не можете редактировать его." } }, "radios": { diff --git a/front/src/locales/zh_Hans.json b/front/src/locales/zh_Hans.json index 05f53ab02..16604ba75 100644 --- a/front/src/locales/zh_Hans.json +++ b/front/src/locales/zh_Hans.json @@ -1,6 +1,6 @@ { "App": { - "loading": "加载中..." + "loading": "加载中…" }, "components": { "About": { @@ -109,6 +109,9 @@ "statistics": "统计", "welcome": "欢迎来到 { podName }!" }, + "help": { + "registrationsClosed": "本实例已关闭注册。您可以使用以下链接在其他实例注册。" + }, "link": { "findOtherPod": "查看其他实例", "funkwhale": "访问 funkwhale.audio", @@ -157,6 +160,7 @@ }, "header": { "failure": "此歌曲无法加载", + "noSources": "该音轨没有可用音源。", "radio": "您有一个电台正在播放" }, "label": { @@ -168,10 +172,13 @@ "next": "下一首", "pause": "暂停", "play": "播放", + "populatingRadio": "迷人的广播曲目…", "previous": "上一首", "queue": "播放队列", "remove": "删除", - "restart": "从头开始" + "restart": "从头开始", + "selectTrack": "选择轨道", + "showCoverArt": "节目封面设计" }, "message": { "automaticPlay": "下一首歌曲将在几秒钟后自动播放…", diff --git a/front/src/main.ts b/front/src/main.ts index b9bb82224..597b47079 100644 --- a/front/src/main.ts +++ b/front/src/main.ts @@ -8,6 +8,8 @@ import { createApp, defineAsyncComponent, h } from 'vue' import useLogger from '~/composables/useLogger' import useTheme from '~/composables/useTheme' +import '~/style/_main.scss' + import '~/api' // NOTE: Set the theme as fast as possible @@ -48,6 +50,7 @@ const moduleContext: InitModuleContext = { // and that the instance url is set before any requests are made const IMPORTANT_MODULES_QUEUE = ['axios', 'instance'] const waitForImportantModules = async () => { + logger.debug('Loading important modules') for (const moduleName of IMPORTANT_MODULES_QUEUE) { const path = `./init/${moduleName}.ts` if (!(path in modules)) { @@ -55,16 +58,24 @@ const waitForImportantModules = async () => { continue } - await modules[path].install?.(moduleContext) + await modules[path].install?.(moduleContext)?.catch((error: Error) => { + logger.error(`Failed to load important module: ${path}`, error) + throw error + }) + delete modules[path] } } waitForImportantModules() + .then(() => logger.debug('Loading rest of the modules')) // NOTE: We load the modules in parallel .then(() => Promise.all(Object.values(modules).map(module => module.install?.(moduleContext)))) .catch(error => logger.error('Failed to load modules:', error)) // NOTE: We need to mount the app after all modules are loaded - .finally(() => app.mount('#app')) + .finally(() => { + logger.debug('Mounting app') + app.mount('#app') + }) // TODO (wvffle): Rename filters from useSharedLabels to filters from backend diff --git a/front/src/router/guards.ts b/front/src/router/guards.ts index f9084416a..46804b98c 100644 --- a/front/src/router/guards.ts +++ b/front/src/router/guards.ts @@ -1,20 +1,23 @@ import type { NavigationGuardNext, RouteLocationNamedRaw, RouteLocationNormalized } from 'vue-router' import type { Permission } from '~/store/auth' +import useLogger from '~/composables/useLogger' import store from '~/store' +const logger = useLogger() + export const hasPermissions = (permission: Permission) => (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { if (store.state.auth.authenticated && store.state.auth.availablePermissions[permission]) { return next() } - console.log('Not authenticated. Redirecting to library.') + logger.warn('Not authenticated. Redirecting to library.') next({ name: 'library.index' }) } export const requireLoggedIn = (fallbackLocation?: RouteLocationNamedRaw) => (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { if (store.state.auth.authenticated) return next() - console.log('!', to) + logger.debug('!', to) return next(fallbackLocation ?? { name: 'login', query: { next: to.fullPath } }) } diff --git a/front/src/store/auth.ts b/front/src/store/auth.ts index a8b581890..d2a3f1530 100644 --- a/front/src/store/auth.ts +++ b/front/src/store/auth.ts @@ -168,7 +168,7 @@ const store: Module<State, RootState> = { try { await axios.post('users/logout') } catch (error) { - console.log('Error while logging out, probably logged in via oauth') + logger.error('Error while logging out, probably logged in via oauth', error) } const modules = [ @@ -249,11 +249,11 @@ const store: Module<State, RootState> = { const redirectUri = encodeURIComponent(`${location.origin}/auth/callback`) const params = `response_type=code&scope=${encodeURIComponent(NEEDED_SCOPES)}&redirect_uri=${redirectUri}&state=${next}&client_id=${state.oauth.clientId}` const authorizeUrl = `${rootState.instance.instanceUrl}authorize?${params}` - console.log('Redirecting user...', authorizeUrl) + logger.log('Redirecting user...', authorizeUrl) window.location.href = authorizeUrl }, async handleOauthCallback ({ state, commit, dispatch }, authorizationCode) { - console.log('Fetching token...') + logger.log('Fetching token...') const payload = { client_id: state.oauth.clientId, client_secret: state.oauth.clientSecret, diff --git a/front/src/store/instance.ts b/front/src/store/instance.ts index f0d20bb6b..540d85e90 100644 --- a/front/src/store/instance.ts +++ b/front/src/store/instance.ts @@ -244,7 +244,7 @@ const store: Module<State, RootState> = { const response = await axios.get('instance/settings/') .catch(err => logger.error('Error while fetching settings', err.response.data)) - if (!response) return + if (!response?.data || !Array.isArray(response?.data)) return logger.info('Successfully fetched instance settings') diff --git a/front/src/store/ui.ts b/front/src/store/ui.ts index 9baf941ce..f7ad005df 100644 --- a/front/src/store/ui.ts +++ b/front/src/store/ui.ts @@ -5,6 +5,8 @@ import type { SUPPORTED_LOCALES } from '~/init/locale' import axios from 'axios' import moment from 'moment' +import useLogger from '~/composables/useLogger' + type SupportedExtension = 'flac' | 'ogg' | 'mp3' | 'opus' | 'aac' | 'm4a' | 'aiff' | 'aif' export type WebSocketEventName = 'inbox.item_added' | 'import.status_updated' | 'mutation.created' | 'mutation.updated' @@ -50,6 +52,8 @@ export interface State { websocketEventsHandlers: Record<WebSocketEventName, WebSocketHandlers> } +const logger = useLogger() + const store: Module<State, RootState> = { namespaced: true, state: { @@ -236,7 +240,7 @@ const store: Module<State, RootState> = { websocketEvent ({ state }, event: WebSocketEvent) { const handlers = state.websocketEventsHandlers[event.type] - console.log('Dispatching websocket event', event, handlers) + logger.log('Dispatching websocket event', event, handlers) if (!handlers) { return } diff --git a/front/src/style/_main.scss b/front/src/style/_main.scss index ddae53193..797948cba 100644 --- a/front/src/style/_main.scss +++ b/front/src/style/_main.scss @@ -5,6 +5,8 @@ $desktop-sidebar-width: 275px; $widedesktop-sidebar-width: 275px; $bottom-player-height: 4rem; +@import "@funkwhale/ui/style.css"; + @import "./globals/_fomantic.scss"; @import "./vendor/_media.scss"; diff --git a/front/src/style/globals/_utils.scss b/front/src/style/globals/_utils.scss index 67423876f..ccb00ce7d 100644 --- a/front/src/style/globals/_utils.scss +++ b/front/src/style/globals/_utils.scss @@ -107,7 +107,7 @@ span.diff.removed { } .default-cover { - background-image: url("./assets/audio/default-cover.png") !important; + background-image: url("~/assets/audio/default-cover.png") !important; } .discrete { diff --git a/front/src/types.ts b/front/src/types.ts index 64df678f0..668536ccc 100644 --- a/front/src/types.ts +++ b/front/src/types.ts @@ -390,11 +390,11 @@ export interface Plugin { enabled: boolean description?: string source?: string - values?: Record<string, string> + values?: Record<string, any> conf?: { name: string label: string - type: 'text' | 'long_text' | 'url' | 'password' + type: 'text' | 'long_text' | 'url' | 'password' | 'boolean' help?: string }[] } diff --git a/front/src/views/Notifications.vue b/front/src/views/Notifications.vue index 95e612271..0b5a9694e 100644 --- a/front/src/views/Notifications.vue +++ b/front/src/views/Notifications.vue @@ -163,7 +163,7 @@ const markAllAsRead = async () => { {{ $t('views.Notifications.message.funkwhaleSupport') }} </p> <a - href="https://funkwhale.audio/support-us" + href="https://funkwhale.audio/donate" target="_blank" rel="noopener" class="ui primary inverted button" diff --git a/front/src/views/Search.vue b/front/src/views/Search.vue index f187894cc..4288e5d97 100644 --- a/front/src/views/Search.vue +++ b/front/src/views/Search.vue @@ -19,6 +19,7 @@ import RadioCard from '~/components/radios/Card.vue' import TagsList from '~/components/tags/List.vue' import useErrorHandler from '~/composables/useErrorHandler' +import useLogger from '~/composables/useLogger' type QueryType = 'artists' | 'albums' | 'tracks' | 'playlists' | 'tags' | 'radios' | 'podcasts' | 'series' | 'rss' @@ -35,6 +36,8 @@ syncRef(pageQuery, page, { direction: 'both' }) +const logger = useLogger() + const q = useRouteQuery('q', '') const query = ref(q.value) syncRef(q, query, { direction: 'ltr' }) @@ -209,8 +212,7 @@ const radioConfig = computed(() => { } as RadioConfig } - // TODO (wvffle): Use logger - console.info('This type is not yet supported for radio') + logger.warn('This type is not yet supported for radio') } return null diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 34889c866..d85b0a976 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -24,6 +24,7 @@ const groups = computed(() => [ id: 'instance', settings: [ { name: 'instance__name' }, + { name: 'instance__location' }, { name: 'instance__short_description' }, { name: 'instance__long_description', fieldType: 'markdown', fieldParams: { charLimit: null, permissive: true } }, { name: 'instance__contact_email' }, @@ -56,7 +57,9 @@ const groups = computed(() => [ id: 'music', settings: [ { name: 'music__transcoding_enabled' }, - { name: 'music__transcoding_cache_duration' } + { name: 'music__transcoding_cache_duration' }, + { name: 'music__only_allow_musicbrainz_tagged_files' } + ] }, { @@ -78,6 +81,7 @@ const groups = computed(() => [ label: t('views.admin.Settings.header.moderation'), id: 'moderation', settings: [ + { name: 'moderation__languages' }, { name: 'moderation__allow_list_enabled' }, { name: 'moderation__allow_list_public' }, { name: 'moderation__unauthenticated_report_types' } diff --git a/front/src/views/admin/moderation/ReportsList.vue b/front/src/views/admin/moderation/ReportsList.vue index 40e40e7b9..d1ab1d1e0 100644 --- a/front/src/views/admin/moderation/ReportsList.vue +++ b/front/src/views/admin/moderation/ReportsList.vue @@ -20,6 +20,7 @@ import useSharedLabels from '~/composables/locale/useSharedLabels' import useOrdering from '~/composables/navigation/useOrdering' import useErrorHandler from '~/composables/useErrorHandler' import usePage from '~/composables/navigation/usePage' +import useLogger from '~/composables/useLogger' interface Props extends SmartSearchProps, OrderingProps { mode?: 'card' @@ -37,6 +38,8 @@ const props = withDefaults(defineProps<Props>(), { orderingConfigName: undefined }) +const logger = useLogger() + const search = ref() const page = usePage() @@ -68,7 +71,7 @@ const fetchData = async () => { result.value = response.data if (query.value === 'resolved:no') { - console.log('Refreshing sidebar notifications') + logger.log('Refreshing sidebar notifications') store.commit('ui/incrementNotifications', { type: 'pendingReviewReports', value: response.data.count diff --git a/front/src/views/content/remote/Card.vue b/front/src/views/content/remote/Card.vue index 5ed2fa0eb..ef95ba805 100644 --- a/front/src/views/content/remote/Card.vue +++ b/front/src/views/content/remote/Card.vue @@ -12,6 +12,7 @@ import RadioButton from '~/components/radios/Button.vue' import useErrorHandler from '~/composables/useErrorHandler' import useReport from '~/composables/moderation/useReport' +import useLogger from '~/composables/useLogger' interface Emits { (e: 'followed'): void @@ -31,6 +32,8 @@ const props = withDefaults(defineProps<Props>(), { displayCopyFid: true }) +const logger = useLogger() + const { report, getReportableObjects } = useReport() const store = useStore() @@ -80,7 +83,7 @@ const follow = async () => { library.value.follow = response.data emit('followed') } catch (error) { - console.error(error) + logger.error(error) store.commit('ui/addMessage', { content: t('views.content.remote.Card.error.follow', { error }), date: new Date() diff --git a/front/src/views/playlists/List.vue b/front/src/views/playlists/List.vue index feba0aeb9..bcd463bf7 100644 --- a/front/src/views/playlists/List.vue +++ b/front/src/views/playlists/List.vue @@ -65,7 +65,7 @@ const fetchData = async () => { playable: true } - logger.time('Fetching albums') + const measureLoading = logger.time('Fetching albums') try { const response = await axios.get('playlists/', { params @@ -76,7 +76,7 @@ const fetchData = async () => { useErrorHandler(error as Error) result.value = undefined } finally { - logger.timeEnd('Fetching albums') + measureLoading() isLoading.value = false } } diff --git a/front/vite.config.ts b/front/vite.config.ts index dc5e1ba45..f46eb8807 100644 --- a/front/vite.config.ts +++ b/front/vite.config.ts @@ -1,10 +1,11 @@ +import { visualizer } from 'rollup-plugin-visualizer' +import { defineConfig, type PluginOption } from 'vite' import { VitePWA } from 'vite-plugin-pwa' import { resolve } from 'path' -import { defineConfig } from 'vite' - -import VueI18n from '@intlify/unplugin-vue-i18n/vite' import manifest from './pwa-manifest.json' + +import VueI18n from '@intlify/unplugin-vue-i18n/vite' import Vue from '@vitejs/plugin-vue' import VueMacros from 'unplugin-vue-macros/vite' @@ -13,9 +14,6 @@ const port = +(process.env.VUE_PORT ?? 8080) // https://vitejs.dev/config/ export default defineConfig(({ mode }) => ({ envPrefix: ['VUE_', 'FUNKWHALE_SENTRY_'], - build: { - sourcemap: true - }, plugins: [ // https://vue-macros.sxzz.moe/ VueMacros({ @@ -30,6 +28,9 @@ export default defineConfig(({ mode }) => ({ include: resolve(__dirname, './src/locales/**') }), + // https://github.com/btd/rollup-plugin-visualizer + visualizer() as unknown as PluginOption, + // https://github.com/antfu/vite-plugin-pwa VitePWA({ strategies: 'injectManifest', @@ -54,9 +55,29 @@ export default defineConfig(({ mode }) => ({ '~': resolve(__dirname, './src') } }, + build: { + sourcemap: true, + // https://rollupjs.org/configuration-options/ + rollupOptions: { + output: { + manualChunks: { + 'axios': ['axios', 'axios-auth-refresh'], + 'dompurify': ['dompurify'], + 'jquery': ['jquery'], + 'lodash': ['lodash-es'], + 'moment': ['moment'], + 'sentry': ['@sentry/vue', '@sentry/tracing'], + 'standardized-audio-context': ['standardized-audio-context'], + 'vue-router': ['vue-router'], + } + } + } + }, test: { environment: 'jsdom', globals: true, + reporters: ['default', 'junit'], + outputFile: "./test_results.xml", coverage: { src: './src', all: true, diff --git a/front/yarn.lock b/front/yarn.lock index e0e516689..335c119dc 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -34,12 +34,12 @@ resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" + integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": @@ -68,12 +68,12 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" - integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== +"@babel/generator@^7.23.3", "@babel/generator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" + integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== dependencies: - "@babel/types" "^7.23.3" + "@babel/types" "^7.23.4" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -234,10 +234,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" @@ -259,27 +259,32 @@ "@babel/types" "^7.22.19" "@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" + integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.4" + "@babel/types" "^7.23.4" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.16.4", "@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" - integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== +"@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" + integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== + +"@babel/parser@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" + integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" @@ -445,9 +450,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-async-generator-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz#9df2627bad7f434ed13eef3e61b2b65cafd4885b" - integrity sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" + integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -471,9 +476,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-block-scoping@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz#e99a3ff08f58edd28a8ed82481df76925a4ffca7" - integrity sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -486,9 +491,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-class-static-block@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz#56f2371c7e5bf6ff964d84c5dc4d4db5536b5159" - integrity sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" @@ -540,9 +545,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-dynamic-import@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz#82625924da9ed5fb11a428efb02e43bc9a3ab13e" - integrity sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" @@ -556,9 +561,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-export-namespace-from@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz#dcd066d995f6ac6077e5a4ccb68322a01e23ac49" - integrity sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" @@ -580,9 +585,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-json-strings@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz#489724ab7d3918a4329afb4172b2fd2cf3c8d245" - integrity sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -595,9 +600,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-logical-assignment-operators@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz#3a406d6083feb9487083bca6d2334a3c9b6c4808" - integrity sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -660,25 +665,25 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz#8a613d514b521b640344ed7c56afeff52f9413f8" - integrity sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-transform-numeric-separator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz#2f8da42b75ba89e5cfcd677afd0856d52c0c2e68" - integrity sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-transform-object-rest-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz#509373753b5f7202fe1940e92fd075bd7874955f" - integrity sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" @@ -695,17 +700,17 @@ "@babel/helper-replace-supers" "^7.22.20" "@babel/plugin-transform-optional-catch-binding@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz#362c0b545ee9e5b0fa9d9e6fe77acf9d4c480027" - integrity sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-transform-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz#92fc83f54aa3adc34288933fa27e54c13113f4be" - integrity sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -727,9 +732,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-private-property-in-object@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz#5cd34a2ce6f2d008cc8f91d8dcc29e2c41466da6" - integrity sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-create-class-features-plugin" "^7.22.15" @@ -925,20 +930,20 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.23.4": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.8.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" + integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" @@ -948,28 +953,28 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" - integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== +"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" + integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" + "@babel/code-frame" "^7.23.4" + "@babel/generator" "^7.23.4" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/parser" "^7.23.4" + "@babel/types" "^7.23.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.4.4": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" - integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== +"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.4.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" + integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== dependencies: - "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" @@ -978,220 +983,257 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@esbuild/android-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" - integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@cypress/request@^2.88.10": + version "2.88.12" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.12.tgz#ba4911431738494a85e93fb04498cb38bc55d590" + integrity sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + http-signature "~1.3.6" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "~6.10.3" + safe-buffer "^5.1.2" + tough-cookie "^4.1.3" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== -"@esbuild/android-arm@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" - integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== "@esbuild/android-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== -"@esbuild/android-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" - integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== "@esbuild/android-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== -"@esbuild/darwin-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" - integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== "@esbuild/darwin-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== -"@esbuild/darwin-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" - integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== "@esbuild/darwin-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== -"@esbuild/freebsd-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" - integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== -"@esbuild/freebsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" - integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== "@esbuild/freebsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== -"@esbuild/linux-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" - integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== "@esbuild/linux-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== -"@esbuild/linux-arm@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" - integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== "@esbuild/linux-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== -"@esbuild/linux-ia32@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" - integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== "@esbuild/linux-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== -"@esbuild/linux-loong64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" - integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== "@esbuild/linux-loong64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== -"@esbuild/linux-mips64el@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" - integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== "@esbuild/linux-mips64el@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== -"@esbuild/linux-ppc64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" - integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== "@esbuild/linux-ppc64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== -"@esbuild/linux-riscv64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" - integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== "@esbuild/linux-riscv64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== -"@esbuild/linux-s390x@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" - integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== "@esbuild/linux-s390x@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== -"@esbuild/linux-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" - integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== "@esbuild/linux-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== -"@esbuild/netbsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" - integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== "@esbuild/netbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== -"@esbuild/openbsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" - integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== "@esbuild/openbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== -"@esbuild/sunos-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" - integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== "@esbuild/sunos-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== -"@esbuild/win32-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" - integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== "@esbuild/win32-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== -"@esbuild/win32-ia32@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" - integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== "@esbuild/win32-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== -"@esbuild/win32-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" - integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== "@esbuild/win32-x64@0.18.20": version "0.18.20" @@ -1225,6 +1267,15 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@funkwhale/ui@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@funkwhale/ui/-/ui-0.2.2.tgz#09a5f8e6b30d7a898b50f5fdcfce9b09b3071c5b" + integrity sha512-+rmChC/06XVSEwzSN7ldVjtdKJknqk2FUBTBuhN41+BrinRpySjM5PQoUfVN5IiQkL8Nff5sIjt2k8gluHZ85g== + dependencies: + dompurify "^2.4.3 || ^3.0.0" + showdown "^2.1.0" + transliteration "^2.3.5" + "@humanwhocodes/config-array@^0.11.8": version "0.11.13" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" @@ -1266,12 +1317,12 @@ "@intlify/vue-devtools" "9.3.0-beta.19" "@intlify/core-base@^9.1.9": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.6.5.tgz#af92cae122fb99e882b3d7f1433f682065a3e164" - integrity sha512-LzbGXiZkMWPIHnHI0g6q554S87Cmh2mmCmjytK/3pDQfjI84l+dgGoeQuKj02q7EbULRuUUgYVZVqAwEUawXGg== + version "9.7.1" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.7.1.tgz#d31315a8e9cf027678b65a4155287143ab91b8fd" + integrity sha512-jPJTeECEhqQ7g//8g3Fb79j5SzSSRqlFCWD6pcX94uMLXU+L1m07gVZnnvzoJBnaMyJHiiwxOqZVfvu6rQfLvw== dependencies: - "@intlify/message-compiler" "9.6.5" - "@intlify/shared" "9.6.5" + "@intlify/message-compiler" "9.7.1" + "@intlify/shared" "9.7.1" "@intlify/devtools-if@9.3.0-beta.19": version "9.3.0-beta.19" @@ -1309,12 +1360,12 @@ "@intlify/shared" "9.3.0-beta.19" source-map "0.6.1" -"@intlify/message-compiler@9.6.5", "@intlify/message-compiler@^9.1.9": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.6.5.tgz#3a33882497417c63b23b012731d60a485c8e5558" - integrity sha512-WeJ499thIj0p7JaIO1V3JaJbqdqfBykS5R8fElFs5hNeotHtPAMBs4IiA+8/KGFkAbjJusgFefCq6ajP7F7+4Q== +"@intlify/message-compiler@9.7.1", "@intlify/message-compiler@^9.1.9": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.7.1.tgz#2cd5f26c6b9f19afffd62e69d192cc4e9e51ba9a" + integrity sha512-HfIr2Hn/K7b0Zv4kGqkxAxwtipyxAwhI9a3krN5cuhH/G9gkaik7of1PdzjR3Mix43t2onBiKYQyaU7mo7e0aA== dependencies: - "@intlify/shared" "9.6.5" + "@intlify/shared" "9.7.1" source-map-js "^1.0.2" "@intlify/message-compiler@next": @@ -1335,10 +1386,10 @@ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.4.1.tgz#bd0d221aaac476b6778a10ddcd0472f812c64e27" integrity sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng== -"@intlify/shared@9.6.5": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.6.5.tgz#a81f384d804e99ceac55bb061c344f156bd96590" - integrity sha512-gD7Ey47Xi4h/t6P+S04ymMSoA3wVRxGqjxuIMglwRO8POki9h164Epu2N8wk/GHXM/hR6ZGcsx2HArCCENjqSQ== +"@intlify/shared@9.7.1": + version "9.7.1" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.7.1.tgz#a4902421aacda2d716981eb9528aef0163c7bb0a" + integrity sha512-CBKnHzlUYGrk5QII9q4nElAQKO5cX1rRx8VmSWXltyOZjbkGHXYQTHULn6KwRi+CypuBCfmPkyPBHMzosypIeg== "@intlify/unplugin-vue-i18n@0.8.2": version "0.8.2" @@ -1499,67 +1550,75 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@sentry/browser@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.27.0.tgz#540d292d418abbf0ac7cabb39fe1863b8fa0c85f" - integrity sha512-6z+q+omLqmdEvy+9i4j7xzIT6zgmWJnXqEiLCURnE34KsPq6wr6Nij1XHsTlApMcohOpPlo+C3nMTmz+oYUf5w== +"@sentry-internal/tracing@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.47.0.tgz#45e92eb4c8d049d93bd4fab961eaa38a4fb680f3" + integrity sha512-udpHnCzF8DQsWf0gQwd0XFGp6Y8MOiwnl8vGt2ohqZGS3m1+IxoRLXsSkD8qmvN6KKDnwbaAvYnK0z0L+AW95g== dependencies: - "@sentry/core" "7.27.0" - "@sentry/replay" "7.27.0" - "@sentry/types" "7.27.0" - "@sentry/utils" "7.27.0" + "@sentry/core" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" tslib "^1.9.3" -"@sentry/core@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.27.0.tgz#77d0964d5625430a491f274b6b1f64473a361757" - integrity sha512-9WkHMllGNOr6S55N2HKJYJj/2mog5Kv6mjruqlcHHPSgcKFA8bjwBXJTghy6UzwtGd14cyS/X7h5AVUkvuXTMw== +"@sentry/browser@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.47.0.tgz#c0d10f348d1fb9336c3ef8fa2f6638f26d4c17a8" + integrity sha512-L0t07kS/G1UGVZ9fpD6HLuaX8vVBqAGWgu+1uweXthYozu/N7ZAsakjU/Ozu6FSXj1mO3NOJZhOn/goIZLSj5A== dependencies: - "@sentry/types" "7.27.0" - "@sentry/utils" "7.27.0" + "@sentry-internal/tracing" "7.47.0" + "@sentry/core" "7.47.0" + "@sentry/replay" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" tslib "^1.9.3" -"@sentry/replay@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.27.0.tgz#9529dd2603c6581ffc88857a1f43fc875c80857b" - integrity sha512-Db1TBx4JZWWbsAXSzWfAE55d4ekpPspZheyF66j84xq8jaFxgmlMMO7wBD8P7CHuQ6VUkgwa4glMkcamj/sfSg== +"@sentry/core@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.47.0.tgz#6a723d96f64009a9c1b9bc44e259956b7eca0a3f" + integrity sha512-EFhZhKdMu7wKmWYZwbgTi8FNZ7Fq+HdlXiZWNz51Bqe3pHmfAkdHtAEs0Buo0v623MKA0CA4EjXIazGUM34XTg== dependencies: - "@sentry/core" "7.27.0" - "@sentry/types" "7.27.0" - "@sentry/utils" "7.27.0" - -"@sentry/tracing@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.27.0.tgz#455a032c6ccf9bc8e27905dc8e624e6e2f45737b" - integrity sha512-lxAiGAajbZgZkaViwYuxavbu/c8JUp56XOYzSAi7Km9jGnTFLNF4JCoyG0INy7lXipFJiWSd0Xq3aej0Lb+Cvg== - dependencies: - "@sentry/core" "7.27.0" - "@sentry/types" "7.27.0" - "@sentry/utils" "7.27.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" tslib "^1.9.3" -"@sentry/types@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.27.0.tgz#1af8eae05465ad00722e319c066c950cc389b585" - integrity sha512-vapN3jchu3/WEMWQkrCOy2XDlOLj0l7IewYXKMr15Q21dlfM1QZMigU/r5rtYj5L8a2ISIHx+cRECxX5UIKH7w== - -"@sentry/utils@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.27.0.tgz#1a0b4e62db32fb56e737c59bd67c847bb888fa8a" - integrity sha512-8e5cmjbeuxETPxPEymyyGEYlBbJO1IMveTlcxkTFySPU6nNz2oAIiqPVHv2QgFJJvRv79/i/4Tyl5gFMOW0+AA== +"@sentry/replay@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.47.0.tgz#d2fc8fd3be2360950497426035d1ba0bd8a97b8f" + integrity sha512-BFpVZVmwlezZ83y0L43TCTJY142Fxh+z+qZSwTag5HlhmIpBKw/WKg06ajOhrYJbCBkhHmeOvyKkxX0jnc39ZA== dependencies: - "@sentry/types" "7.27.0" + "@sentry/core" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" + +"@sentry/tracing@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.47.0.tgz#5f665cec7ab1703e3d0250da9284a9d8dc2eb604" + integrity sha512-hJCpKdekwaFNbCVXxfCz5IxfSEJIKnkPmRSVHITOm5VhKwq2e5kmy4Rn6bzSETwJFSDE8LGbR/3eSfGTqw37XA== + dependencies: + "@sentry-internal/tracing" "7.47.0" + +"@sentry/types@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.47.0.tgz#fd07dbec11a26ae861532a9abe75bd31663ca09b" + integrity sha512-GxXocplN0j1+uczovHrfkykl9wvkamDtWxlPUQgyGlbLGZn+UH1Y79D4D58COaFWGEZdSNKr62gZAjfEYu9nQA== + +"@sentry/utils@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.47.0.tgz#e62fdede15e45387b40c9fa135feba48f0960826" + integrity sha512-A89SaOLp6XeZfByeYo2C8Ecye/YAtk/gENuyOUhQEdMulI6mZdjqtHAp7pTMVgkBc/YNARVuoa+kR/IdRrTPkQ== + dependencies: + "@sentry/types" "7.47.0" tslib "^1.9.3" -"@sentry/vue@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-7.27.0.tgz#294d81372c79980f7c5ea54f0103083faec12196" - integrity sha512-8ZTfXo+s+oq3/7+c2qbiX+J5j3BpMya1a9ESeekx+bS7iwlRxMZWQslWDEJKheoS0J6/wy43fhb+8OS5cKvc6g== +"@sentry/vue@7.47.0": + version "7.47.0" + resolved "https://registry.yarnpkg.com/@sentry/vue/-/vue-7.47.0.tgz#2a930280e1f594260f33be5c41ac69ade5e004b5" + integrity sha512-ZaiddqyjMH5PAhe3JMw5Xy4vO3wvc97JzmvLnZ3qHkA69hQ1yFDtVhncscWeVtn5r0N9D4+VxUOHMCpDFNyATw== dependencies: - "@sentry/browser" "7.27.0" - "@sentry/core" "7.27.0" - "@sentry/types" "7.27.0" - "@sentry/utils" "7.27.0" + "@sentry/browser" "7.47.0" + "@sentry/core" "7.47.0" + "@sentry/types" "7.47.0" + "@sentry/utils" "7.47.0" tslib "^1.9.3" "@sinonjs/commons@^2.0.0": @@ -1576,13 +1635,6 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@10.0.2": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" - integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== - dependencies: - "@sinonjs/commons" "^2.0.0" - "@sinonjs/fake-timers@^10.0.2", "@sinonjs/fake-timers@^10.3.0": version "10.3.0" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" @@ -1636,19 +1688,19 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.4": - version "4.3.10" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.10.tgz#2ad2959d1767edee5b0e4efb1a0cd2b500747317" - integrity sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg== + version "4.3.11" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" + integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== "@types/cookie@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== -"@types/diff@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.2.tgz#dd565e0086ccf8bc6522c6ebafd8a3125c91c12b" - integrity sha512-uw8eYMIReOwstQ0QKF0sICefSy8cNO/v7gOTiIy9SbwuHyEecJUm7qlgueOO5S1udZ5I/irVydHVwMchgzbKTg== +"@types/diff@5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6" + integrity sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ== "@types/dompurify@2.4.0": version "2.4.0" @@ -1680,17 +1732,10 @@ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== -"@types/jquery@*": - version "3.5.27" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.27.tgz#d9d67a003d0292a36fe35868a618c82f8fd12b19" - integrity sha512-TR28Y8ezIGgfyA02UOh9x+Fy16/1qWYAnvtRd2gTBJuccX/vmddyti0MezLkTv7f+OLofVc2T961VPyKv1tXJQ== - dependencies: - "@types/sizzle" "*" - -"@types/jquery@3.5.16": - version "3.5.16" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.16.tgz#632131baf30951915b0317d48c98e9890bdf051d" - integrity sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw== +"@types/jquery@*", "@types/jquery@3.5.29": + version "3.5.29" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.29.tgz#3c06a1f519cd5fc3a7a108971436c00685b5dcea" + integrity sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg== dependencies: "@types/sizzle" "*" @@ -1704,37 +1749,42 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash-es@4.17.6": - version "4.17.6" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" - integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== +"@types/lodash-es@4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== dependencies: "@types/lodash" "*" "@types/lodash@*": - version "4.14.201" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.201.tgz#76f47cb63124e806824b6c18463daf3e1d480239" - integrity sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ== + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== "@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== -"@types/moxios@0.4.15": - version "0.4.15" - resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.15.tgz#d8b774f360ba652801b5807e0833f6ff30a17770" - integrity sha512-eHD7i0/Uu7pFGzS4uIed2InJLj5H6xOOsqPjGtRyvyC/jnzRt6q6Xtnm2PQlkcqKHjRybEqjw71dcPnzfDouhw== +"@types/moxios@0.4.17": + version "0.4.17" + resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.17.tgz#3a2084b9b11713dde0da8c681db642936d3edf40" + integrity sha512-Ef7VE+vfISBbxWMOl40doJpHGpy5lTYJQwWHAy9ah1lrRnsVd+eNt6NjJ2QTAotHpQ7krVrZ3lp8hnxUxvdGuw== dependencies: axios ">=0.13.0" "@types/node@*": - version "20.9.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" - integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== + version "20.9.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.4.tgz#cc8f970e869c26834bdb7ed480b30ede622d74c7" + integrity sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA== dependencies: undici-types "~5.26.4" +"@types/node@^14.14.31": + version "14.18.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" + integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== + "@types/parse-json@^4.0.0": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" @@ -1745,10 +1795,10 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== -"@types/qs@6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/qs@6.9.10": + version "6.9.10" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== "@types/resolve@1.17.1": version "1.17.1" @@ -1772,9 +1822,9 @@ "@types/jquery" "*" "@types/semantic-ui-checkbox@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.5.tgz#82a834e34fe32ad7c58b349a9761e3f8a517c321" - integrity sha512-dCz6WtksYMUBQqBRRw56kW0FJhbhmFtJei9lbFJ7dnftyVa5xL3Zu7fzbCOyAn2AlsG+xinmgjTj1AGEdEiIGA== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.6.tgz#b971561563a4bc264b039a0b4e7b5358a006986a" + integrity sha512-N6lHQfr3wsSXATiKW0dx6sQkd8i7BZDkehbMva9wo6XxBPBN13PoeUKzwBjrFNXjVjy8sMTbXgsWvM30cAf+Dg== dependencies: "@types/jquery" "*" @@ -1786,9 +1836,9 @@ "@types/jquery" "*" "@types/semantic-ui-dropdown@*": - version "2.2.8" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.8.tgz#4e18b9481573550142c03acb4b7f9a6505b77097" - integrity sha512-2SAkB777xo0VDv0cBoEOxVoPbkbTnhpOSeP6sWl+wzR7B8xt+EJqaVwbCZakdsgmjq4t7c36rpny3TZQBDKacA== + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.9.tgz#146b97d8bf690ddc0633ab67ad12e17e1952bc04" + integrity sha512-xexijVzkwUNPNfuTLuQETcKqGwKjJFb9ymvpVu/UFy+PNHJRz08rV3SZFdb73Gh+pEJC+8aN9op5ZWiHrB/6NA== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" @@ -1808,9 +1858,9 @@ "@types/jquery" "*" "@types/semantic-ui-modal@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.6.tgz#dc4f2e7cd856e9ee981ee4479e00e9501aa61286" - integrity sha512-LtiE2PUIKFI3X1isKL15RbhTT61hKgt5MPsuxrg0UhOlEymK4/C4DJXvNLKDtMy7BG3XdhtZxdNhYCE5Z8dLvg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.7.tgz#12a7a502876109daa0a2638d9f2923a16da30772" + integrity sha512-vkazvqzPrutKH1jFt+xtpEmcdkLTZojb0RmW/zpS4MsLl7lgvFywfAjewdQgsFW5AEOku4KwrWoBTl7brh35/g== dependencies: "@types/jquery" "*" "@types/semantic-ui-dimmer" "*" @@ -1823,9 +1873,9 @@ "@types/jquery" "*" "@types/semantic-ui-popup@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.6.tgz#3161db5acf0fc18fcb9c81048e589bf6f38a459f" - integrity sha512-g7SlW4fSo2gUBZb3a4tQt8ZMUdvKKqwMTD6mxLdVAS3VxIU/qVq8aTNEtYvOrtiia6BulmqcgLDlw2s/XJKExQ== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.7.tgz#3b28849e09b815283f0fd765dc6480a31f4c3857" + integrity sha512-QeiyPFa5bHYHBGIVI4dDombm/dgLL2uJSBru8tq6DXasohxlBeZxUe08a9viAOWCyi91+FGi3KR6elPbd0u2Ag== dependencies: "@types/jquery" "*" @@ -1844,9 +1894,9 @@ "@types/jquery" "*" "@types/semantic-ui-search@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.6.tgz#ed2da8c0f85837f4dd15626824d2526f9745e9b9" - integrity sha512-IrvOhx4a5bSY8+5/Z7z/gDiAYRk1VHl8FUS2rdpU6gBJXzM0vrQ/5pMs7OOo8p71MLNHy83TGu2/N4Hy+QFtxg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.7.tgz#87388e5e6a33845f6983a9f4315449bd1be3eafa" + integrity sha512-Qay8/dFM5Z+7TM1nZzDnpkv1ZvxtY+vpdrqG5kjnX3XtZ69jm9y44kHDUr+reDEZAMrOCR7gxWuDuhxwRDuA0g== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" @@ -1901,10 +1951,10 @@ dependencies: "@types/jquery" "*" -"@types/semantic-ui@2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.7.tgz#4ae4242004aac11a21133d4f338e868b92605270" - integrity sha512-Uj6rby2GnuVyO7pj8vgUFsv5eaxb0ktpfasYcB/vXnSAeJ4cRjIOvxka+EoPjw3tPCY4/WlxRss8hsh7kRWzQg== +"@types/semantic-ui@2.2.9": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.9.tgz#9616e7a4e05c1eac421d7bbe464467b2611047b9" + integrity sha512-VS7BTgdQEzv1D+E/b9Y795b/i0AZ4bSgzZhSASVtvzudxU8sufXdFHazPGtBgVH8IoLkPoYNoNkgQ1Q3aFEi6g== dependencies: "@types/jquery" "*" "@types/semantic-ui-accordion" "*" @@ -1929,24 +1979,29 @@ "@types/semantic-ui-visibility" "*" "@types/semver@^7.3.12": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" - integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== -"@types/showdown@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.0.tgz#3e800eca8573848cac4e5555f4377ba3a0e7b1f2" - integrity sha512-70xBJoLv+oXjB5PhtA8vo7erjLDp9/qqI63SRHm4REKrwuPOLs8HhXwlZJBJaB4kC18cCZ1UUZ6Fb/PLFW4TCA== +"@types/showdown@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.6.tgz#3d7affd5f971b4a17783ec2b23b4ad3b97477b7e" + integrity sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ== -"@types/sizzle@*": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.6.tgz#e39b7123dac4631001939bd4c2a26d46010f2275" - integrity sha512-m04Om5Gz6kbjUwAQ7XJJQ30OdEFsSmAVsvn4NYwcTRyMVpKKa1aPuESw1n2CxS5fYkOQv3nHgDKeNa8e76fUkw== +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@*", "@types/sizzle@^2.3.2": + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== "@types/trusted-types@*", "@types/trusted-types@^2.0.2": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.6.tgz#d12451beaeb9c3838f12024580dc500b7e88b0ad" - integrity sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg== + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/vue-virtual-scroller@npm:@earltp/vue-virtual-scroller": version "1.0.1" @@ -1958,6 +2013,13 @@ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40" integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA== +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@5.48.2": version "5.48.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" @@ -1973,7 +2035,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^5.0.0": +"@typescript-eslint/eslint-plugin@^5.59.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== @@ -1989,7 +2051,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.0.0": +"@typescript-eslint/parser@^5.59.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -2115,10 +2177,10 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@vitejs/plugin-vue@4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz#93815beffd23db46288c787352a8ea31a0c03e5e" - integrity sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA== +"@vitejs/plugin-vue@4.2.3": + version "4.2.3" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" + integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== "@vitest/coverage-c8@0.25.8": version "0.25.8" @@ -2128,14 +2190,6 @@ c8 "^7.12.0" vitest "0.25.8" -"@volar/language-core@1.0.24": - version "1.0.24" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.0.24.tgz#5d767571e77728464635e61af1debca944811fe0" - integrity sha512-vTN+alJiWwK0Pax6POqrmevbtFW2dXhjwWiW/MW4f48eDYPLdyURWcr8TixO7EN/nHsUBj2udT7igFKPtjyAKg== - dependencies: - "@volar/source-map" "1.0.24" - muggle-string "^0.1.0" - "@volar/language-core@1.10.0": version "1.10.0" resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.0.tgz#fb6b3ad22e75c53a1ae4d644c4a788b47d411b9d" @@ -2143,6 +2197,13 @@ dependencies: "@volar/source-map" "1.10.0" +"@volar/language-core@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.4.1.tgz#66b5758252e35c4e5e71197ca7fa0344d306442c" + integrity sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ== + dependencies: + "@volar/source-map" "1.4.1" + "@volar/language-core@~1.10.0": version "1.10.10" resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.10.tgz#9c240a36dd4007b9c4f00739f6cecb81da54a49e" @@ -2150,13 +2211,6 @@ dependencies: "@volar/source-map" "1.10.10" -"@volar/source-map@1.0.24": - version "1.0.24" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.0.24.tgz#ad4c827fea5c26b4bf38a86d983e7deb65b1c61e" - integrity sha512-Qsv/tkplx18pgBr8lKAbM1vcDqgkGKQzbChg6NW+v0CZc3G7FLmK+WrqEPzKlN7Cwdc6XVL559Nod8WKAfKr4A== - dependencies: - muggle-string "^0.1.0" - "@volar/source-map@1.10.0": version "1.10.0" resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.0.tgz#2413eb190ce69fc1a382f58524a3f82306668024" @@ -2171,34 +2225,42 @@ dependencies: muggle-string "^0.3.1" -"@volar/typescript@1.0.24": - version "1.0.24" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.0.24.tgz#f934eda9774b31abdff53efc56782cd2623723d5" - integrity sha512-f8hCSk+PfKR1/RQHxZ79V1NpDImHoivqoizK+mstphm25tn/YJ/JnKNjZHB+o21fuW0yKlI26NV3jkVb2Cc/7A== +"@volar/source-map@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.4.1.tgz#e3b561775c742508e5e1f28609a4787c98056715" + integrity sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA== dependencies: - "@volar/language-core" "1.0.24" + muggle-string "^0.2.2" -"@volar/vue-language-core@1.0.24": - version "1.0.24" - resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-1.0.24.tgz#81d180a8e09a53cb575e83acb79a31493891a1a4" - integrity sha512-2NTJzSgrwKu6uYwPqLiTMuAzi7fAY3yFy5PJ255bGJc82If0Xr+cW8pC80vpjG0D/aVLmlwAdO4+Ya2BI8GdDg== +"@volar/typescript@1.4.1-patch.2": + version "1.4.1-patch.2" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz#89f4bd199ca81a832d86d1449b01f49f2b72137c" + integrity sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w== dependencies: - "@volar/language-core" "1.0.24" - "@volar/source-map" "1.0.24" - "@vue/compiler-dom" "^3.2.45" - "@vue/compiler-sfc" "^3.2.45" - "@vue/reactivity" "^3.2.45" - "@vue/shared" "^3.2.45" - minimatch "^5.1.1" + "@volar/language-core" "1.4.1" + +"@volar/vue-language-core@1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz#db42520f1a29737c7e40fbb3e6aead8def85ba75" + integrity sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg== + dependencies: + "@volar/language-core" "1.4.1" + "@volar/source-map" "1.4.1" + "@vue/compiler-dom" "^3.3.0" + "@vue/compiler-sfc" "^3.3.0" + "@vue/reactivity" "^3.3.0" + "@vue/shared" "^3.3.0" + minimatch "^9.0.0" + muggle-string "^0.2.2" vue-template-compiler "^2.7.14" -"@volar/vue-typescript@1.0.24": - version "1.0.24" - resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-1.0.24.tgz#bef9b2bfb1b108c0f6cb12ec6fbf449b43fc8257" - integrity sha512-9a25oHDvGaNC0okRS47uqJI6FxY4hUQZUsxeOUFHcqVxZEv8s17LPuP/pMMXyz7jPygrZubB/qXqHY5jEu/akA== +"@volar/vue-typescript@1.6.5": + version "1.6.5" + resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz#6ca9bfefa5dc64ff97fcdbc74249e5e7da44e533" + integrity sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A== dependencies: - "@volar/typescript" "1.0.24" - "@volar/vue-language-core" "1.0.24" + "@volar/typescript" "1.4.1-patch.2" + "@volar/vue-language-core" "1.6.5" "@vue-macros/api@0.8.3": version "0.8.3" @@ -2447,25 +2509,15 @@ "@vue-macros/short-vmodel" "1.2.15" "@vue/language-core" "1.8.8" -"@vue/compiler-core@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz#d9311207d96f6ebd5f4660be129fb99f01ddb41b" - integrity sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A== +"@vue/compiler-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.11.tgz#9fa26f8c81b9b34365f94ce1ed4d0e6e6f94a2ac" + integrity sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w== dependencies: - "@babel/parser" "^7.16.4" - "@vue/shared" "3.2.45" + "@babel/parser" "^7.23.5" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" - source-map "^0.6.1" - -"@vue/compiler-core@3.2.47": - version "3.2.47" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz#3e07c684d74897ac9aa5922c520741f3029267f8" - integrity sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/shared" "3.2.47" - estree-walker "^2.0.2" - source-map "^0.6.1" + source-map-js "^1.0.2" "@vue/compiler-core@3.3.8", "@vue/compiler-core@^3.3.4": version "3.3.8" @@ -2477,23 +2529,15 @@ estree-walker "^2.0.2" source-map-js "^1.0.2" -"@vue/compiler-dom@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz#c43cc15e50da62ecc16a42f2622d25dc5fd97dce" - integrity sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw== +"@vue/compiler-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz#36a76ea3a296d41bad133a6912cb0a847d969e4f" + integrity sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw== dependencies: - "@vue/compiler-core" "3.2.45" - "@vue/shared" "3.2.45" + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" -"@vue/compiler-dom@3.2.47": - version "3.2.47" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz#a0b06caf7ef7056939e563dcaa9cbde30794f305" - integrity sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ== - dependencies: - "@vue/compiler-core" "3.2.47" - "@vue/shared" "3.2.47" - -"@vue/compiler-dom@3.3.8", "@vue/compiler-dom@^3.2.45", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": +"@vue/compiler-dom@3.3.8", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": version "3.3.8" resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz#09d832514b9b8d9415a3816b065d69dbefcc7e9b" integrity sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ== @@ -2501,39 +2545,23 @@ "@vue/compiler-core" "3.3.8" "@vue/shared" "3.3.8" -"@vue/compiler-sfc@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz#7f7989cc04ec9e7c55acd406827a2c4e96872c70" - integrity sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q== +"@vue/compiler-sfc@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz#acfae240c875d067e0e2c9a4e2d910074408c73b" + integrity sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA== dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.45" - "@vue/compiler-dom" "3.2.45" - "@vue/compiler-ssr" "3.2.45" - "@vue/reactivity-transform" "3.2.45" - "@vue/shared" "3.2.45" + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-ssr" "3.3.11" + "@vue/reactivity-transform" "3.3.11" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" - magic-string "^0.25.7" - postcss "^8.1.10" - source-map "^0.6.1" + magic-string "^0.30.5" + postcss "^8.4.32" + source-map-js "^1.0.2" -"@vue/compiler-sfc@3.2.47": - version "3.2.47" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz#1bdc36f6cdc1643f72e2c397eb1a398f5004ad3d" - integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.47" - "@vue/compiler-dom" "3.2.47" - "@vue/compiler-ssr" "3.2.47" - "@vue/reactivity-transform" "3.2.47" - "@vue/shared" "3.2.47" - estree-walker "^2.0.2" - magic-string "^0.25.7" - postcss "^8.1.10" - source-map "^0.6.1" - -"@vue/compiler-sfc@3.3.8", "@vue/compiler-sfc@^3.2.45", "@vue/compiler-sfc@^3.3.4": +"@vue/compiler-sfc@3.3.8", "@vue/compiler-sfc@^3.2.45", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": version "3.3.8" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1" integrity sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA== @@ -2549,21 +2577,13 @@ postcss "^8.4.31" source-map-js "^1.0.2" -"@vue/compiler-ssr@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz#bd20604b6e64ea15344d5b6278c4141191c983b2" - integrity sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ== +"@vue/compiler-ssr@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz#598942a73b64f2bd3f95908b104a7fbb55fc41a2" + integrity sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg== dependencies: - "@vue/compiler-dom" "3.2.45" - "@vue/shared" "3.2.45" - -"@vue/compiler-ssr@3.2.47": - version "3.2.47" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz#35872c01a273aac4d6070ab9d8da918ab13057ee" - integrity sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw== - dependencies: - "@vue/compiler-dom" "3.2.47" - "@vue/shared" "3.2.47" + "@vue/compiler-dom" "3.3.11" + "@vue/shared" "3.3.11" "@vue/compiler-ssr@3.3.8": version "3.3.8" @@ -2573,7 +2593,7 @@ "@vue/compiler-dom" "3.3.8" "@vue/shared" "3.3.8" -"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.4.5", "@vue/devtools-api@^6.5.0": +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": version "6.5.1" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697" integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== @@ -2590,14 +2610,14 @@ eslint-plugin-n "^15.2.4" eslint-plugin-promise "^6.0.0" -"@vue/eslint-config-typescript@11.0.2": - version "11.0.2" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.2.tgz#03353f404d4472900794e653450bb6623de3c642" - integrity sha512-EiKud1NqlWmSapBFkeSrE994qpKx7/27uCGnhdqzllYDpQZroyX/O6bwjEpeuyKamvLbsGdO6PMR2faIf+zFnw== +"@vue/eslint-config-typescript@11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz#c720efa657d102cd2945bc54b4a79f35d57f6307" + integrity sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw== dependencies: - "@typescript-eslint/eslint-plugin" "^5.0.0" - "@typescript-eslint/parser" "^5.0.0" - vue-eslint-parser "^9.0.0" + "@typescript-eslint/eslint-plugin" "^5.59.1" + "@typescript-eslint/parser" "^5.59.1" + vue-eslint-parser "^9.1.1" "@vue/language-core@1.8.8": version "1.8.8" @@ -2613,27 +2633,16 @@ muggle-string "^0.3.1" vue-template-compiler "^2.7.14" -"@vue/reactivity-transform@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz#07ac83b8138550c83dfb50db43cde1e0e5e8124d" - integrity sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ== +"@vue/reactivity-transform@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz#2bd486f4eff60c8724309925618891e722fcfadc" + integrity sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg== dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.45" - "@vue/shared" "3.2.45" + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" - magic-string "^0.25.7" - -"@vue/reactivity-transform@3.2.47": - version "3.2.47" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz#e45df4d06370f8abf29081a16afd25cffba6d84e" - integrity sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA== - dependencies: - "@babel/parser" "^7.16.4" - "@vue/compiler-core" "3.2.47" - "@vue/shared" "3.2.47" - estree-walker "^2.0.2" - magic-string "^0.25.7" + magic-string "^0.30.5" "@vue/reactivity-transform@3.3.8": version "3.3.8" @@ -2646,27 +2655,27 @@ estree-walker "^2.0.2" magic-string "^0.30.5" -"@vue/reactivity@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.45.tgz#412a45b574de601be5a4a5d9a8cbd4dee4662ff0" - integrity sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A== +"@vue/reactivity@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.11.tgz#91f8e6c9ac60a595a5278c836b197628fd947a0d" + integrity sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g== dependencies: - "@vue/shared" "3.2.45" + "@vue/shared" "3.3.11" -"@vue/reactivity@3.3.8", "@vue/reactivity@^3.2.45", "@vue/reactivity@^3.3.0": +"@vue/reactivity@3.3.8", "@vue/reactivity@^3.3.0": version "3.3.8" resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.8.tgz#cce8a03a3fd3539c3eeda53e277ba365d160dd4d" integrity sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw== dependencies: "@vue/shared" "3.3.8" -"@vue/runtime-core@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz#7ad7ef9b2519d41062a30c6fa001ec43ac549c7f" - integrity sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A== +"@vue/runtime-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.11.tgz#63defba57bc54c1dac68a95b56c2633b1419193d" + integrity sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw== dependencies: - "@vue/reactivity" "3.2.45" - "@vue/shared" "3.2.45" + "@vue/reactivity" "3.3.11" + "@vue/shared" "3.3.11" "@vue/runtime-core@3.3.8": version "3.3.8" @@ -2676,14 +2685,14 @@ "@vue/reactivity" "3.3.8" "@vue/shared" "3.3.8" -"@vue/runtime-dom@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz#1a2ef6ee2ad876206fbbe2a884554bba2d0faf59" - integrity sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA== +"@vue/runtime-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz#1146d8d280b0fec4d2e18c4a4c8f8121d0cecc09" + integrity sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ== dependencies: - "@vue/runtime-core" "3.2.45" - "@vue/shared" "3.2.45" - csstype "^2.6.8" + "@vue/runtime-core" "3.3.11" + "@vue/shared" "3.3.11" + csstype "^3.1.2" "@vue/runtime-dom@3.3.8": version "3.3.8" @@ -2694,13 +2703,13 @@ "@vue/shared" "3.3.8" csstype "^3.1.2" -"@vue/server-renderer@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz#ca9306a0c12b0530a1a250e44f4a0abac6b81f3f" - integrity sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g== +"@vue/server-renderer@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.11.tgz#409aed8031a125791e2143552975ecd1958ad601" + integrity sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A== dependencies: - "@vue/compiler-ssr" "3.2.45" - "@vue/shared" "3.2.45" + "@vue/compiler-ssr" "3.3.11" + "@vue/shared" "3.3.11" "@vue/server-renderer@3.3.8": version "3.3.8" @@ -2710,17 +2719,12 @@ "@vue/compiler-ssr" "3.3.8" "@vue/shared" "3.3.8" -"@vue/shared@3.2.45": - version "3.2.45" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2" - integrity sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg== +"@vue/shared@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.11.tgz#f6a038e15237edefcc90dbfe7edb806dd355c7bd" + integrity sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw== -"@vue/shared@3.2.47": - version "3.2.47" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c" - integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ== - -"@vue/shared@3.3.8", "@vue/shared@^3.2.45", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": +"@vue/shared@3.3.8", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": version "3.3.8" resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== @@ -2810,7 +2814,7 @@ acorn@^7.1.1, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.1.0, acorn@^8.10.0, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.1.0, acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== @@ -2822,6 +2826,14 @@ agent-base@6: dependencies: debug "4" +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -2842,6 +2854,18 @@ ajv@^8.6.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2869,6 +2893,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -2947,6 +2976,18 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -2987,7 +3028,12 @@ ast-walker-scope@^0.5.0: "@babel/parser" "^7.22.7" ast-kit "^0.9.4" -async@^3.2.3: +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@^3.2.0, async@^3.2.3: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== @@ -3002,20 +3048,12 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -automation-events@^6.0.1, automation-events@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.11.tgz#c90be5a58faf6633e1556a7acab0f23af0124551" - integrity sha512-tUqFMJalQ3OAcbQOXzzNDpxzkuygMQ3eM92lJWJRn6YWJnH4oYIU3pzKipANOul/6L2vDFrOzgXVE21Dv4z/zw== +automation-events@^6.0.13: + version "6.0.13" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.13.tgz#dcaba831b959a45f05401dec374dba71618564d5" + integrity sha512-V1D19taPDEB7LUph6FpJv9m2i+UpLR096sAbPKt92sRChCOA6Jt2bcofU/YAwG8F8/qZp3GrrscJ1FzaEHd68w== dependencies: - "@babel/runtime" "^7.23.2" - tslib "^2.6.2" - -automation-events@^6.0.12: - version "6.0.12" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.12.tgz#1f369af5f5c1c4b0cae24abdf1535cbc56a37ad4" - integrity sha512-XSuK8udXMrHn24PvCuBNGWP6vXgSkCscCl9RokPmKhN/VQUdzuG2inZ03+UU86R1r6p6OCO30yWSPioBPxCXiQ== - dependencies: - "@babel/runtime" "^7.23.4" + "@babel/runtime" "^7.23.5" tslib "^2.6.2" available-typed-arrays@^1.0.5: @@ -3023,6 +3061,16 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + axios-auth-refresh@3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/axios-auth-refresh/-/axios-auth-refresh-3.3.6.tgz#a879f6296a889d6616e51069c2a8135b697966e7" @@ -3046,9 +3094,9 @@ axios@1.2.3: proxy-from-env "^1.1.0" axios@>=0.13.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7" - integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== + version "1.6.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -3083,11 +3131,33 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -3125,11 +3195,24 @@ browserslist@^4.21.9, browserslist@^4.22.1: node-releases "^2.0.13" update-browserslist-db "^1.0.13" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" @@ -3177,6 +3260,11 @@ c8@^7.12.0: yargs "^16.2.0" yargs-parser "^20.2.9" +cachedir@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" + integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== + call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" @@ -3192,9 +3280,14 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001541: - version "1.0.30001562" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz#9d16c5fd7e9c592c4cd5e304bc0f75b0008b2759" - integrity sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng== + version "1.0.30001564" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz#eaa8bbc58c0cbccdcb7b41186df39dd2ba591889" + integrity sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== chai@^4.3.7: version "4.3.10" @@ -3218,7 +3311,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3233,6 +3326,11 @@ check-error@^1.0.3: dependencies: get-func-name "^2.0.2" +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== + "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -3248,6 +3346,40 @@ check-error@^1.0.3: optionalDependencies: fsevents "~2.3.2" +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@~0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3290,7 +3422,12 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.8: +colorette@^2.0.16: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3312,6 +3449,11 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + commander@^9.0.0: version "9.5.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" @@ -3338,12 +3480,17 @@ cookie@^0.4.0: integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" - integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== + version "3.33.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" + integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== dependencies: browserslist "^4.22.1" +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + cosmiconfig@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -3396,16 +3543,66 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^2.6.8: - version "2.6.21" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" - integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== - csstype@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +cypress@12.14.0: + version "12.14.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.14.0.tgz#37a19b85f5e9d881995e9fee1ddf41b3d3a623dd" + integrity sha512-HiLIXKXZaIT1RT7sw1sVPt+qKtis3uYNm6KwC4qoYjabwLKaqZlyS/P+uVvvlBNcHIwL/BC6nQZajpbUd7hOgQ== + dependencies: + "@cypress/request" "^2.88.10" + "@cypress/xvfb" "^1.2.4" + "@types/node" "^14.14.31" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.6.0" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^6.2.1" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.4" + enquirer "^2.3.6" + eventemitter2 "6.4.7" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.8" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.3.2" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + yauzl "^2.10.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -3415,6 +3612,11 @@ data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" +dayjs@^1.10.4: + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" @@ -3434,7 +3636,7 @@ debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.2.7: +debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -3472,6 +3674,11 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -3486,7 +3693,7 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -diff@5.1.0, diff@^5.0.0, diff@^5.1.0: +diff@5.1.0, diff@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== @@ -3545,6 +3752,11 @@ dompurify@2.4.7: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== +"dompurify@^2.4.3 || ^3.0.0": + version "3.0.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.6.tgz#925ebd576d54a9531b5d76f0a5bef32548351dae" + integrity sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w== + domutils@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" @@ -3554,6 +3766,14 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ecma-proposal-math-extensions@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/ecma-proposal-math-extensions/-/ecma-proposal-math-extensions-0.0.2.tgz#a6a3d64819db70cee0d2e1976b6315d00e4714a0" @@ -3572,15 +3792,30 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.4.535: - version "1.4.582" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz#4908215182266793499ac57d80e2680d7dd9b3db" - integrity sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA== + version "1.4.592" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.592.tgz#1ffd49ba3da3da3077ea20014b066c910d50c913" + integrity sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -3593,6 +3828,13 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + es-abstract@^1.22.1: version "1.22.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" @@ -3663,33 +3905,33 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.16.3: - version "0.16.17" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" - integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== +esbuild@^0.17.5: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== optionalDependencies: - "@esbuild/android-arm" "0.16.17" - "@esbuild/android-arm64" "0.16.17" - "@esbuild/android-x64" "0.16.17" - "@esbuild/darwin-arm64" "0.16.17" - "@esbuild/darwin-x64" "0.16.17" - "@esbuild/freebsd-arm64" "0.16.17" - "@esbuild/freebsd-x64" "0.16.17" - "@esbuild/linux-arm" "0.16.17" - "@esbuild/linux-arm64" "0.16.17" - "@esbuild/linux-ia32" "0.16.17" - "@esbuild/linux-loong64" "0.16.17" - "@esbuild/linux-mips64el" "0.16.17" - "@esbuild/linux-ppc64" "0.16.17" - "@esbuild/linux-riscv64" "0.16.17" - "@esbuild/linux-s390x" "0.16.17" - "@esbuild/linux-x64" "0.16.17" - "@esbuild/netbsd-x64" "0.16.17" - "@esbuild/openbsd-x64" "0.16.17" - "@esbuild/sunos-x64" "0.16.17" - "@esbuild/win32-arm64" "0.16.17" - "@esbuild/win32-ia32" "0.16.17" - "@esbuild/win32-x64" "0.16.17" + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" esbuild@^0.18.10: version "0.18.20" @@ -4054,6 +4296,59 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + +execa@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4087,6 +4382,20 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4171,6 +4480,11 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -4180,7 +4494,16 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -fs-extra@^9.0.1: +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -4250,6 +4573,13 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -4258,6 +4588,20 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + gettext-extractor@^3.5.4: version "3.8.0" resolved "https://registry.yarnpkg.com/gettext-extractor/-/gettext-extractor-3.8.0.tgz#b2e8497a5952b039e5f488dca3d2e3aea2cb54b4" @@ -4308,6 +4652,13 @@ glob@^8.0.0: minimatch "^5.0.1" once "^1.3.0" +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4448,6 +4799,15 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -4456,6 +4816,11 @@ https-proxy-agent@^5.0.1: agent-base "6" debug "4" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -4473,10 +4838,15 @@ idb@^7.0.1: resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== immutable@^4.0.0: version "4.3.4" @@ -4496,6 +4866,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4509,6 +4884,11 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + internal-slot@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" @@ -4564,6 +4944,13 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" @@ -4578,6 +4965,11 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4595,6 +4987,14 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + is-language-code@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-language-code/-/is-language-code-3.1.0.tgz#b2386b49227e7010636f16d0c2c681ca40136ab5" @@ -4629,7 +5029,7 @@ is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== -is-path-inside@^3.0.3: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -4685,6 +5085,16 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: dependencies: which-typed-array "^1.1.11" +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -4692,6 +5102,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -4707,6 +5124,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -4753,11 +5175,6 @@ jquery@^3.4.0: resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== -js-logger@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/js-logger/-/js-logger-1.6.1.tgz#8f09671b515e4a6f31dced8fdb8923432e2c60af" - integrity sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA== - js-sdsl@^4.1.4: version "4.4.2" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" @@ -4775,6 +5192,11 @@ js-yaml@^4.0.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + jsdom@20.0.3: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -4837,7 +5259,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@^0.4.0: +json-schema@0.4.0, json-schema@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -4847,6 +5269,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -4904,6 +5331,16 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + just-extend@^4.0.2: version "4.2.1" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" @@ -4916,6 +5353,11 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -4934,6 +5376,20 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + local-pkg@^0.4.2, local-pkg@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" @@ -4971,6 +5427,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4981,6 +5442,24 @@ lodash@^4.17.11, lodash@^4.17.20, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + loupe@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" @@ -5058,13 +5537,18 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12: +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -5072,7 +5556,7 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.1: +minimatch@^5.0.1: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== @@ -5086,7 +5570,7 @@ minimatch@^9.0.0: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -5121,17 +5605,17 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -muggle-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.1.0.tgz#1fda8a281c8b27bb8b70466dbc9f27586a8baa6c" - integrity sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg== +muggle-string@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" + integrity sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg== muggle-string@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== -nanoid@^3.3.6: +nanoid@^3.3.6, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -5146,7 +5630,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -nise@^5.1.2, nise@^5.1.4: +nise@^5.1.4: version "5.1.5" resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.5.tgz#f2aef9536280b6c18940e32ba1fbdc770b8964ee" integrity sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw== @@ -5167,6 +5651,13 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -5227,13 +5718,29 @@ object.values@^1.1.5, object.values@^1.1.7: define-properties "^1.2.0" es-abstract "^1.22.1" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + optionator@^0.9.1: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -5246,6 +5753,11 @@ optionator@^0.9.1: prelude-ls "^1.2.1" type-check "^0.4.0" +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -5260,6 +5772,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5306,7 +5825,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -5338,6 +5857,16 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -5348,6 +5877,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + pofile@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" @@ -5366,7 +5900,7 @@ postcss-selector-parser@^6.0.9: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss@^8.1.10, postcss@^8.4.20, postcss@^8.4.27, postcss@^8.4.31: +postcss@^8.4.23, postcss@^8.4.27, postcss@^8.4.31: version "8.4.31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -5375,12 +5909,21 @@ postcss@^8.1.10, postcss@^8.4.20, postcss@^8.4.27, postcss@^8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.32: + version "8.4.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" + integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -pretty-bytes@^5.3.0: +pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== @@ -5390,6 +5933,11 @@ pretty-bytes@^6.0.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -5400,11 +5948,26 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0, punycode@^2.1.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +qs@~6.10.3: + version "6.10.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" + integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== + dependencies: + side-channel "^1.0.4" + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -5486,6 +6049,13 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== + dependencies: + throttleit "^1.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -5520,12 +6090,25 @@ resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.2 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -5542,6 +6125,16 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" +rollup-plugin-visualizer@5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz#013ac54fb6a9d7c9019e7eb77eced673399e5a0b" + integrity sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + rollup@^2.43.1: version "2.79.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" @@ -5549,7 +6142,7 @@ rollup@^2.43.1: optionalDependencies: fsevents "~2.3.2" -rollup@^3.27.1, rollup@^3.29.1, rollup@^3.7.0, rollup@^3.7.2: +rollup@^3.21.0, rollup@^3.27.1, rollup@^3.29.1, rollup@^3.7.2: version "3.29.4" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== @@ -5563,6 +6156,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.5.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -5573,7 +6173,7 @@ safe-array-concat@^1.0.1: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@^5.1.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5587,7 +6187,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -5613,7 +6213,7 @@ semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: +semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -5658,7 +6258,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -showdown@2.1.0: +showdown@2.1.0, showdown@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== @@ -5684,22 +6284,22 @@ signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -sinon@15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.1.tgz#ce062611a0b131892e2c18f03055b8eb6e8dc234" - integrity sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg== +sinon@15.0.2: + version "15.0.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.2.tgz#f3e3aacb990bbaa8a7bb976e86118c5dc0154e66" + integrity sha512-PCVP63XZkg0/LOqQH5rEU4LILuvTFMb5tNxTHfs6VUMNnZz2XrnGSTZbAGITjzwQWbl/Bl/8hi4G3zZWjyBwHg== dependencies: - "@sinonjs/commons" "^2.0.0" - "@sinonjs/fake-timers" "10.0.2" + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^10.0.2" "@sinonjs/samsam" "^7.0.1" - diff "^5.0.0" - nise "^5.1.2" + diff "^5.1.0" + nise "^5.1.4" supports-color "^7.2.0" -sinon@^15.0.4: - version "15.2.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.2.0.tgz#5e44d4bc5a9b5d993871137fd3560bebfac27565" - integrity sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw== +sinon@^16.0.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-16.1.3.tgz#b760ddafe785356e2847502657b4a0da5501fba8" + integrity sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA== dependencies: "@sinonjs/commons" "^3.0.0" "@sinonjs/fake-timers" "^10.3.0" @@ -5722,6 +6322,24 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + sortablejs@1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8" @@ -5740,11 +6358,21 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== + source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + source-map@^0.8.0-beta.0: version "0.8.0-beta.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" @@ -5757,34 +6385,69 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -standardized-audio-context-mock@9.6.18: - version "9.6.18" - resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.18.tgz#0b2dc9039a0f923a64012cf53407072a7e05c62e" - integrity sha512-yUaPX9qdRRKTxkS9h3QvKd+OQ7nRoIKj0cVg/9D6ugQynvRczJIS6KMTZcigi2OfwOKI3X0Gy1aKZC5YUl79Tw== +sshpk@^1.14.1: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: - "@babel/runtime" "^7.21.5" - automation-events "^6.0.1" - sinon "^15.0.4" - standardized-audio-context "^25.3.46" - tslib "^2.5.0" - vehicles "^9.0.1" + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" -standardized-audio-context@25.3.59: - version "25.3.59" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.59.tgz#61ad6000277f08eb50f4a49c053d498eff6c7a7c" - integrity sha512-iyzP4sgW2oBSHE7QSMG+I5txft0s9Icw9ClNo2LkNzWbtUYgsEPNJsQ2XZffm3tP3chUpHXJ2br1gY8u7rPkeg== +stack-generator@^2.0.5: + version "2.0.10" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" + integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== dependencies: - "@babel/runtime" "^7.23.4" - automation-events "^6.0.12" + stackframe "^1.3.4" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +stacktrace-gps@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" + integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== + dependencies: + source-map "0.5.6" + stackframe "^1.3.4" + +stacktrace-js@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== + dependencies: + error-stack-parser "^2.0.6" + stack-generator "^2.0.5" + stacktrace-gps "^3.0.4" + +standardized-audio-context-mock@9.6.32: + version "9.6.32" + resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.32.tgz#ede90e8f0620c86d7b7d042e16f2a44b1ec864aa" + integrity sha512-x9/SWuzcTZ4WT9gk4bdww+/9FmK/jbRgoKcPHg2VieKx/wZVaPUcgwDWm7rISDJCuVaNUGcNcMf3lzvLid8kMA== + dependencies: + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" + sinon "^16.0.0" + standardized-audio-context "^25.3.60" tslib "^2.6.2" + vehicles "^9.0.14" -standardized-audio-context@^25.3.46: - version "25.3.58" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.58.tgz#6c5c61cfe25eb4b9f3a9f8cf43dc4991e7eb362d" - integrity sha512-1p5wVGiy4MfmhEt9MRY8yjZdkX+fi5jMxG1lqnAS1YmLUpE9VrOowxSINQ9Gjs89dFZMaENVwcMSPeQCjlz90Q== +standardized-audio-context@25.3.60, standardized-audio-context@^25.3.60: + version "25.3.60" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.60.tgz#f37a0e35bac7ca230dd44fc66efb28949f6bb864" + integrity sha512-h4ntLsHqnRESxyuU4C5/gvZTBqjBw1SoAR5lsQbqXPI4R3KKZTJWnMMpnRdiySr7cXokbEcepaPGGQ1V+UwlLw== dependencies: - "@babel/runtime" "^7.23.2" - automation-events "^6.0.11" + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" tslib "^2.6.2" string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: @@ -5864,6 +6527,11 @@ strip-comments@^2.0.1: resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -5890,6 +6558,13 @@ supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: dependencies: has-flag "^4.0.0" +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -5949,6 +6624,16 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +throttleit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + tinybench@^2.3.1: version "2.5.1" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" @@ -5964,6 +6649,13 @@ tinyspy@^1.0.2: resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -5981,7 +6673,7 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tough-cookie@^4.1.2: +tough-cookie@^4.1.2, tough-cookie@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -6005,7 +6697,7 @@ tr46@^3.0.0: dependencies: punycode "^2.1.1" -transliteration@2.3.5: +transliteration@2.3.5, transliteration@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/transliteration/-/transliteration-2.3.5.tgz#8f92309575f69e4a8a525dab4ff705ebcf961c45" integrity sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw== @@ -6027,7 +6719,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2: +tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -6039,6 +6731,18 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -6061,6 +6765,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" @@ -6101,14 +6810,14 @@ typed-array-length@^1.0.4: is-typed-array "^1.1.9" "typescript@4 - 5": - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + version "5.3.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" + integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== -typescript@4.9.4: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typical@^4.0.0: version "4.0.0" @@ -6226,14 +6935,19 @@ unplugin-vue-macros@2.4.6: unplugin-vue-define-options "1.3.15" unplugin@^1.0.0, unplugin@^1.3.2, unplugin@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" - integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== + version "1.5.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.1.tgz#806688376fa3dcca4d2fa2c5d27cf6cd0370fbef" + integrity sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew== dependencies: - acorn "^8.10.0" + acorn "^8.11.2" chokidar "^3.5.3" webpack-sources "^3.2.3" - webpack-virtual-modules "^0.5.0" + webpack-virtual-modules "^0.6.0" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== upath@^1.2.0: version "1.2.0" @@ -6273,28 +6987,42 @@ utility-types@3.10.0: resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-to-istanbul@^9.0.0: - version "9.1.3" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b" - integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" -vehicles@^9.0.1: - version "9.0.12" - resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.12.tgz#15882d4ecc060b0d9e739b6e47228c357009b0bf" - integrity sha512-OYOqeFXkC7lSdwWW2iAa7NqRTv1WwqTK7+Y1IpDF1rUUgP3qXsSYhLgcq7pMHvSz3ERXFqODf0ue1DxuVbYn0Q== +vehicles@^9.0.14: + version "9.0.14" + resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.14.tgz#a3a4488a9fd8c852993ac49f61b76052db662958" + integrity sha512-XIt5kTDoqtjxelMaO2SRQLg7tYW7bnuYBEIpW0DioMjDKrVHTDOcfJftEHq1hD4oGZYAjXCNU9h65ce04wEPhQ== dependencies: - "@babel/runtime" "^7.23.2" + "@babel/runtime" "^7.23.5" decimal.js "^10.4.3" tslib "^2.6.2" -vite-plugin-pwa@0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.1.tgz#c32905d77916aab23e86522e2d4882c652f008d5" - integrity sha512-5zx7yhQ8RTLwV71+GA9YsQQ63ALKG8XXIMqRJDdZkR8ZYftFcRgnzM7wOWmQZ/DATspyhPih5wCdcZnAIsM+mA== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vite-plugin-pwa@0.14.4: + version "0.14.4" + resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.4.tgz#d83fae9e85ab4a082e11ab475b3ec124bfe49084" + integrity sha512-M7Ct0so8OlouMkTWgXnl8W1xU95glITSKIe7qswZf1tniAstO2idElGCnsrTJ5NPNSx1XqfTCOUj8j94S6FD7Q== dependencies: "@rollup/plugin-replace" "^5.0.1" debug "^4.3.4" @@ -6304,15 +7032,14 @@ vite-plugin-pwa@0.14.1: workbox-build "^6.5.4" workbox-window "^6.5.4" -vite@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.0.4.tgz#4612ce0b47bbb233a887a54a4ae0c6e240a0da31" - integrity sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw== +vite@4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.5.tgz#3871fe0f4b582ea7f49a85386ac80e84826367d9" + integrity sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA== dependencies: - esbuild "^0.16.3" - postcss "^8.4.20" - resolve "^1.22.1" - rollup "^3.7.0" + esbuild "^0.17.5" + postcss "^8.4.23" + rollup "^3.21.0" optionalDependencies: fsevents "~2.3.2" @@ -6357,7 +7084,7 @@ vue-demi@^0.12.5: resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1" integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== -vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1: +vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1: version "9.3.2" resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== @@ -6395,12 +7122,12 @@ vue-resize@^2.0.0-alpha.1: resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz#43eeb79e74febe932b9b20c5c57e0ebc14e2df3a" integrity sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg== -vue-router@4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.1.6.tgz#b70303737e12b4814578d21d68d21618469375a1" - integrity sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ== +vue-router@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== dependencies: - "@vue/devtools-api" "^6.4.5" + "@vue/devtools-api" "^6.5.0" vue-template-compiler@^2.7.14: version "2.7.15" @@ -6410,13 +7137,14 @@ vue-template-compiler@^2.7.14: de-indent "^1.0.2" he "^1.2.0" -vue-tsc@1.0.24: - version "1.0.24" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.0.24.tgz#c0b270a7c8422408d3b6694fee61b39a4b9e4740" - integrity sha512-mmU1s5SAqE1nByQAiQnao9oU4vX+mSdsgI8H57SfKH6UVzq/jP9+Dbi2GaV+0b4Cn361d2ln8m6xeU60ApiEXg== +vue-tsc@1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.6.5.tgz#cd18804b12087c300b6c9ee2a1da41a63f11103e" + integrity sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA== dependencies: - "@volar/vue-language-core" "1.0.24" - "@volar/vue-typescript" "1.0.24" + "@volar/vue-language-core" "1.6.5" + "@volar/vue-typescript" "1.6.5" + semver "^7.3.8" vue-upload-component@3.1.8: version "3.1.8" @@ -6454,16 +7182,16 @@ vue3-lazyload@0.3.8: dependencies: vue-demi "^0.12.5" -vue@3.2.45: - version "3.2.45" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.45.tgz#94a116784447eb7dbd892167784619fef379b3c8" - integrity sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA== +vue@3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.11.tgz#898d97025f73cdb5fc4e3ae3fd07a54615232140" + integrity sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w== dependencies: - "@vue/compiler-dom" "3.2.45" - "@vue/compiler-sfc" "3.2.45" - "@vue/runtime-dom" "3.2.45" - "@vue/server-renderer" "3.2.45" - "@vue/shared" "3.2.45" + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-sfc" "3.3.11" + "@vue/runtime-dom" "3.3.11" + "@vue/server-renderer" "3.3.11" + "@vue/shared" "3.3.11" vue@^3.3.7: version "3.3.8" @@ -6525,10 +7253,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-virtual-modules@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" - integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== +webpack-virtual-modules@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== whatwg-encoding@^2.0.0: version "2.0.0" @@ -6774,6 +7502,15 @@ workbox-window@6.6.1, workbox-window@^6.5.4: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -6882,6 +7619,14 @@ yargs@^17.5.1: y18n "^5.0.5" yargs-parser "^21.1.1" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" diff --git a/pyproject.toml b/pyproject.toml index 02220d6ca..c5ad963b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,13 @@ [tool.towncrier] package = "changes" package_dir = "" -filename = "CHANGELOG" -directory = "changes/changelog.d/" -start_string = ".. towncrier\n" -template = "changes/template.rst" +filename = "CHANGELOG.md" +directory = "changes/changelog.d" +start_string = "<!-- towncrier -->\n" +template = "changes/template.md.j2" issue_format = "" -underlines = "-" +title_format = "" +underlines = [""] [[tool.towncrier.section]] path = "" diff --git a/scripts/Makefile b/scripts/Makefile new file mode 100644 index 000000000..6717f5af1 --- /dev/null +++ b/scripts/Makefile @@ -0,0 +1,18 @@ +SHELL = bash +CPU_CORES = $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) + +.PHONY: install test clean + +# Install +VENV = .venv +export POETRY_VIRTUALENVS_IN_PROJECT=true + +install: $(VENV) +$(VENV): + poetry install + +test: $(VENV) + poetry run pytest -s -vv + +clean: + rm -Rf $(VENV) diff --git a/scripts/build_metadata.py b/scripts/build_metadata.py new file mode 100755 index 000000000..efa18e3b5 --- /dev/null +++ b/scripts/build_metadata.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python3 + +""" +Build metadata is a script that will extract build information from the environment, +either from CI variables or from git commands. + +The build information are then mapped to the output format you need. The default output +format will print the build information as json. + +- Release tags are stable version tags (e.g. 1.2.9), +- Prerelease tags are unstable version tags (e.g. 1.3.0-rc3), +- Development branches are both the 'stable' and 'develop' branches, +- Feature branches are any branch that will be merged in the development branches. +""" + +import json +import logging +import os +import shlex +from argparse import ArgumentParser +from subprocess import check_output +from typing import List, Optional, TypedDict + +from packaging.version import Version + +logger = logging.getLogger(__name__) + +PROJECT_NAME = "Funkwhale" +PROJECT_DESCRIPTION = "Funkwhale platform" +AUTHORS = "Funkwhale Collective" +WEBSITE_URL = "https://funkwhale.audio/" +SOURCE_URL = "https://dev.funkwhale.audio/funkwhale/funkwhale" +DOCUMENTATION_URL = "https://docs.funkwhale.audio" +LICENSE = "AGPL-3.0" + + +class Metadata(TypedDict): + commit_tag: str + commit_branch: str + commit_sha: str + commit_timestamp: str + commit_ref_name: str + + version: str + """ + Version is: + - on release tags, the current tag name, + - on prerelease tags, the current tag name, + - on development branches, the latest tag name in the branch and the commit sha suffix, + - on feature branches, an empty string. + """ + tags: List[str] + """ + Tags are: + - on release tags, the current tag name and aliases in the form 'X.Y.Z', 'X.Y', 'X' and 'latest', + - on prerelease tags, the current tag name, + - on development branches, the current commit branch name, + - on feature branches, an empty list. + """ + latest: bool + """ + Latest is true when the current tag name is not a prerelease: + - on release tags: true, + - on prerelease tags: false, + - on development branches: false, + - on feature branches: false. + """ + + +def sh(cmd: str, **kwargs): + logger.debug("running command: %s", cmd) + return check_output(shlex.split(cmd), text=True, **kwargs).strip() + + +def latest_tag_on_branch() -> str: + """ + Return the latest tag on the current branch. + """ + return sh("git describe --tags --abbrev=0") + + +def env_or_cmd(key: str, cmd: str) -> str: + if "CI" in os.environ: + return os.environ.get(key, "") + + return sh(cmd) + + +def extract_metadata() -> Metadata: + commit_tag = env_or_cmd( + "CI_COMMIT_TAG", + "git tag --points-at HEAD", + ) + commit_branch = env_or_cmd( + "CI_COMMIT_BRANCH", + "git rev-parse --abbrev-ref HEAD", + ) + commit_sha = env_or_cmd( + "CI_COMMIT_SHA", + "git rev-parse HEAD", + ) + commit_timestamp = env_or_cmd( + "CI_COMMIT_TIMESTAMP", + "git show -s --format=%cI HEAD", + ) + commit_ref_name = os.environ.get( + "CI_COMMIT_REF_NAME", + default=commit_tag or commit_branch, + ) + + logger.info("found commit_tag: %s", commit_tag) + logger.info("found commit_branch: %s", commit_branch) + logger.info("found commit_sha: %s", commit_sha) + logger.info("found commit_timestamp: %s", commit_timestamp) + logger.info("found commit_ref_name: %s", commit_ref_name) + + version = "" + tags = [] + latest = False + if commit_tag: # Tagged version + version = Version(commit_tag) + if version.is_prerelease: + logger.info("build is for a prerelease tag") + tags.append(commit_tag) + + else: + logger.info("build is for a release tag") + tags.append(f"{version.major}.{version.minor}.{version.micro}") + tags.append(f"{version.major}.{version.minor}") + tags.append(f"{version.major}") + tags.append("latest") + latest = True + + version = tags[0] + + else: # Branch version + if commit_branch in ("stable", "develop"): + logger.info("build is for a development branch") + tags.append(commit_branch) + + previous_tag = latest_tag_on_branch() + previous_version = Version(previous_tag) + version = f"{previous_version.base_version}-dev+{commit_sha[:7]}" + + else: + logger.info("build is for a feature branch") + + return { + "commit_tag": commit_tag, + "commit_branch": commit_branch, + "commit_sha": commit_sha, + "commit_timestamp": commit_timestamp, + "commit_ref_name": commit_ref_name, + "version": version, + "tags": tags, + "latest": latest, + } + + +def bake_output( + metadata: Metadata, + target: Optional[str], + images: Optional[List[str]], +) -> dict: + if target is None: + logger.error("no bake target provided, exiting...") + raise SystemExit(1) + if images is None: + logger.error("no bake images provided, exiting...") + raise SystemExit(1) + + docker_tags = [f"{img}:{tag}" for img in images for tag in metadata["tags"]] + + docker_labels = { + "org.opencontainers.image.title": PROJECT_NAME, + "org.opencontainers.image.description": PROJECT_DESCRIPTION, + "org.opencontainers.image.url": WEBSITE_URL, + "org.opencontainers.image.source": SOURCE_URL, + "org.opencontainers.image.documentation": DOCUMENTATION_URL, + "org.opencontainers.image.licenses": LICENSE, + "org.opencontainers.image.vendor": AUTHORS, + "org.opencontainers.image.version": metadata["commit_ref_name"], + "org.opencontainers.image.created": metadata["commit_timestamp"], + "org.opencontainers.image.revision": metadata["commit_sha"], + } + + return { + "target": { + target: { + "tags": docker_tags, + "labels": docker_labels, + } + } + } + + +def env_output(metadata: Metadata) -> list[str]: + env_dict = { + "BUILD_COMMIT_TAG": str(metadata["commit_tag"]), + "BUILD_COMMIT_BRANCH": str(metadata["commit_branch"]), + "BUILD_COMMIT_SHA": str(metadata["commit_sha"]), + "BUILD_COMMIT_TIMESTAMP": str(metadata["commit_timestamp"]), + "BUILD_COMMIT_REF_NAME": str(metadata["commit_ref_name"]), + "BUILD_VERSION": str(metadata["version"]), + "BUILD_TAGS": ",".join(metadata["tags"]), + "BUILD_LATEST": str(metadata["latest"]).lower(), + } + return [f"{key}={value}" for key, value in env_dict.items()] + + +def main( + format_: str, + bake_target: Optional[str], + bake_images: Optional[List[str]], +) -> int: + metadata = extract_metadata() + + if format_ == "bake": + result = json.dumps( + bake_output(metadata=metadata, target=bake_target, images=bake_images), + indent=2, + ) + elif format_ == "env": + result = "\n".join(env_output(metadata=metadata)) + else: + result = json.dumps(metadata, indent=2) + + print(result) + return 0 + + +if __name__ == "__main__": + parser = ArgumentParser() + parser.add_argument( + "-f", + "--format", + choices=["bake", "env"], + default=None, + help="Print format for the metadata", + ) + parser.add_argument( + "--bake-target", + help="Target for the bake metadata", + ) + parser.add_argument( + "--bake-image", + action="append", + dest="bake_images", + help="Image names for the bake metadata", + ) + args = parser.parse_args() + logging.basicConfig(level=logging.DEBUG, format="%(levelname)s: %(message)s") + + raise SystemExit(main(args.format, args.bake_target, args.bake_images)) diff --git a/scripts/build_metadata_test.py b/scripts/build_metadata_test.py new file mode 100644 index 000000000..66b4b521f --- /dev/null +++ b/scripts/build_metadata_test.py @@ -0,0 +1,236 @@ +from unittest import mock + +import pytest +from build_metadata import ( + AUTHORS, + DOCUMENTATION_URL, + LICENSE, + PROJECT_DESCRIPTION, + PROJECT_NAME, + SOURCE_URL, + WEBSITE_URL, + bake_output, + env_output, + extract_metadata, +) + +common_docker_labels = { + "org.opencontainers.image.title": PROJECT_NAME, + "org.opencontainers.image.description": PROJECT_DESCRIPTION, + "org.opencontainers.image.url": WEBSITE_URL, + "org.opencontainers.image.source": SOURCE_URL, + "org.opencontainers.image.documentation": DOCUMENTATION_URL, + "org.opencontainers.image.licenses": LICENSE, + "org.opencontainers.image.vendor": AUTHORS, +} + +test_cases = [ + { # On a random feature branch + "environ": { + "CI": "true", + "CI_COMMIT_TAG": "", + "CI_COMMIT_BRANCH": "ci_build_metadata", + "CI_COMMIT_SHA": "de206ac559a171b68fb894b2d61db298fc386705", + "CI_COMMIT_TIMESTAMP": "2023-01-31T13:31:13+01:00", + "CI_COMMIT_REF_NAME": "ci_build_metadata", + }, + "metadata": { + "commit_tag": "", + "commit_branch": "ci_build_metadata", + "commit_sha": "de206ac559a171b68fb894b2d61db298fc386705", + "commit_timestamp": "2023-01-31T13:31:13+01:00", + "commit_ref_name": "ci_build_metadata", + "version": "", + "tags": [], + "latest": False, + }, + "bake_output": { + "target": { + "api": { + "tags": [], + "labels": { + **common_docker_labels, + "org.opencontainers.image.version": "ci_build_metadata", + "org.opencontainers.image.created": "2023-01-31T13:31:13+01:00", + "org.opencontainers.image.revision": "de206ac559a171b68fb894b2d61db298fc386705", + }, + } + } + }, + "env_output": [ + "BUILD_COMMIT_TAG=", + "BUILD_COMMIT_BRANCH=ci_build_metadata", + "BUILD_COMMIT_SHA=de206ac559a171b68fb894b2d61db298fc386705", + "BUILD_COMMIT_TIMESTAMP=2023-01-31T13:31:13+01:00", + "BUILD_COMMIT_REF_NAME=ci_build_metadata", + "BUILD_VERSION=", + "BUILD_TAGS=", + "BUILD_LATEST=false", + ], + }, + { # On the develop (or stable) branch + "environ": { + "CI": "true", + "CI_COMMIT_TAG": "", + "CI_COMMIT_BRANCH": "develop", + "CI_COMMIT_SHA": "de206ac559a171b68fb894b2d61db298fc386705", + "CI_COMMIT_TIMESTAMP": "2023-01-31T13:31:13+01:00", + "CI_COMMIT_REF_NAME": "develop", + }, + "metadata": { + "commit_tag": "", + "commit_branch": "develop", + "commit_sha": "de206ac559a171b68fb894b2d61db298fc386705", + "commit_timestamp": "2023-01-31T13:31:13+01:00", + "commit_ref_name": "develop", + "version": "1.7.2-dev+de206ac", + "tags": ["develop"], + "latest": False, + }, + "bake_output": { + "target": { + "api": { + "tags": ["funkwhale/api:develop"], + "labels": { + **common_docker_labels, + "org.opencontainers.image.version": "develop", + "org.opencontainers.image.created": "2023-01-31T13:31:13+01:00", + "org.opencontainers.image.revision": "de206ac559a171b68fb894b2d61db298fc386705", + }, + } + } + }, + "env_output": [ + "BUILD_COMMIT_TAG=", + "BUILD_COMMIT_BRANCH=develop", + "BUILD_COMMIT_SHA=de206ac559a171b68fb894b2d61db298fc386705", + "BUILD_COMMIT_TIMESTAMP=2023-01-31T13:31:13+01:00", + "BUILD_COMMIT_REF_NAME=develop", + "BUILD_VERSION=1.7.2-dev+de206ac", + "BUILD_TAGS=develop", + "BUILD_LATEST=false", + ], + }, + { # A release tag + "environ": { + "CI": "true", + "CI_COMMIT_TAG": "1.2.9", + "CI_COMMIT_BRANCH": "", + "CI_COMMIT_SHA": "817c8fbcaa0706ccc9b724da8546f44ba7d2d841", + "CI_COMMIT_TIMESTAMP": "2022-11-25T17:59:23+01:00", + "CI_COMMIT_REF_NAME": "1.2.9", + }, + "metadata": { + "commit_tag": "1.2.9", + "commit_branch": "", + "commit_sha": "817c8fbcaa0706ccc9b724da8546f44ba7d2d841", + "commit_timestamp": "2022-11-25T17:59:23+01:00", + "commit_ref_name": "1.2.9", + "version": "1.2.9", + "tags": ["1.2.9", "1.2", "1", "latest"], + "latest": True, + }, + "bake_output": { + "target": { + "api": { + "tags": [ + "funkwhale/api:1.2.9", + "funkwhale/api:1.2", + "funkwhale/api:1", + "funkwhale/api:latest", + ], + "labels": { + **common_docker_labels, + "org.opencontainers.image.version": "1.2.9", + "org.opencontainers.image.created": "2022-11-25T17:59:23+01:00", + "org.opencontainers.image.revision": "817c8fbcaa0706ccc9b724da8546f44ba7d2d841", + }, + } + } + }, + "env_output": [ + "BUILD_COMMIT_TAG=1.2.9", + "BUILD_COMMIT_BRANCH=", + "BUILD_COMMIT_SHA=817c8fbcaa0706ccc9b724da8546f44ba7d2d841", + "BUILD_COMMIT_TIMESTAMP=2022-11-25T17:59:23+01:00", + "BUILD_COMMIT_REF_NAME=1.2.9", + "BUILD_VERSION=1.2.9", + "BUILD_TAGS=1.2.9,1.2,1,latest", + "BUILD_LATEST=true", + ], + }, + { # A prerelease tag + "environ": { + "CI": "true", + "CI_COMMIT_TAG": "1.3.0-rc3", + "CI_COMMIT_BRANCH": "", + "CI_COMMIT_SHA": "e04a1b188d3f463e7b3e2484578d63d754b09b9d", + "CI_COMMIT_TIMESTAMP": "2023-01-23T14:24:46+01:00", + "CI_COMMIT_REF_NAME": "1.3.0-rc3", + }, + "metadata": { + "commit_tag": "1.3.0-rc3", + "commit_branch": "", + "commit_sha": "e04a1b188d3f463e7b3e2484578d63d754b09b9d", + "commit_timestamp": "2023-01-23T14:24:46+01:00", + "commit_ref_name": "1.3.0-rc3", + "version": "1.3.0-rc3", + "tags": ["1.3.0-rc3"], + "latest": False, + }, + "bake_output": { + "target": { + "api": { + "tags": ["funkwhale/api:1.3.0-rc3"], + "labels": { + **common_docker_labels, + "org.opencontainers.image.version": "1.3.0-rc3", + "org.opencontainers.image.created": "2023-01-23T14:24:46+01:00", + "org.opencontainers.image.revision": "e04a1b188d3f463e7b3e2484578d63d754b09b9d", + }, + } + } + }, + "env_output": [ + "BUILD_COMMIT_TAG=1.3.0-rc3", + "BUILD_COMMIT_BRANCH=", + "BUILD_COMMIT_SHA=e04a1b188d3f463e7b3e2484578d63d754b09b9d", + "BUILD_COMMIT_TIMESTAMP=2023-01-23T14:24:46+01:00", + "BUILD_COMMIT_REF_NAME=1.3.0-rc3", + "BUILD_VERSION=1.3.0-rc3", + "BUILD_TAGS=1.3.0-rc3", + "BUILD_LATEST=false", + ], + }, +] + + +@pytest.mark.parametrize( + "environ, expected_metadata, expected_bake_output, expected_env_output", + map( + lambda i: (i["environ"], i["metadata"], i["bake_output"], i["env_output"]), + test_cases, + ), +) +def test_extract_metadata( + environ, + expected_metadata, + expected_bake_output, + expected_env_output, +): + with mock.patch("build_metadata.latest_tag_on_branch") as latest_tag_on_branch_mock: + latest_tag_on_branch_mock.return_value = "1.7.2-rc5" + with mock.patch.dict("os.environ", environ, clear=True): + found_metadata = extract_metadata() + + assert found_metadata == expected_metadata + + found_bake_output = bake_output( + metadata=found_metadata, + target="api", + images=["funkwhale/api"], + ) + assert found_bake_output == expected_bake_output + + found_env_output = env_output(metadata=found_metadata) + assert found_env_output == expected_env_output diff --git a/scripts/compile-templates.py b/scripts/compile-templates.py new file mode 100644 index 000000000..596e7bb70 --- /dev/null +++ b/scripts/compile-templates.py @@ -0,0 +1,38 @@ +from jinja2 import Environment, FileSystemLoader + +file_loader = FileSystemLoader("templates") +env = Environment( + loader=file_loader, trim_blocks=True, lstrip_blocks=True, keep_trailing_newline=True +) + +files = [ + { + "output": "docker/nginx/conf.dev", + "config": {"proxy_frontend": True, "inside_docker": True}, + }, + { + "output": "front/docker/funkwhale.conf.template", + "config": {"proxy_frontend": False, "inside_docker": True}, + }, + { + "output": "deploy/nginx.template", + "config": {"proxy_frontend": False, "inside_docker": False}, + }, + { + "output": "deploy/docker.proxy.template", + "config": { + "proxy_frontend": False, + "inside_docker": False, + "reverse_proxy": True, + }, + }, +] + +template = env.get_template("nginx.conf.j2") +for f in files: + print(f["output"]) + output = template.render(config=f["config"]) + + output_file = open(f["output"], "w") + output_file.write(output) + output_file.close() diff --git a/scripts/poetry.lock b/scripts/poetry.lock new file mode 100644 index 000000000..5623ad25a --- /dev/null +++ b/scripts/poetry.lock @@ -0,0 +1,108 @@ +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.1" +description = "Backport of PEP 654 (exception groups)" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, + {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pytest" +version = "7.3.1" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, + {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "ec0e08e7f3e649acf4291ade9f3e194a289be464756ef17fdba0f515a6b16bf0" diff --git a/scripts/pyproject.toml b/scripts/pyproject.toml new file mode 100644 index 000000000..32a206113 --- /dev/null +++ b/scripts/pyproject.toml @@ -0,0 +1,20 @@ +[tool.poetry] +name = "funkwhale-scripts" +version = "0.0.0" +description = "Funkwhale Scripts" +authors = ["Funkwhale Collective"] +license = "AGPL-3.0-only" + +[tool.poetry.dependencies] +python = "^3.8" + +[tool.poetry.group.dev.dependencies] +pytest = "7.3.1" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" + +[tool.pytest.ini_options] +log_cli = "true" +log_level = "DEBUG" diff --git a/scripts/releases.py b/scripts/releases.py new file mode 100755 index 000000000..fe9abb6f1 --- /dev/null +++ b/scripts/releases.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 + +import json +import logging +from argparse import ArgumentParser +from functools import reduce +from operator import getitem +from subprocess import check_output +from typing import Dict, List + +from packaging.version import InvalidVersion, Version + +logger = logging.getLogger(__name__) + + +def get_releases() -> List[Dict[str, str]]: + """ + Gather all releases from git tags, sorted by version. + Do not include pre releases. + """ + output = check_output( + [ + *("git", "tag", "-l"), + "--format=%(creatordate:iso-strict)|%(refname:short)", + "--sort=v:refname", # sort by refname (version sort, not lexicographic) + ], + text=True, + ) + + result = [] + for line in output.splitlines(): + date, _, ref = line.partition("|") + try: + version = Version(ref) + if version.pre is not None: + logger.warning("ignoring pre release: %s", version) + continue + + except InvalidVersion as exception: + logger.error("ignoring invalid release: %s", exception) + continue + + result.append({"id": ref, "date": date}) + return list(reversed(result)) + + +def resolve_query(haystack, needle: str): + if isinstance(haystack, list): + needle = int(needle) + return getitem(haystack, needle) + + +def main(query: str = None, raw: bool = False) -> int: + releases = get_releases() + data = { + "count": len(releases), + "latest": releases[0], + "releases": releases, + } + + if query is not None: + parts = query.split(".") + result = reduce(resolve_query, parts, data) + else: + result = data + + if raw: + print(result) + else: + print(json.dumps(result, indent=2)) + + return 0 + + +if __name__ == "__main__": + parser = ArgumentParser("Compile releases data") + parser.add_argument( + "-q", + "--query", + help="Query a specific data", + ) + parser.add_argument( + "-r", + "--raw", + action="store_true", + help="Output raw data", + ) + args = parser.parse_args() + raise SystemExit(main(query=args.query, raw=args.raw)) diff --git a/scripts/releases_test.py b/scripts/releases_test.py new file mode 100755 index 000000000..102b82ba5 --- /dev/null +++ b/scripts/releases_test.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 + + +from textwrap import dedent +from unittest import mock + +from releases import get_releases + +GIT_TAGS = dedent( + """ + 2017-06-26T22:31:52+02:00|0.1 + 2017-07-09T11:37:55+02:00|0.2 + 2017-07-17T22:08:58+02:00|0.2.1 + 2017-12-11T21:16:02+01:00|0.2.2 + 2017-12-12T23:55:09+01:00|0.2.3 + 2017-12-14T23:08:49+01:00|0.2.4 + 2017-12-16T16:15:42+01:00|0.2.5 + 2017-12-16T16:40:52+01:00|0.2.6 + 2017-12-26T21:29:05+01:00|0.3 + 2017-12-27T23:36:54+01:00|0.3.1 + 2017-12-27T23:44:11+01:00|0.3.2 + 2018-01-07T22:27:43+01:00|0.3.3 + 2018-01-07T22:52:04+01:00|0.3.4 + 2018-01-07T23:08:10+01:00|0.3.5 + 2018-02-18T14:48:53+01:00|0.4 + 2018-02-24T15:37:50+01:00|0.5 + 2018-02-24T18:08:07+01:00|0.5.1 + 2018-02-26T21:39:41+01:00|0.5.2 + 2018-02-27T23:10:45+01:00|0.5.3 + 2018-02-28T19:29:47+01:00|0.5.4 + 2018-03-04T15:16:57+01:00|0.6 + 2018-03-06T21:56:21+01:00|0.6.1 + 2018-03-21T21:05:15+01:00|0.7 + 2018-04-02T20:04:53+02:00|0.8 + 2018-04-17T21:31:49+02:00|0.9 + 2018-04-17T23:20:48+02:00|0.9.1 + 2018-04-23T19:44:48+02:00|0.10 + 2018-05-06T16:24:23+02:00|0.11 + 2018-05-09T23:46:23+02:00|0.12 + 2018-05-19T11:43:36+02:00|0.13 + 2018-06-02T18:11:24+02:00|0.14 + 2018-06-06T22:03:42+02:00|0.14.1 + 2018-06-16T15:04:57+02:00|0.14.2 + 2018-06-24T16:00:40+02:00|0.15 + 2018-07-22T22:44:16+02:00|0.16 + 2018-08-19T19:05:22+02:00|0.16.1 + 2018-08-21T19:03:14+02:00|0.16.2 + 2018-08-21T20:34:15+02:00|0.16.3 + 2018-10-07T11:53:35+02:00|0.17 + 2019-01-22T12:05:12+01:00|0.18 + 2019-01-29T14:25:50+01:00|0.18.1 + 2019-02-13T09:28:23+01:00|0.18.2 + 2019-03-21T10:41:32+01:00|0.18.3 + 2019-05-16T12:30:38+02:00|0.19.0 + 2019-05-02T14:26:46+02:00|0.19.0-rc1 + 2019-05-10T10:05:26+02:00|0.19.0-rc2 + 2019-06-28T10:25:35+02:00|0.19.1 + 2019-10-04T10:42:33+02:00|0.20.0 + 2019-09-24T15:28:11+02:00|0.20.0-rc1 + 2019-10-28T10:54:39+01:00|0.20.1 + 2020-04-24T10:11:25+02:00|0.21 + 2020-04-09T09:57:16+02:00|0.21-rc1 + 2020-04-22T11:10:55+02:00|0.21-rc2 + 2020-06-11T10:44:20+02:00|0.21.1 + 2020-07-27T11:21:40+02:00|0.21.2 + 2020-09-09T07:48:14+02:00|1.0 + 2020-08-23T15:21:29+02:00|1.0-rc1 + 2020-10-31T12:43:37+01:00|1.0.1 + 2021-03-10T10:25:28+01:00|1.1 + 2021-02-24T08:18:56+01:00|1.1-rc1 + 2021-03-01T19:21:36+01:00|1.1-rc2 + 2021-04-13T10:27:07+02:00|1.1.1 + 2021-05-19T15:30:51+02:00|1.1.2 + 2021-08-01T22:04:02+02:00|1.1.3 + 2021-08-02T20:47:50+02:00|1.1.4 + 2021-12-27T20:56:03+01:00|1.2.0 + 2021-12-08T20:15:55+01:00|1.2.0-rc1 + 2021-12-21T09:12:57+00:00|1.2.0-rc2 + 2021-11-05T09:24:36+00:00|1.2.0-testing + 2021-11-05T09:31:10+00:00|1.2.0-testing2 + 2021-11-05T09:43:30+00:00|1.2.0-testing3 + 2021-11-05T12:00:26+00:00|1.2.0-testing4 + 2022-01-06T17:35:53+01:00|1.2.1 + 2022-02-04T12:49:11+01:00|1.2.2 + 2022-03-18T10:57:16+01:00|1.2.3 + 2022-04-23T13:40:06+02:00|1.2.4 + 2022-05-07T13:48:31+02:00|1.2.5 + 2022-07-04T17:03:19+02:00|1.2.6 + 2022-07-05T15:43:08+02:00|1.2.6-1 + 2022-07-14T12:53:53+02:00|1.2.7 + 2022-09-12T10:51:44+02:00|1.2.8 + 2022-11-25T17:59:23+01:00|1.2.9 + 2023-01-20T09:40:58+01:00|1.3.0-rc1 + 2023-01-23T10:41:22+01:00|1.3.0-rc2 + 2023-01-23T14:24:46+01:00|1.3.0-rc3 + """ +) + + +def test_get_releases(): + with mock.patch("releases.check_output") as check_output_mock: + check_output_mock.return_value = GIT_TAGS + + assert get_releases() == [ + {"id": "1.2.9", "date": "2022-11-25T17:59:23+01:00"}, + {"id": "1.2.8", "date": "2022-09-12T10:51:44+02:00"}, + {"id": "1.2.7", "date": "2022-07-14T12:53:53+02:00"}, + {"id": "1.2.6-1", "date": "2022-07-05T15:43:08+02:00"}, + {"id": "1.2.6", "date": "2022-07-04T17:03:19+02:00"}, + {"id": "1.2.5", "date": "2022-05-07T13:48:31+02:00"}, + {"id": "1.2.4", "date": "2022-04-23T13:40:06+02:00"}, + {"id": "1.2.3", "date": "2022-03-18T10:57:16+01:00"}, + {"id": "1.2.2", "date": "2022-02-04T12:49:11+01:00"}, + {"id": "1.2.1", "date": "2022-01-06T17:35:53+01:00"}, + {"id": "1.2.0", "date": "2021-12-27T20:56:03+01:00"}, + {"id": "1.1.4", "date": "2021-08-02T20:47:50+02:00"}, + {"id": "1.1.3", "date": "2021-08-01T22:04:02+02:00"}, + {"id": "1.1.2", "date": "2021-05-19T15:30:51+02:00"}, + {"id": "1.1.1", "date": "2021-04-13T10:27:07+02:00"}, + {"id": "1.1", "date": "2021-03-10T10:25:28+01:00"}, + {"id": "1.0.1", "date": "2020-10-31T12:43:37+01:00"}, + {"id": "1.0", "date": "2020-09-09T07:48:14+02:00"}, + {"id": "0.21.2", "date": "2020-07-27T11:21:40+02:00"}, + {"id": "0.21.1", "date": "2020-06-11T10:44:20+02:00"}, + {"id": "0.21", "date": "2020-04-24T10:11:25+02:00"}, + {"id": "0.20.1", "date": "2019-10-28T10:54:39+01:00"}, + {"id": "0.20.0", "date": "2019-10-04T10:42:33+02:00"}, + {"id": "0.19.1", "date": "2019-06-28T10:25:35+02:00"}, + {"id": "0.19.0", "date": "2019-05-16T12:30:38+02:00"}, + {"id": "0.18.3", "date": "2019-03-21T10:41:32+01:00"}, + {"id": "0.18.2", "date": "2019-02-13T09:28:23+01:00"}, + {"id": "0.18.1", "date": "2019-01-29T14:25:50+01:00"}, + {"id": "0.18", "date": "2019-01-22T12:05:12+01:00"}, + {"id": "0.17", "date": "2018-10-07T11:53:35+02:00"}, + {"id": "0.16.3", "date": "2018-08-21T20:34:15+02:00"}, + {"id": "0.16.2", "date": "2018-08-21T19:03:14+02:00"}, + {"id": "0.16.1", "date": "2018-08-19T19:05:22+02:00"}, + {"id": "0.16", "date": "2018-07-22T22:44:16+02:00"}, + {"id": "0.15", "date": "2018-06-24T16:00:40+02:00"}, + {"id": "0.14.2", "date": "2018-06-16T15:04:57+02:00"}, + {"id": "0.14.1", "date": "2018-06-06T22:03:42+02:00"}, + {"id": "0.14", "date": "2018-06-02T18:11:24+02:00"}, + {"id": "0.13", "date": "2018-05-19T11:43:36+02:00"}, + {"id": "0.12", "date": "2018-05-09T23:46:23+02:00"}, + {"id": "0.11", "date": "2018-05-06T16:24:23+02:00"}, + {"id": "0.10", "date": "2018-04-23T19:44:48+02:00"}, + {"id": "0.9.1", "date": "2018-04-17T23:20:48+02:00"}, + {"id": "0.9", "date": "2018-04-17T21:31:49+02:00"}, + {"id": "0.8", "date": "2018-04-02T20:04:53+02:00"}, + {"id": "0.7", "date": "2018-03-21T21:05:15+01:00"}, + {"id": "0.6.1", "date": "2018-03-06T21:56:21+01:00"}, + {"id": "0.6", "date": "2018-03-04T15:16:57+01:00"}, + {"id": "0.5.4", "date": "2018-02-28T19:29:47+01:00"}, + {"id": "0.5.3", "date": "2018-02-27T23:10:45+01:00"}, + {"id": "0.5.2", "date": "2018-02-26T21:39:41+01:00"}, + {"id": "0.5.1", "date": "2018-02-24T18:08:07+01:00"}, + {"id": "0.5", "date": "2018-02-24T15:37:50+01:00"}, + {"id": "0.4", "date": "2018-02-18T14:48:53+01:00"}, + {"id": "0.3.5", "date": "2018-01-07T23:08:10+01:00"}, + {"id": "0.3.4", "date": "2018-01-07T22:52:04+01:00"}, + {"id": "0.3.3", "date": "2018-01-07T22:27:43+01:00"}, + {"id": "0.3.2", "date": "2017-12-27T23:44:11+01:00"}, + {"id": "0.3.1", "date": "2017-12-27T23:36:54+01:00"}, + {"id": "0.3", "date": "2017-12-26T21:29:05+01:00"}, + {"id": "0.2.6", "date": "2017-12-16T16:40:52+01:00"}, + {"id": "0.2.5", "date": "2017-12-16T16:15:42+01:00"}, + {"id": "0.2.4", "date": "2017-12-14T23:08:49+01:00"}, + {"id": "0.2.3", "date": "2017-12-12T23:55:09+01:00"}, + {"id": "0.2.2", "date": "2017-12-11T21:16:02+01:00"}, + {"id": "0.2.1", "date": "2017-07-17T22:08:58+02:00"}, + {"id": "0.2", "date": "2017-07-09T11:37:55+02:00"}, + {"id": "0.1", "date": "2017-06-26T22:31:52+02:00"}, + ] diff --git a/scripts/set-api-build-metadata.sh b/scripts/set-api-build-metadata.sh index 0ecbce59a..629edffdc 100755 --- a/scripts/set-api-build-metadata.sh +++ b/scripts/set-api-build-metadata.sh @@ -1,13 +1,26 @@ #!/usr/bin/env bash -set -eux +# Given a commit hash, this script will update the version in api/pyproject.toml +# The version must follow the pep440 specification https://peps.python.org/pep-0440/ -# given a commit hash, will append this to the version number stored -# in api/funkwhale_api/__init__.py +set -eu -COMMIT=$1 -FILE="api/funkwhale_api/__init__.py" +error() { + echo >&2 "error: $*" + exit 1 +} -SUFFIX="\1+git.$COMMIT" -EXPR=$(printf 's@__version__ = "(.*)"@__version__ = "%s"@' "$SUFFIX") -sed -i -E "$EXPR" "$FILE" +command -v git > /dev/null || error "git command not found!" +command -v poetry > /dev/null || error "poetry command not found!" + +# We assume this script only runs in a git repository +cd "$(git rev-parse --show-toplevel)/api" + +COMMIT_SHA="$1" + +CURRENT_VERSION="$(poetry version --short)" +CURRENT_VERSION="${CURRENT_VERSION%%.dev*}" + +VERSION_SUFFIX="dev+$COMMIT_SHA" + +poetry version "$CURRENT_VERSION-$VERSION_SUFFIX" diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 new file mode 100644 index 000000000..503d7abcb --- /dev/null +++ b/templates/nginx.conf.j2 @@ -0,0 +1,272 @@ +{% if config.reverse_proxy %} +upstream fw { + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +{% else %} +{% if config.inside_docker %} +upstream funkwhale-api { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; +} +{% else %} + +upstream funkwhale-api { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +{% endif %} +{% endif %} +{% if config.proxy_frontend %} + +upstream funkwhale-front { + server ${FUNKWHALE_FRONT_IP}:${FUNKWHALE_FRONT_PORT}; +} +{% endif %} + +# Required for websocket support. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +{% if not config.inside_docker %} +server { + listen 80; + listen [::]:80; + # update this to match your instance name + server_name ${FUNKWHALE_HOSTNAME}; + + # useful for Let's Encrypt + location /.well-known/acme-challenge/ { + allow all; + } + + location / { + return 301 https://$host$request_uri; + } +} +{% endif %} + +server { +{% if not config.inside_docker %} + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name ${FUNKWHALE_HOSTNAME}; + + # TLS + # Feel free to use your own configuration for SSL here or simply remove the + # lines and move the configuration to the previous server block if you + # don't want to run funkwhale behind https (this is not recommended) + # have a look here for let's encrypt configuration: + # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; + + # HSTS + add_header Strict-Transport-Security "max-age=31536000"; + +{% else %} + listen 80; + listen [::]:80; + + server_name _; +{% endif %} + + # General configs +{% if not config.reverse_proxy %} +{% if config.inside_docker %} + root /usr/share/nginx/html; +{% else %} + root ${FUNKWHALE_FRONTEND_PATH}; +{% endif %} +{% endif %} + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; + + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings +{% if not config.reverse_proxy %} + + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + + location /api/ { + include /etc/nginx/funkwhale_proxy.conf; + # This is needed if you have file import via upload enabled. + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api; + } + + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + {% if config.proxy_frontend %} + proxy_pass http://funkwhale-front; + {% else %} + {% if config.inside_docker %} + alias /usr/share/nginx/html/; + {% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/; + {% endif %} + try_files $uri $uri/ /index.html; + {% endif %} + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } +{% endif %} + + location / { +{% if not config.reverse_proxy %} + expires 1d; +{% endif %} + include /etc/nginx/funkwhale_proxy.conf; +{% if config.proxy_frontend and not config.reverse_proxy %} + proxy_pass http://funkwhale-front; +{% elif not config.proxy_frontend and config.reverse_proxy %} + proxy_pass http://fw; +{% else %} +{% if config.inside_docker %} + alias /usr/share/nginx/html/; +{% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/; +{% endif %} + try_files $uri $uri/ /index.html; +{% endif %} + } + +{% if not config.reverse_proxy %} +{% if config.proxy_frontend %} + location = /embed.html { + proxy_pass http://funkwhale-front; +{% else %} + location ~ "/(front/)?embed.html" { +{% if config.inside_docker %} + alias /usr/share/nginx/html/embed.html; +{% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; +{% endif %} +{% endif %} + add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + expires 1d; + } + + location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + # You can comment this if you do not plan to use the Subsonic API. + location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; + } + + location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + # Allow direct access to only specific subdirectories in /media + location /media/__sized__/ { + alias ${MEDIA_ROOT}/__sized__/; + add_header Access-Control-Allow-Origin '*'; + } + + # Allow direct access to only specific subdirectories in /media + location /media/attachments/ { + alias ${MEDIA_ROOT}/attachments/; + add_header Access-Control-Allow-Origin '*'; + } + + # Allow direct access to only specific subdirectories in /media + location /media/dynamic_preferences/ { + alias ${MEDIA_ROOT}/dynamic_preferences/; + add_header Access-Control-Allow-Origin '*'; + } + + # This is an internal location that is used to serve + # media (uploaded) files once correct permission / authentication + # has been checked on API side. + # Comment the "NON-S3" commented lines and uncomment "S3" commented lines + # if you're storing media files in a S3 bucket. + location ~ /_protected/media/(.+) { + internal; + alias ${MEDIA_ROOT}/$1; # NON-S3 + # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932. +# proxy_set_header Authorization ""; # S3 +# proxy_pass $1; # S3 + add_header Access-Control-Allow-Origin '*'; + } + + location /_protected/music/ { + # This is an internal location that is used to serve + # local music files once correct permission / authentication + # has been checked on API side. + # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. + internal; + alias ${MUSIC_DIRECTORY_PATH}/; + add_header Access-Control-Allow-Origin '*'; + } + + location /manifest.json { + # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL + return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; + } + +{% if config.proxy_frontend %} + location /staticfiles/ { + alias /usr/share/nginx/html/staticfiles/; + } +{% endif %} +{% if not config.reverse_proxy and not config.inside_docker %} + location /staticfiles/ { + alias ${STATIC_ROOT}/; + } +{% endif %} +{% endif %} +}